Hi, I am learning to write scripts for nautilus-python and, after reading the docs and some examples, I elaborated this small script:
#!/usr/bin/env python from gi.repository import Nautilus, GObject, Gtk, GdkPixbuf import urllib, os, subprocess, re import locale, gettext ROOT_ICON = "/usr/share/icons/elementary/stock/48/stock_person.svg" TERMINAL_ICON = "/usr/share/pixmaps/gksu-root-terminal.png" NAUTILUS_ICON = "/usr/share/icons/hicolor/scalable/apps/nautilus.svg" class ColumnExtension(GObject.GObject, Nautilus.MenuProvider): def __init__(self): try: factory = Gtk.IconFactory() # Add Root icon pixbuf = GdkPixbuf.Pixbuf.new_from_file(ROOT_ICON) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add("Root", iconset) # Add Nautilus icon pixbuf = GdkPixbuf.Pixbuf.new_from_file(NAUTILUS_ICON) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add("Nautilus", iconset) # Add Root Terminal icon pixbuf = GdkPixbuf.Pixbuf.new_from_file(TERMINAL_ICON) iconset = Gtk.IconSet.new_from_pixbuf(pixbuf) factory.add("Terminal", iconset) factory.add_default() except: pass def root_terminal(self, menu, selected): """Runs the Terminal on the given Directory""" bash_string = "gksu \"exo-open --launch TerminalEmulator --working-directory='" + selected + "'\" &" subprocess.call(bash_string, shell=True) def open_with_nautilus(self, menu, selected): """Open the selected Folder with Nautilus as Root User""" subprocess.call("gksu \"nautilus --no-desktop " + selected + "\" &", shell=True) def get_background_items(self, window, current_directory): menuitem = Nautilus.MenuItem(name='RootMenu::Root', label='Root', tip='', icon='Root') submenu = Nautilus.Menu() menuitem.set_submenu(submenu) sub_menuitem = Nautilus.MenuItem(name='RootMenu::RootTerminal', label='Root Terminal', tip='', icon='Terminal') submenu.append_item(sub_menuitem) sub_menuitem.connect('activate', self.root_terminal, re.escape(current_directory)) sub_menuitem = Nautilus.MenuItem(name='RootMenu::OpenNautilus', label='Open as Root', tip='', icon='Nautilus') submenu.append_item(sub_menuitem) sub_menuitem.connect('activate', self.run_as_root, re.escape(current_directory)) return menuitem, Unfortunately, Nautilus does not like these lines and spits out an error: Traceback (most recent call last): File "/home/vigil/.local/share/nautilus-python/extensions/root-menu.py", line 63, in get_background_items sub_menuitem.connect('activate', self.root_terminal, re.escape(current_directory)) File "/usr/lib/python2.7/re.py", line 208, in escape s = list(pattern) TypeError: '__main__.NautilusVFSFile' object is not iterable I'm sure I'm missing something obvious, but I supposed that 'current_directory' in get_background_items was simply... the current directory. It turns out that it is a mysterious iterable object I wasn't aware of. Being a total noob, I'd like to know what this error means. Thank you
-- nautilus-list mailing list nautilus-list@gnome.org http://mail.gnome.org/mailman/listinfo/nautilus-list