Где хранить файлы Nautilus-Actions .desktop? - PullRequest
2 голосов
/ 02 апреля 2012

Я хотел бы создать новое действие Nautilus для выбранных файлов, но я озадачен тем, куда поместить саму информацию об этом действии. nautilus-actions-new --desktop segfaults , nautilus-actions-config-tool просто печатает Trace/breakpoint trap и возвращает код выхода 133, и на страницах man, похоже, нет никаких ссылок на , где Nautilus-internal. файлы рабочего стола должны быть установлены , любые советы или альтернативные способы настроить контекстное меню Nautilus .

Ответы [ 2 ]

1 голос
/ 06 мая 2012

Была ошибка в действиях nautilus, которая была недавно исправлена ​​(по крайней мере, в 3.2).Последняя версия - 3.2.2.

Что касается настройки контекстного меню Nautilus, вы можете создавать собственные сценарии или расширения в Python / C.

Сценарии:

Они хранятся в .gnome2 / scripts .Имя скрипта будет тем текстом, который появится в контекстном меню (в разделе «Сценарии»).Вы можете найти более подробную информацию в руководстве пользователя Nautilus Scripts .Обратите внимание, что nautilus 3 также будет читать каталог .gnome2 / scripts .

Расширения:

Даже если вы можетеписать расширения на Python или C, Python более прост для ваших нужд.

Ниже шаблона вы можете использовать для создания собственного меню для Nautilus 3. Оно основано на Расширение 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):
...
1 голос
/ 19 апреля 2012

Возможно, я не получаю ваш вопрос и не смог воспроизвести ошибку сегментации в Debian squeeze с использованием nautilus 2.30.1 и nautilus-actions 2.30.2. Я также не уверен, что вы подразумеваете под Nautilus-internal .desktop files, но я понимаю, что вы имеете в виду, где действия nautilus хранят сами действия.

Они не хранятся в определенном файле. Они на самом деле хранятся в GConf, и вы можете просмотреть их и отредактировать их, используя Configuration Editor или из командной строки установочный пакет gconf2 (Debian) и используя команду gconftool-2. Вы можете найти их под /apps/nautilus-actions/configurations/ path.

...