用Python扩展和延伸Nautilus(1)


如何使用 Python 为 GNOME 桌面、screenlets 架构以及 Nautilus 创建脚本,来交付高生产能力的环境?桌面脚本实现拖放功能,以及快速访问常用信息与服务的功能。本文将介绍如何使用 Python 来增加功能,从而实现对桌面 Nautilus 的扩展。

对于 GNOME 桌面用户来说,Nautilus 编程可能是更比较常用的应用程序之一。它能够通过简单的图形界面,来处理所有的文件复制、移动、重命名、以及搜索的问题。从表面上看,似乎不存在 Nautilus 不能处理的文件相关事务 — 除非考虑执行具有 shell 脚本的任务。

Nautilus 开发工具提供了多个不必打开主代码库而增加新功能的方法。最简单的方法是使用能执行那些通常在终端提示符上执行的命令的 bash 或者 bash 脚本。该方法使得尝试使用这一命令来确保他们完成想要首先完成的任务。还可以采用其他语言,包括 C 脚本语言、GnomeBasic、Perl、以及 Python。本文介绍如何利用 Python 语言来为 Nautilus 增加新功能。假定读者已对 Python 语言及 Python 标准库有所了解。

Nautilus 脚本

扩展 Nautilus 的第一个方法是通过在 /home 中发现的名为 .gnome2/nautilus-scripts 的特定目录。当在 Scripts 菜单下的文件或者文件夹上点击鼠标右键时,该目录下所有可执行文件将会出现。还可以选择多个文件或者文件夹,并采用相同的右击方法,将文件清单传递给脚本。

当调用脚本时,Nautilus 支持多个包含当前目录以及所选文件等内容的环境变量。表 1 展示了这些环境变量。

表 1. Nautilus 环境变量

环境变量 描述
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 所选文件的新行分割路径(仅针对本地)
NAUTILUS_SCRIPT_SELECTED_URIS 所选文件的新行分割 URIs
NAUTILUS_SCRIPT_CURRENT_URI 当前位置
NAUTILUS_SCRIPT_WINDOW_GEOMETRY 当前窗口的位置和大小

在 Python 中,通过对 os.environ.get 函数的一个调用来获取这些变量的值,具体如下:

selected = os.environ.get('NAUTILUS_SCRIPT_SELECTED_FILE_PATHS,'')

此调用返回一个字符串,其包含到达由换行符分隔的全部所选文件。Python 利用下列代码,简化了将这一字符串返回到可迭代列表中的操作:

targets = selected.splitlines()

此时,也许应该停下来探讨一下用户交互。当控制从 Nautilus 传送到脚本后,在该点上确实不存在对脚本的限制。根据脚本作用的不同,甚至不需要任何用户反馈,除了一些类型的完成或错误消息,这样通过一些简单的消息框就可处理好。由于在编写 Nautilus 时采用了 gtk windowing 工具包,所以尽管这不是必须的,但是采用相同的做法很合乎逻辑。您可以很方便地使用 TkInter 或者 wxPython。

鉴于本文的目的,您将采用 gtk。生成一个用于通信完成状态的简单消息框,仅需几行代码,出于方便阅读的目的,如果想创建简单的函数来生成消息,这个代码将最为合适。总共需要 4 行代码:

def alert(msg):
dialog = gtk.MessageDialog()
dialog.set_markup(msg)
dialog.run()


相关内容