web-dev-qa-db-fra.com

Nautilus: Action personnalisée sur les fichiers sélectionnés via un raccourci clavier

  1. J'ouvre un répertoire contenant environ 100 fichiers dans Nautilus
  2. Je sélectionne N (peut-être 10) fichiers en consultant l’aperçu du fichier.
  3. Maintenant, je voudrais utiliser un raccourci et mon script personnalisé devrait être appelé.
  4. Mon script personnalisé reçoit les noms de fichier et fait ce que je veux.

Comment enregistrer une action personnalisée dans gnome/ubuntu/nautilus qui reçoit les noms de fichiers sélectionnés dans nautilus?

Nouvelle entrée de contexte dans le menu contextuel de nautile

Si vous écrivez un script dans ~/.local/share/nautilus/scripts, vous obtenez une nouvelle entrée dans le menu contextuel. Comment appeler ce script via un raccourci?

Contexte

C'est une question de suivi pour Nautilus: Marquer les fichiers du répertoire comme favoris

Version

J'utilise Ubuntu 16.04

3
guettli

Exécuter des actions sur les fichiers sélectionnés

La réponse ci-dessous répondra d'abord littéralement à votre question.

comment appeler un script et utiliser les fichiers actuellement sélectionnés comme arguments [1].

Cependant, la réponse acceptée dans la question liée utilise des scripts nautilus , qui prennent des fichiers comme arguments de nautilus. Cela ne fonctionne pas à partir d'un raccourci , uniquement en cliquant avec le bouton droit de la souris en nautile. Dans _[2]_, j’ai donc ajouté la fonctionnalité des scripts de la question liée à la réponse. Vous devez donc exécuter l’un ou l’autre d’entre eux (dans _[2]_) à partir d’un raccourci.


_[1]_ Pour 16.04 et versions supérieures *, exécution d'un script avec les fichiers sélectionnés comme arguments

Vous pouvez simplement utiliser le court script ci-dessous. Il "lira" les fichiers actuellement sélectionnés et exécutera votre script avec les fichiers comme arguments.

_#!/usr/bin/env python3
import subprocess
import pyperclip
import time

time.sleep(1)
subprocess.call(["xdotool", "key", "Control_L+c"])

for item in pyperclip.paste().splitlines():
    subprocess.Popen(["/path/to/script", item])
_

Utiliser

  1. installer _python3-pyperclip_ et xdotool:

    _Sudo apt install python3-pyperclip xdotool
    _
  2. Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous le nom _run_withselected.py_ Replace dans le script.

    _"/path/to/script" 
    _

    par le chemin d'accès au script que vous souhaitez exécuter. Utilisez des chemins absolus , entre guillemets.

  3. Ajoutez-le à une touche de raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    _python3 /path/to/run_withselected.py
    _

_[2]_ Cependant

Notez que le script Nautile lié de l’autre réponse ne fonctionnera pas comme cela, car il récupère ses arguments d’une autre manière directement de Nautile . J'ai donc combiné la fonctionnalité du script à partir de la question liée, avec celle ci-dessus.

Vous n’avez plus besoin du ou des autres scripts de l’autre réponse.

A. Désigner des fichiers en changeant le nom

sélectionner des fichiers

enter image description here

appuyez sur le raccourci pour marquer (basculer) les fichiers

enter image description here

_#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

time.sleep(1)

def npath(p, f):
    return os.path.join(p, f)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    data = item.rsplit("/", 1); path = data[0]; name = data[1]
    newname = name[2:] if name.startswith("*0") else "*0"+name
    shutil.move(npath(path, name), npath(path, newname))
_

B. Désigner des fichiers en créant un lien dans un répertoire "Favoris"

sélectionner des fichiers

enter image description here

appuyez sur le raccourci pour créer (basculer) un lien dans "Mes favoris"

enter image description here

_#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

fav = os.path.join(os.environ["HOME"], "My_Favorites")

try:
    os.mkdir(fav)
except FileExistsError:
    pass

time.sleep(1)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    name = item.rsplit("/", 1)[-1]
    link = os.path.join(fav, name)
    try:
        os.symlink(item, link)
    except FileExistsError:
        os.remove(link)
_

Pour utiliser (l'un ou l'autre)

  1. les scripts nécessitent _python3-pyperclip_ et xdotool:

    _Sudo apt install python3-pyperclip xdotool
    _
  2. Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous le nom _toggle_selected.py_

  3. Ajouter une touche de raccourci: Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    _python3 /path/to/toggle_selected.py
    _

Explication

  1. Le script utilise xdotool pour appuyer virtuellement sur Ctrl+C
  2. Par la suite, le script (en interne) crée une liste de fichiers sélectionnés:

    _pyperclip.paste().splitlines()
    _
  3. Ces fichiers sont ensuite utilisés comme arguments pour renommer les fichiers:

    _for item in pyperclip.paste().splitlines():
        data = item.rsplit("/", 1); path = data[0]; name = data[1]
        newname = name[2:] if name.startswith("*0") else "*0"+name
        shutil.move(npath(path, name), npath(path, newname))
    _

    ou créer un lien symbolique:

    _for item in pyperclip.paste().splitlines():
        name = item.rsplit("/", 1)[-1]
        try:
            os.symlink(item, os.path.join(fav, name))
        except FileExistsError:
            os.remove(link)
    _
  4. La time.sleep(1) a pour but de s’assurer que la "vraie" touche n’interfère pas avec la pression simulée par xdotool.

    Remarques

    • Dans la réponse liée, le second script crée le lien, mais ne bascule pas. J'ai fait la réponse "B" basculer également l'existence du lien symbolique.
    • S'il s'agissait d'une application publiée, je combinerais A et B dans un script et déciderais de l'action à exécuter dans un fichier de paramètres. Je pourrais ajouter cela plus tard.

* 14.04

... nécessitera une procédure différente pour installer pyperclip:

_Sudo apt-get install python3-pip xdotool
Sudo pip3 install pyperclip
_
3
Jacob Vlijm