Overview

Writing a Nautilus-Python extension is a fairly straight-forward process. One simply imports the Nautilus module from the gobject introspection repository and creates a class which is derived from a gobject.GObject and one of the Nautilus module's classes. When an extension derives a class, it becomes a "provider", telling Nautilus to ask it for information. There are several types of providers available for extensions to use: there is MenuProvider, PropertiesModelProvider, ColumnProvider, and InfoProvider, all of which will be explained in more detail below. Your class can be derived from multiple providers.

Here are the basic steps:

1. A script is written and installed to the standard nautilus-python extension install path

2. Nautilus is (re)started and loads the nautilus-python C extension, which in turn loads all python extensions it can find

3. Any python script in the standard nautilus-python extension install path that imports the Nautilus module from the gobject introspection repository and derives the main class from a Nautilus module class will be loaded

Extension Install Path for < v1.2.0

As of nautilus-python 0.7.0 (and continued in 1.0+), nautilus-python looks in ~/.local/share/nautilus-python/extensions for local extensions and $PREFIX/share/nautilus-python/extensions for global extensions.

Extension Install Path for >= v1.2.0

As of nautilus-python 1.2.0, python extensions are loaded in the following order: 1. $XDG_DATA_HOME/nautilus-python/extensions 2. nautilus_prefix/share/nautilus-python/extensions 3. $XDG_DATA_DIRS/nautilus-python/extensions

A note about compatibility issues for nautilus-python 1.0

1. We no longer support the "import nautilus" command that previous versions used. This is because nautilus-python now directly uses Nautilus's annotations, which must be imported by the "from gi.repository import Nautilus" command.

2. The extension class must now derive itself from a gobject.GObject in addition to the standard Nautilus classes.

3. For now, some Nautilus class constructors require passing named arguments instead of a standard argument list. This requirement may go away at some point.

Python3

As of nautilus-python v1.2.0, nautilus-python can be built to embed python3 instead of python2. It uses the $PYTHON environment variable to determine which library to use.