بخش ۱: نصب پیش‌نیازها

۱. نصب python3-nautilus برای GNOME 48

sudo apt update
sudo apt install python3-nautilus

۲. تأیید نصب برای GNOME 48

# بررسی نسخه Nautilus
nautilus --version
# باید ببینید: GNOME nautilus 48.x

# تست Python binding برای نسخه ۴.۰
python3 -c "import gi; gi.require_version('Nautilus', '4.0'); from gi.repository import Nautilus; print('Nautilus Python binding برای GNOME 48 آماده است!')"

بخش ۲: ایجاد ساختار دایرکتوری

۱. ایجاد دایرکتوری افزونه‌ها

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

بخش ۳: ایجاد افزونه Backspace برای GNOME 48

فایل افزونه backspace_back.py:

#!/usr/bin/env python3
# Backspace Back Extension for GNOME 48 - Nautilus 4.0
# این افزونه دکمه Backspace را برای بازگشت به پوشه قبلی تنظیم می‌کند

import gi
gi.require_version('Nautilus', '4.0')
gi.require_version('Gtk', '4.0')
gi.require_version('GLib', '2.0')

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


class BackspaceBackExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        super().__init__()
        print("Backspace Back Extension for GNOME 48 بارگذاری شد!")
        
        # تنظیم accelerator با تأخیر برای اطمینان از بارگذاری کامل
        GLib.timeout_add(1500, self._setup_backspace_accelerator)
    
    def _setup_backspace_accelerator(self):
        """
        تنظیم Backspace برای بازگشت به پوشه قبلی در GNOME 48
        """
        try:
            app = Gtk.Application.get_default()
            if app:
                # در GNOME 48 و Nautilus 4.0 از این action استفاده کنید
                app.set_accels_for_action("win.up", ["BackSpace"])
                print("✅ Backspace برای عمل 'win.up' تنظیم شد")
                
                # actionهای جایگزین برای سازگاری بیشتر
                app.set_accels_for_action("browser.up", ["BackSpace"])
                print("✅ Backspace برای عمل 'browser.up' تنظیم شد")
                
                # برای اطمینان بیشتر، actionهای دیگر را هم امتحان می‌کنیم
                alternative_actions = [
                    "location-popup-up",
                    "slot.up",
                    "view.up"
                ]
                
                for action in alternative_actions:
                    try:
                        app.set_accels_for_action(action, ["BackSpace"])
                        print(f"✅ Backspace برای عمل '{action}' تنظیم شد")
                    except Exception as alt_e:
                        print(f"⚠️  عمل '{action}' پشتیبانی نمی‌شود: {alt_e}")
                        
            else:
                print("❌ برنامه پیش‌فرض GTK یافت نشد")
                
        except Exception as e:
            print(f"❌ خطا در تنظیم Backspace: {e}")
            # تلاش مجدد پس از ۳ ثانیه
            GLib.timeout_add(3000, self._setup_backspace_accelerator)
            return False
        
        return False  # توقف تایمر
    
    def get_file_items(self, files):
        """
        آیتم‌های منو برای فایل‌ها - در این افزونه نیازی نیست
        """
        return []
    
    def get_background_items(self, current_folder):
        """
        آیتم‌های منو برای background - در این افزونه نیازی نیست
        """
        return []

بخش ۴: نصب و فعال‌سازی افزونه

۱. ذخیره فایل افزونه

nano ~/.local/share/nautilus-python/extensions/backspace_back.py

۲. کد بالا را کپی کرده و ذخیره کنید (Ctrl+X, Y, Enter)

۳. تنظیم مجوز اجرا

chmod +x ~/.local/share/nautilus-python/extensions/backspace_back.py

۴. ریستارت Nautilus

nautilus -q

۵. تست افزونه

  • Nautilus را دوباره اجرا کنید
  • به یک پوشه بروید
  • دکمه Backspace را فشار دهید
  • باید به پوشه قبلی بازگردید

بخش ۵: عیب‌یابی و دیباگ

۱. مشاهده لاگ‌های افزونه

NAUTILUS_PYTHON_DEBUG=1 nautilus

۲. اگر Backspace کار نکرد:

# بررسی اینکه افزونه بارگذاری شده است
ls ~/.local/share/nautilus-python/extensions/

# بررسی خطاها
journalctl -f | grep nautilus

۳. نسخه جایگزین در صورت مشکل:

اگر افزونه اصلی کار نکرد، این نسخه جایگزین را امتحان کنید:

#!/usr/bin/env python3
# Backspace Back Extension - Alternative Version for GNOME 48

import gi
gi.require_version('Nautilus', '4.0')
gi.require_version('Gtk', '4.0')
gi.require_version('GLib', '2.0')

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


class BackspaceBackAlternative(GObject.GObject, Nautilus.InfoProvider):
    def __init__(self):
        super().__init__()
        print("Backspace Back Alternative برای GNOME 48 بارگذاری شد!")
        self.setup_completed = False
    
    def update_file_info(self, file):
        """
        این متد مکرراً فراخوانی می‌شود - از آن برای تنظیم accelerator استفاده می‌کنیم
        """
        if not self.setup_completed:
            GLib.idle_add(self._setup_accelerators)
    
    def _setup_accelerators(self):
        """تنظیم accelerators"""
        try:
            app = Gtk.Application.get_default()
            if app:
                # تمام actionهای ممکن را امتحان می‌کنیم
                actions = ["win.up", "browser.up", "view.up", "slot.up"]
                
                for action in actions:
                    try:
                        app.set_accels_for_action(action, ["BackSpace"])
                        print(f"✅ Backspace برای '{action}' تنظیم شد")
                        self.setup_completed = True
                    except:
                        continue
                        
                if self.setup_completed:
                    print("🎯 افزونه Backspace با موفقیت پیکربندی شد!")
                else:
                    print("⚠️  هیچ یک از actionها پشتیبانی نمی‌شوند")
                    
        except Exception as e:
            print(f"❌ خطا: {e}")
        
        return False

بخش ۶: مدیریت افزونه

۱. بررسی وضعیت افزونه

# بررسی فایل افزونه
ls -la ~/.local/share/nautilus-python/extensions/backspace_back.py

# بررسی محتوای فایل
head -20 ~/.local/share/nautilus-python/extensions/backspace_back.py

۲. غیرفعال کردن موقت

mv ~/.local/share/nautilus-python/extensions/backspace_back.py ~/.local/share/nautilus-python/extensions/backspace_back.py.disabled
nautilus -q

۳. فعال‌سازی مجدد

mv ~/.local/share/nautilus-python/extensions/backspace_back.py.disabled ~/.local/share/nautilus-python/extensions/backspace_back.py
nautilus -q

نکات مهم برای GNOME 48:

  1. حتماً از gi.require_version('Nautilus', '4.0') استفاده کنید
  2. در GNOME 48 action اصلی win.up است
  3. افزونه باید در مسیر صحیح قرار گیرد
  4. پس از هر تغییر، Nautilus باید ریستارت شود
  5. از GLib.timeout_add برای تأخیر در اجرا استفاده کنید

تأیید نصب:

اگر همه مراحل را درست انجام داده باشید، پس از ریستارت Nautilus:

  • ✅ با فشار دادن Backspace به پوشه قبلی بازمی‌گردید
  • ✅ در ترمینال پیام موفقیت را می‌بینید
  • ✅ هیچ خطایی در لاگ‌ها مشاهده نمی‌شود

اگر مشکلی داشتید، لاگ‌های دیباگ را بررسی کنید و نسخه جایگزین را امتحان نمایید.