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

Reply via email to