選択したファイルに対して新しい Nautilus アクションを作成したいのですが、アクション情報自体をどこに置くべきか困っています。nautilus-actions-new --desktop
segfaults、終了コード133をnautilus-actions-config-tool
出力して返すだけで、Nautilus-internal .desktopファイルをインストールする場所、Nautilusコンテキストメニューをカスタマイズするためのヒントまたは代替方法への参照がページにTrace/breakpoint trap
ないようです。man
2 に答える
私はあなたの質問を受け取っていない可能性があり、Debianスクイーズのセグメンテーション違反を使用して再現することもできませんでしnautilus 2.30.1
たnautilus-actions 2.30.2
。あなたが何を意味するNautilus-internal .desktop files
のかもわかりませんが、ノーチラスアクションがアクション自体を保存する場所を意味することは理解しています。
それらは特定のファイルに保存されません。Configuration Editor
それらは実際にはGConfに保存されており、コマンドラインインストールパッケージgconf2
(Debian)を使用して、またはコマンドを使用して、それらを表示および編集できますgconftool-2
。あなたは道の下でそれらを見つけることができます/apps/nautilus-actions/configurations/
。
最近 (少なくとも 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):
...