Como faço um comando de clique direito personalizado para o nautilus? [duplicado]

10

Estou tentando criar um comando Mark as executable para o clique direito no nautilus para um fluxo de trabalho mais rápido. Eu criei este script:

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

Como faço para que isso funcione? Atualmente, tenho um arquivo .sh e não tenho ideia de onde colocá-lo.

    
por Matthew 11.09.2012 / 13:08

1 resposta

9

Salve esse arquivo como 'Marcar como executável', torne-se executável e solte-o em ~/.gnome2/nautilus-scripts Ela será mostrada no menu do botão direito, sob o submenu Scripts

Você pode querer remover o gksudo de lá, se estiver planejando marcar como arquivos executáveis somente (em seu diretório pessoal), caso contrário, toda vez que executar o script através do menu do botão direito, pedirá sua senha ...

MAS o script que você tem lá não vai funcionar para arquivos que contenham espaços para o nome do arquivo. Para que isso funcione, você precisa alterar o script para o seguinte:

#!/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=

TAMBÉM , você pode ter sua própria entrada para o item "Marcar como executável". Mas, para habilitar isso, você precisará instalar o pacote python-nautilus:

sudo apt-get install python-nautilus

Em seguida, salve este arquivo como mark_as_executable.py em ~/.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,

O exemplo acima também funcionará apenas para arquivos individuais, se você quiser adicionar suporte a vários arquivos, você terá que colar isso dentro do script python, embora:

#!/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,

Para poder usar a funcionalidade, você precisará reiniciar o nautilus também:

nautilus -q

e, em seguida, abra uma janela do nautilus.

    
por hytromo 11.09.2012 / 13:16