web-dev-qa-db-fra.com

Comment créer une commande personnalisée par clic droit pour Nautilus?

Duplicate possible:
Comment personnaliser le menu contextuel dans Nautilus?

J'essaie de créer une commande Mark as executable pour le clic droit dans Nautilus pour un flux de travail plus rapide. Je suis venu avec ce script:

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

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

10
Matthew

Enregistrez simplement ce fichier sous "Marquer comme exécutable", rendez-vous exécutable et déposez-le dans ~/.gnome2/nautilus-scripts Il apparaîtra dans le menu contextuel, dans le sous-menu Scripts

Vous voudrez peut-être supprimer la gksudo de là si vous prévoyez de marquer comme exécutables uniquement les fichiers que vous possédez (dans votre répertoire personnel). Sinon, chaque fois que vous exécutez le script via le menu contextuel, vous demander un mot de passe ...

MAIS le script que vous avez là-haut ne fonctionnera pas pour les fichiers contenant des espaces dans leur nom de fichier. Pour que cela fonctionne 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=

AUSSI, vous pouvez avoir votre propre entrée pour votre truc "Marquer comme exécutable". Toutefois, pour cela, vous devrez installer le paquet python-nautilus:

Sudo apt-get install python-nautilus

Enregistrez ensuite 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='Mark as executable', tip='Add the executable bit to the selected file')
        item.connect('activate', self.menu_activate_cb, file)
        return item,

Ce qui précède ne fonctionnera également que pour des fichiers individuels. Si vous souhaitez ajouter la prise en charge de plusieurs fichiers, vous devez le coller dans le script python, bien que:

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

Pour pouvoir utiliser cette fonctionnalité, vous devrez également redémarrer Nautilus:

nautilus -q

puis ouvrez une fenêtre Nautile.

9
hytromo