10 votes

Comment puis-je créer une commande personnalisée pour le clic droit dans Nautilus ?

Possible Duplicate:
Comment personnaliser le menu contextuel dans Nautilus?

Je suis en train de créer une commande Marquer comme exécutable pour le clic droit dans nautilus pour un flux de travail plus rapide. J'ai créé ce script :

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

Comment puis-je faire en sorte que cela fonctionne. J'ai actuellement un fichier .sh et je ne sais pas où le mettre.

9voto

hytromo Points 4759

Il suffit d'enregistrer ce fichier en tant que 'Marquer comme exécutable', de le rendre exécutable lui-même et de le déposer dans ~/.gnome2/nautilus-scripts. Il sera affiché dans votre menu contextuel, sous le sous-menu Scripts

Vous voudrez peut-être supprimer le gksudo de là si vous envisagez de marquer comme exécutable uniquement les fichiers que vous possédez (sous votre répertoire personnel), sinon, chaque fois que vous exécutez le script via le menu contextuel, il vous demandera un mot de passe...

MAIS le script que vous avez là-haut ne fonctionnera pas pour les fichiers qui contiennent des espaces dans leur nom de fichier. Pour les faire fonctionner pour eux, vous devez modifier le script comme suit :

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

DE PLUS, vous pouvez avoir votre propre entrée pour votre machin "Marquer comme exécutable". Mais, pour activer cela, vous devrez installer le paquet python-nautilus :

sudo apt-get install python-nautilus

Ensuite, enregistrez ce fichier sous le nom mark_as_executable.py sous ~/.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='Marquer comme exécutable', tip='Ajouter le bit exécutable au fichier sélectionné')
        item.connect('activate', self.menu_activate_cb, file)
        return item,

Ce qui précède ne fonctionnera que pour des fichiers uniques également, si vous souhaitez ajouter la prise en charge de plusieurs fichiers, vous devez coller ceci à l'intérieur du script python, cependant :

#!/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='Marquer comme exécutable', tip='Ajouter le bit exécutable au fichier sélectionné')
        for yourfile in files:
            if yourfile.get_uri_scheme() != 'file':
                return
            item.connect('activate', self.menu_activate_cb, yourfile)

        return item,

Pour pouvoir utiliser la fonctionnalité, vous devrez également redémarrer nautilus :

nautilus -q

et puis ouvrez une fenêtre nautilus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X