web-dev-qa-db-fra.com

Comment puis-je copier le chemin du fichier actuellement ouvert dans gedit dans le presse-papier?

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.

3
Vicky Dev

Script pour copier le chemin d'un fichier, ouvert dans 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:

  1. Copiez uniquement le chemin dans le répertoire du fichier, en exécutant le script avec l'option

    -path
    

    ou

  2. Copiez le chemin en incluant le nom du fichier, en exécutant le script avec l'option

    -file
    

Le scénario

#!/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])

Comment utiliser

  1. Installez à la fois xdotool et xclip:

    Sudo apt-get install xdotool xclip
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom get_path.py

  3. Testez le script:

    • ouvrir un fichier gedit existant
    • ouvrez 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.

    • Presse Ctrl+V quelque part pour coller le chemin vient d'être copié.
  4. Si tout fonctionne correctement, vous pouvez rendre les options disponibles de deux manières:

    1. Créez deux touches de raccourci pour les deux options: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez les deux commandes à deux raccourcis différents.
    2. Rendre les deux options disponibles dans le lanceur gedit:

      enter image description here

      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.

Explication

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.

Remarques

Comme le chemin est lu de manière textuelle, le script échouera si le nom du fichier contient d'autres caractères ().

Exemples

Avec la fenêtre suivante devant:

enter image description here

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 :).

5
Jacob Vlijm

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.

3
Vicky Dev

comparer avec $GEDIT_CURRENT_DOCUMENT_URI
variable $GEDIT_CURRENT_DOCUMENT_PATH me semble meilleure:

  • sans le préfixe file://
  • afficher des caractères multi-octets (pas urlencode)

ref:
https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools#Available_Environment_Variableshttps://wiki.gnome.org/Apps/Gedit/ExternalToolsPluginCommands

0
yurenchen