In this post I describe how to add arbitrary keyboard shortcuts to the
Nautilus file manager using its
extension API. I really
like Nautilus, it has a clean interface and lots of features under the
hood. One of the things I was missing coming from the world of orthodox
file managers
was an embedded terminal which can be shown/hidden with a simple
keyboard shorcut. Recently there appeared an extension called Nautilus
Terminal that
provides exactly this. It is quite good and I highly recommend to give
it a try. However I was not entirely satisfied with it because of
inability to use some usual shortcuts such as Ctrl+L
, although you can
use Ctrl+Shift+L
instead. Also if you change a directory in Nautilus
the embedded terminal is closed and a new one is opened in a new
location. So you can't really have anything running in a terminal and
at the same time browse the directories.
After some googling I've found another nice extension called nautilus-open-terminal which allows to open a terminal through a context menu. It is not bad but I would prefer a keyboard shortcut instead of the context menu. After some experiments I've found a hackish way to implement this by (ab)using LocationWidgetProvider. If you know a better way please tell me about it in the comments section below.
So here is a Python script that does the trick:
import gconf, gtk, nautilus, os, pipes, urllib
TERMINAL_KEY = '/desktop/gnome/applications/terminal/exec'
class ShortcutProvider(nautilus.LocationWidgetProvider):
def __init__(self):
self.client = gconf.client_get_default()
self.accel_group = gtk.AccelGroup()
self.accel_group.connect_group(
ord('o'), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE,
self.run_terminal)
self.window = None
def run_terminal(self, accel_group, acceleratable,
keyval, modifier):
filename = urllib.unquote(self.uri[7:])
terminal = self.client.get_string(TERMINAL_KEY)
os.chdir(filename)
os.system(pipes.quote(terminal) + ' &')
return True
def get_widget(self, uri, window):
self.uri = uri
if self.window:
self.window.remove_accel_group(self.accel_group)
window.add_accel_group(self.accel_group)
self.window = window
return None
To enable this extension first install the python-nautilus package
(sudo apt-get install python-nautilus
in Ubuntu), then copy the script
to the extensions install path, e.g. ~/.nautilus/python-extensions/
and restart nautilus with the nautilus -q
command. This script
redefines the Ctrl+O
shortcut to open a terminal. It can be easily
adjusted to use a different key combination or to define several
shortcuts with different actions. For example this
script
defines Ctrl+O
to open a terminal and Ctrl-G
to open gitg in the
current directory of Nautilus. It also adds Compare… to the context
menu when two files are selected.
Update: I've ported the script to Nautilus 3. The new version can be downloaded from here. Note that the script requires at least version 1.0-0ubuntu2 of the python-nautilus package.
Last modified on 2011-02-18