2

我想为选定的文件创建一个新的 Nautilus 操作,但我不知道将操作信息本身放在哪里。nautilus-actions-new --desktop segfaultsnautilus-actions-config-tool只是打印并返回退出代码 133,并且页面Trace/breakpoint trap中似乎没有任何关于应该安装 Nautilus-internal .desktop 文件的参考,任何自定义 Nautilus 上下文菜单的提示或替代方法。man

4

2 回答 2

1

我可能没有收到您的问题,并且我无法使用nautilus 2.30.1and来重现 Debian 挤压上的分段错误nautilus-actions 2.30.2。我也不确定您的意思,Nautilus-internal .desktop files但我理解您的意思是 nautilus 操作将操作本身存储在哪里。

它们不存储在特定文件中。它们实际上存储在 GConf 中,您可以使用Configuration Editor或从命令行安装包gconf2(Debian) 和使用命令查看和编辑它们gconftool-2/apps/nautilus-actions/configurations/您可以在路径下找到它们。

于 2012-04-18T21:03:40.067 回答
1

最近修复了 nautilus 操作中的一个错误(至少在 3.2 中)。最新版本是 3.2.2。

关于自定义 Nautilus 上下文菜单,您可以使用自己的脚本或 Python/C 中的扩展来创建。

脚本:

这些存储在.gnome2/scripts中。脚本的名称将是出现在上下文菜单(在脚本下)中的文本。您可以在Nautilus Scripts 用户指南中找到更多信息。请注意,nautilus 3 还将读取目录.gnome2/scripts

扩展:

尽管您可以使用 Python 或 C 编写扩展,但 Python 更直接地满足您的需求。

在模板下方,您可以使用为 Nautilus 3 创建自己的自定义菜单。它基于Postr 的 nautilus 扩展。对于 Nautilus 3,您需要将其存储在~/.local/share/nautilus-python/extensions中。

from gi.repository import Nautilus, GObject
import os, os.path
from urllib import unquote

PROGRAM_NAME = '/path/to/the/program/you/want/to/run/with/the/files/selected'

class MyExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        pass

    def action_for_my_files(self, menu, files):
        # This is the method invoked when our extension is activated
        # Do whatever you want to do with the files selected
        if len(files) == 0:
            return

        names = [ unquote(file.get_uri()[7:]) for file in files ]

        argv = [ PROGRAM_NAME ] + names

        GObject.spawn_async(argv, flags=GObject.SPAWN_SEARCH_PATH)

    def get_file_items(self, window, files):
        ''' This method is invoked to create a contextual menu.
            We can filter out the files, directories we do not want a menu
        '''

        '''No files selected -> no menu'''
        if len(files) == 0:
            return

        for fd in files:
            ''' Not a file -> no menu '''
            if fd.is_directory() or fd.get_uri_scheme() != 'file':
                return
            ''' Not an image -> no menu '''
            if not fd.is_mime_type("image/*"):
                return

        item = Nautilus.MenuItem(name='MyExtension::MethodUniqueId',
                                 label='Label in the menu...',
                                 tip='Tip for the menu',
                                 icon='icon_name')
        item.connect('activate', self.action_for_my_files, files)

        return item,

对于 Nautilus 2,脚本的开头或多或少是相同的。你只需要改变开头。对于前面的示例,它将是:

import gobject, nautilus
import os, os.path
from urllib import unquote

PROGRAM_NAME = '/path/to/the/program/you/want/to/run/with/the/files/selected'

class PostrExtension(nautilus.MenuProvider):
...
于 2012-05-05T22:09:13.420 回答