Как создать пользовательскую команду правой кнопкой мыши для nautilus? [Дубликат]

10

Я пытаюсь сделать команду Mark as executable для правого щелчка в nautilus для более быстрого потока работы. Я придумал этот скрипт:

#! /bin/bash
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
gksudo "chmod +x $file" &
done

Как мне заставить это работать. В настоящее время у меня есть файл .sh и понятия не имею, куда его поместить.

    
задан Matthew 11.09.2012 в 11:08
источник

1 ответ

9

Просто сохраните этот файл как «Отметить как исполняемый файл», сделайте сам исполняемым и отбросьте его на ~/.gnome2/nautilus-scripts Он будет показан в вашем меню правой кнопки мыши под подменю Scripts

Вы можете удалить gksudo оттуда, если вы планируете отмечать как исполняемые только файлы, которые у вас есть (в вашем домашнем каталоге), в противном случае каждый раз, когда вы запускаете скрипт через меню правой кнопки мыши, он запросит у вас пароль ...

НО сценарий, который у вас там есть, не будет работать для файлов, содержащих пробелы для их имени файла. Чтобы заставить его работать для них, вы должны изменить сценарий на следующее:

#!/bin/bash 

IFS_BAK=$IFS
IFS="
"

for line in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
   if [[ "$line" = "" || "$line" = " " ]]; then
      exit
   else
      chmod +x "$line"
   fi
done

IFS=$IFS_BAK
IFS_BAK=

ТАКЖЕ , у вас может быть ваша собственная запись для вашего «Mark as executable» thingy. Но для этого вам нужно будет установить пакет python-nautilus:

sudo apt-get install python-nautilus

Затем сохраните этот файл как mark_as_executable.py в ~/.local/share/nautilus-python/extensions/ :

#!/usr/bin/env python
# -*- coding: utf8 -*-

from gi.repository import Nautilus, GObject, Gio
from os import system
import urllib

class BackgroundImageExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        print 'Mark as executable extensions is being initialized'

    def menu_activate_cb(self, menu, file):
        if file.is_gone():
            return
        system("chmod +x '"+urllib.unquote(file.get_uri()[7:])+"' &")

    def get_file_items(self, window, files):
        if len(files) != 1:
            return
        file = files[0]

        if file.get_uri_scheme() != 'file':
            return
        item = Nautilus.MenuItem(name='Nautilus::set_executable_bit', label='Mark as executable', tip='Add the executable bit to the selected file')
        item.connect('activate', self.menu_activate_cb, file)
        return item,

Вышеизложенное будет работать только для отдельных файлов, если вы хотите добавить поддержку нескольких файлов, вы должны вставить это внутри скрипта python:

#!/usr/bin/env python
# -*- coding: utf8 -*-

from gi.repository import Nautilus, GObject, Gio
from os import system
import urllib

class BackgroundImageExtension(GObject.GObject, Nautilus.MenuProvider):
    def __init__(self):
        print 'Mark as executable extensions is being initialized'

    def menu_activate_cb(self, menu, file):
        if file.is_gone():
            return
        system("chmod +x '"+urllib.unquote(file.get_uri()[7:])+"' &")

    def get_file_items(self, window, files):

        item = Nautilus.MenuItem(name='Nautilus::set_executable_bit', label='Mark as executable', tip='Add the executable bit to the selected file')
        for yourfile in files:
            if yourfile.get_uri_scheme() != 'file':
                return
            item.connect('activate', self.menu_activate_cb, yourfile)

        return item,

Чтобы использовать эту функциональность, вам также необходимо перезапустить nautilus:

nautilus -q

, а затем откройте окно nautilus.

    
ответ дан hakermania 11.09.2012 в 11:16
источник