logo
Secciones

Entradas del blog


Habilitar BackSpace en Files Gnome | Fedora

64

Contexto

En la versión 37 de Fedora con nautilus 43, la tecla retroceso en nautilus dejó de utilizarse para volver al directorio anterior.

En lo personal nunca me gustó ese cambio, nunca lo aceptaré, POR LA SENCILLA RAZÓN, DE QUE NO ENTIENDO, POR QUÉ TENER QUE USAR LA COMBINACIÓN DE DOS TECLAS PARA VOLVER AL DIRECTORIO ANTERIOR, CUANDO PUEDES USAR SOLO UNA?

Pero, esa sólo es mi opinión, mi comodidad y experiencia en mi trabajo día a día con Nautilus, por lo que, mientras yo encuentre cómo regresar o habilitar dicha función, lo seguiré haciendo.

Hasta la versión 46 de Nautilus/Files de Gnome que venía por defecto en Fedora 40, el script que utilizaba para habilitar la tecla de backspace o retroceso para volver al directorio anterior o padre, funcionaba bien, sin embargo, en la versión 47 de Files o Nautilus, ya no funciona. Así que el script, requiere una actualización, mínima pero la requiere.

Instalación de dependencias

Los repositorio de rpmfusion solo se instalan en caso de que no se tengan previamente configurados

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install nautilus-python python3-gobject gtk3 python3 gobject-introspection-devel pkg-config python3-devel gtk-murrine-engine  kernel-headers kernel-devel dkms elfutils-libelf-devel qt5-qtx11extras gcc make perl bzip2 meson ninja-build gcc python3-devel python3-pip gobject-introspection-devel glib2-devel nautilus-devel

Configuración

Aquí la configuración en Nautilus enable BackSpace: se aceptan sugerencias y mejoras

Crear el siguiente directorio:

mkdir -p ~/.local/share/nautilus-python/extensions

Crear el archivo en el directorio creado previamente:

gnome-text-editor ~/.local/share/nautilus-python/extensions/BackspaceBack.py
  • El script a utilizar dependerá de la versión de Gnome files se tenga, si tienen una versión superior a 37 y menor o igual a 46 usar éste script:
#!/usr/bin/env python
# created by linuxitos
import gi

gi.require_version('Nautilus', '4.0')
gi.require_version('Gtk', '4.0')
from gi.repository import GObject, Nautilus, Gtk, GLib

def idle_callback(*args):
    app = Gtk.Application.get_default()
    app.set_accels_for_action("win.up", ["BackSpace"])
    return False

def window_added(*args):
    GLib.idle_add(idle_callback, None)

class BackspaceBack(GObject.GObject, Nautilus.ColumnProvider):
        app = Gtk.Application.get_default()
        app.set_accels_for_action("win.up", ["BackSpace"])
        app.connect("window-added", window_added)
  • Si se tiene Gnome 47 o 48, usar éste otro script
#!/usr/bin/env python
# created by linuxitos
import gi

gi.require_version('Nautilus', '4.0')
gi.require_version('Gtk', '4.0')
from gi.repository import GObject, Nautilus, Gtk, GLib

def idle_callback(*args):
    app = Gtk.Application.get_default()
    app.set_accels_for_action("slot.up", ["BackSpace"])
    return False

def window_added(*args):
    GLib.idle_add(idle_callback, None)

class BackspaceBack(GObject.GObject, Nautilus.ColumnProvider):
        app = Gtk.Application.get_default()
        app.set_accels_for_action("slot.up", ["BackSpace"])
        app.connect("window-added", window_added)
  • Si se tiene Gnome 49 usar éste otro script
#!/usr/bin/env python
# created by linuxitos (mod GNOME 49)

import gi
import os

gi.require_version('Nautilus', '4.1')
gi.require_version('Gtk', '4.0')
gi.require_version('Gdk', '4.0')

from gi.repository import GObject, Nautilus, Gtk, Gdk

class BackspaceBack(GObject.GObject, Nautilus.InfoProvider):

    def __init__(self):
        super().__init__()

        app = Gtk.Application.get_default()
        if not app:
            print("[BackspaceBack] Gtk.Application.get_default() is None", file=os.sys.stderr)
            return

        app.connect("window-added", self.on_window_added)

        for window in app.get_windows():
            if isinstance(window, Gtk.ApplicationWindow):
                self._attach_controller(window)

    def update_file_info(self, file: Nautilus.FileInfo):
        return

    def on_window_added(self, app, window):
        if isinstance(window, Gtk.ApplicationWindow):
            self._attach_controller(window)

    def _attach_controller(self, window: Gtk.Window):
        if getattr(window, "_backspace_nav_attached", False):
            return

        key_controller = Gtk.EventControllerKey.new()
        key_controller.connect("key-pressed", self.on_key_pressed, window)
        window.add_controller(key_controller)

        window._backspace_nav_attached = True

    def on_key_pressed(self, controller, keyval, keycode, state, window: Gtk.Window):
        if keyval != Gdk.KEY_BackSpace:
            return False

        if state & Gtk.accelerator_get_default_mod_mask():
            return False

        focus_widget = window.get_focus()

        if isinstance(focus_widget, Gtk.Editable):
            return False

        try:
            window.activate_action("slot.up", None)
            return True
        except Exception as e:
            print(f"[BackspaceBack] Error al activar 'slot.up': {e}", file=os.sys.stderr)
            return False

def init():
    return BackspaceBack()

Reiniciar nautilus/files

nautilus -q

Espero y sea de utilidad, fue probado y utilizado desde Fedora 37, hasta la versión 49.

Comentarios:

Conoce la red social linuxClick
Redes sociales
Accesos directos