Ce que fait gnome-terminal
En lisant la documentation de Gtk, il semble qu'il y ait 2 façons pour un programme de traiter le contenu du presse-papiers - du texte brut et une liste d'URIs vers un fichier. Pour une raison quelconque, gnome-terminal
a décidé que ce serait une bonne idée de faire la différence entre les deux, et donc que lorsque vous copiez un fichier de Nautilus à gnome-terminal
le terminal récupère la liste des URI, tandis que les autres programmes ne récupèrent que du texte brut.
L'édition automatique du presse-papiers serait légèrement gênante ( bien que je poursuive toujours l'idée) - nous aurions besoin de définir un moyen de détecter où vous essayez de coller le contenu du presse-papiers, et l'exécution d'un script persistant qui édite script en texte brut ( supprimant effectivement les URI) vous empêchera de copier des fichiers d'une fenêtre Nautilus à une autre.
Le "glisser-déposer" est probablement la solution la plus simple. Mais comme une approche par script a été demandée, j'ai eu l'idée de deux approches manuelles. L'une s'appuie sur la fonction intégrée du Nautilus qui consiste à ajouter scripts à votre menu de clic droit. L'autre sur la saisie d'un raccourci spécifique avant collage dans gnome-terminal.
Approche manuelle du script, version 1
Ce script est à placer dans ~/.local/share/nautilus/scripts
et rendu exécutable via chmod +x ~/.local/share/nautilus/scripts/scriptname.sh
ou en faisant un clic droit sur le fichier et en modifiant l'onglet Permissions dans les propriétés. En fait, il vous permet de copier le chemin d'accès aux fichiers sélectionnés sous forme de chaînes entre guillemets et avec les éléments suivants file://
partie enlevée.
Pour l'utiliser, sélectionnez un ou plusieurs fichiers dans Nautilus, puis cliquez dessus avec le bouton droit de la souris. Sélectionnez Scripts
menu -> your_script_name.py
.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import sys
import os
import time
import subprocess
import signal
import urllib.parse
import threading
def autoquit(*args):
subprocess.call(['zenity','--info'])
time.sleep(1)
Gtk.main_quit()
def main():
uris = os.getenv("NAUTILUS_SCRIPT_SELECTED_URIS")
new_text = " ".join([ "'" + urllib.parse.unquote(i).replace('file://','') + "'"
for i in uris.split()])
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
if clip.set_text(new_text,-1):
thread = threading.Thread(target=autoquit)
thread.start()
Gtk.main()
if __name__ == '__main__':
try:
main()
except Exception as e:
subprocess.call(['zenity','--info','--text',str(e)])
Approche manuelle du script, version 2
Cette approche repose sur l'idée d'exécuter le script Python ci-dessous juste avant de coller en gnome-terminal
. Vous pouvez l'appeler depuis gnome-terminal
manuellement en tant que commande, ou liez-le à un raccourci clavier. Ainsi, avec la méthode du raccourci, je le lierais à CtrlShiftB (parce que B et V sont proches sur le clavier), et à chaque fois que j'ai besoin de coller depuis Nautilus, j'appuie sur CtrlShiftB pour modifier, puis CtrlShiftV à coller
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk
import subprocess
import urllib.parse
import signal
import sys
def unquote_uri(*args):
uris = args[-2]
new_text = " ".join([ "'" + str(urllib.parse.unquote(i).replace('file://','')) + "'"
for i in uris])
print(new_text)
args[-3].clear()
args[-3].set_text(new_text,-1)
Gtk.main_quit()
def main():
cached = str()
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.request_uris(unquote_uri, None)
signal.signal(signal.SIGINT,signal.SIG_DFL)
Gtk.main()
if __name__ == '__main__': main()
Clause de non-responsabilité : la réponse est encore en cours d'élaboration ; des contenus/idées supplémentaires peuvent être ajoutés ultérieurement.