2

選択したファイルに対して新しい Nautilus アクションを作成したいのですが、アクション情報自体をどこに置くべきか困っています。nautilus-actions-new --desktop segfaults、終了コード133をnautilus-actions-config-tool出力して返すだけで、Nautilus-internal .desktopファイルをインストールする場所、Nautilusコンテキストメニューをカスタマイズするためのヒントまたは代替方法への参照がページにTrace/breakpoint trapないようです。man

4

2 に答える 2

1

私はあなたの質問を受け取っていない可能性があり、Debianスクイーズのセグメンテーション違反を使用して再現することもできませんでしnautilus 2.30.1nautilus-actions 2.30.2。あなたが何を意味するNautilus-internal .desktop filesのかもわかりませんが、ノーチラスアクションがアクション自体を保存する場所を意味することは理解しています。

それらは特定のファイルに保存されません。Configuration Editorそれらは実際にはGConfに保存されており、コマンドラインインストールパッケージgconf2(Debian)を使用して、またはコマンドを使用して、それらを表示および編集できますgconftool-2。あなたは道の下でそれらを見つけることができます/apps/nautilus-actions/configurations/

于 2012-04-18T21:03:40.067 に答える
1

最近 (少なくとも 3.2 で) 修正された nautilus アクションのバグがありました。最新バージョンは 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 に答える