J'essaie d'écrire une commande personnalisée dans Gedit, qui copie le chemin d'accès du document actuellement ouvert et actif (à la fois jusqu'à un répertoire parent et jusqu'à un fichier) dans le presse-papiers, car je ne pouvais trouver aucun plugin ou outil gedit capable de le faire.
Je ne sais pas encore par où commencer, ni de bonnes références, mais je sais que je dois faire du script en script bash.
J'ai cherché une commande externe pour copier n'importe quelle chaîne dans le presse-papiers du terminal (car il exécute également le script bash) mais les réponses suggèrent l'utilisation de l'outil "xclip", que j'ai essayé et que je suis déçu, car toute chaîne copiée avec xclip ne peut être collée. avec la commande "xclip -o". J'ai besoin que la chaîne copiée puisse être collée avec Ctrl-V pour pouvoir ouvrir le chemin dans le gestionnaire de fichiers (Nautilus).
Toute aide/suggestion est appréciée.
gedit
Avec la fenêtre gedit devant, le petit script ci-dessous dérive le chemin du nom de la fenêtre (gedit
) et le copie dans le presse-papiers.
Le script a deux options:
Copiez uniquement le chemin dans le répertoire du fichier, en exécutant le script avec l'option
-path
ou
Copiez le chemin en incluant le nom du fichier, en exécutant le script avec l'option
-file
#!/usr/bin/env python3
import subprocess
import sys
name = subprocess.check_output(["xdotool", "getactivewindow", "getwindowname"]).decode("utf-8").strip()
if all(["(" in name, ")" in name]):
path = name[name.find("(")+1:name.find(")")]
if sys.argv[1] == "-file":
fname = name[:name.find("(")]
Elif sys.argv[1] == "-path":
fname = ""
command = "echo "+'"'+path+"/"+fname+'"'+" | xclip -selection clipboard"
subprocess.Popen(["/bin/bash", "-c", command])
Installez à la fois xdotool
et xclip
:
Sudo apt-get install xdotool xclip
Copiez le script dans un fichier vide, enregistrez-le sous le nom get_path.py
Testez le script:
gedit
existantouvrez une fenêtre de terminal, lancez la commande:
sleep 5 && python3 /path/to/get_path.py -file
passez immédiatement à la fenêtre gedit
, pour que la dernière partie de la commande soit exécutée avec la fenêtre gedit
devant.
Si tout fonctionne correctement, vous pouvez rendre les options disponibles de deux manières:
Rendre les deux options disponibles dans le lanceur gedit
:
Copiez le contenu ci-dessous dans un fichier vide, enregistrez-le sous le nom gedit.desktop
dans ~/.local/share/applications
.
[Desktop Entry]
Name=gedit
GenericName=Text Editor
Comment=Edit text files
Exec=gedit %U
Terminal=false
Type=Application
StartupNotify=true
MimeType=text/plain;
Icon=accessories-text-editor
Categories=GNOME;GTK;Utility;TextEditor;
X-GNOME-DocPath=gedit/gedit.xml
X-GNOME-FullName=Text Editor
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gedit
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=3.10.4
X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit/gedit-bugreport
Actions=Window;Document;divider1;Copy current file's directory;Copy path+file name;
Keywords=Text;Editor;Plaintext;Write;
X-Ubuntu-Gettext-Domain=gedit
[Desktop Action Window]
Name=Open a New Window
Exec=gedit --new-window
OnlyShowIn=Unity;
[Desktop Action Document]
Name=Open a New Document
Exec=gedit --new-document
OnlyShowIn=Unity;
[Desktop Action Copy current file's directory]
Name=Copy current directory
Exec=python3 /path/to/get_path.py -path
OnlyShowIn=Unity;
[Desktop Action divider1]
Name=.....................................
OnlyShowIn=Unity;
[Desktop Action Copy path+file name]
Name=Copy current directory, include file name
Exec=python3 /path/to/get_path.py -file
OnlyShowIn=Unity;
Dans les deux lignes:
Exec=python3 /path/to/get_path.py -path
et
Exec=python3 /path/to/get_path.py -file
remplacez /path/to/get_path.py
par le chemin réel du script.
Déconnectez-vous et reconnectez-vous pour faire basculer Unity vers le nouveau fichier local .desktop
.
Dans le nom de la fenêtre gedit, le chemin est affiché entre (
et )
. Le script voit simplement la fenêtre la plus en avant à l’aide de xdotool
, puis lit le chemin entre ces deux caractères.
Comme le chemin est lu de manière textuelle, le script échouera si le nom du fichier contient d'autres caractères ()
.
Avec la fenêtre suivante devant:
la première option va copier dans le presse-papier le chemin du fichier:
~/Bureaublad
tandis que la deuxième option inclut le fichier lui-même:
~/Bureaublad/some test file.txt
Comme vous pouvez le constater, les espaces sont pris en charge :).
Après une recherche documentaire, j'ai pu trouver une solution, je vais donc répondre à ma question ici.
Ouvrez Gedit et allez dans "Outils" >> "Gérer les outils externes" et créez un nouvel outil.
Ajoutez la commande suivante comme ci-dessous:
echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;exit;
Fermez-le puis redémarrez Gedit (juste pour confirmation).
Ouvrez n’importe quel document, puis sélectionnez Outils >> Outils externes, puis cliquez sur l’étiquette de commande que vous venez de créer. Le chemin sera dans votre presse-papiers.
comparer avec $GEDIT_CURRENT_DOCUMENT_URI
variable $GEDIT_CURRENT_DOCUMENT_PATH
me semble meilleure:
file://
ref:
https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools#Available_Environment_Variableshttps://wiki.gnome.org/Apps/Gedit/ExternalToolsPluginCommands