web-dev-qa-db-fra.com

Outil pour insérer des extraits de texte dans des applications

En allemand, vous commencez des courriers et des lettres avec "Sehr geehrter Herr ....".

J'en ai assez de taper ceci encore et encore. Et j'en ai assez de configurer des applications pour me donner des raccourcis pour insérer des blocs de texte comme celui-ci.

Est-il possible d'insérer des blocs de commentaire avec l'environnement de bureau?

De cette façon, je pourrais insérer des blocs de texte dans vi, Thunderbird, firefox, libreoffice ...

Autre exemple: je dois souvent insérer ma clé ssh-pub quelque part. Je sais comment utiliser ssh-copy-id, mais là encore, une solution de bureau pour me donner accès à une liste configurable de blocs de texte serait géniale.

4
guettli

En supposant que vous utilisez 14.04 (python3, nautilus), le script ci-dessous effectue le travail avec les applications qui utilisent  Ctrl+V  pour coller du texte . Il est important de savoir que cela ne fonctionnera pas dans le gnome-terminal par exemple.
Je l’ai testé sur a.o. Firefox, Thunderbird, Libreoffice, Sublime Text et Gedit sans aucun problème.

Comment ça fonctionne

Lorsque le script est appelé, une fenêtre apparaît, répertoriant les extraits que vous avez définis. Choisissez un élément (ou tapez son numéro) et le fragment de texte sera collé dans la fenêtre avant de toute application qui est Ctrl+V "-compatible":

enter image description here

Ajouter/éditer des extraits

Lorsque vous choisissez manage snippets, le dossier du script dans ~/.config/snippet_paste s'ouvre dans Nautilus. Pour créer un nouvel extrait, créez simplement un fichier texte avec le texte de votre extrait. Ne faites pas attention au nom que vous donnez au fichier. tant que c'est du texte brut, c'est ok. Le script utilise uniquement le contenu du fichier et crée une liste numérotée de tous les fichiers ('contenu) qu'il trouve.

enter image description here

Si le répertoire d'extraits (~/.config/snippet_paste] n'existe pas, le script le crée pour vous.

Comment utiliser

  • installez d'abord xdotool et xclip, s'il n'est pas installé sur votre système:

    Sudo apt-get install xdotool
    

    et

    Sudo apt-get install xclip
    
  • Copiez le script ci-dessous, enregistrez-le sous le nom paste_snippets.py, exécutez-le à l'aide de la commande suivante:

    python3 /path/to/paste_snippets.py
    

Le scénario

#!/usr/bin/env python3

import os
import subprocess

home = os.environ["HOME"]
directory = home+"/.config/snippet_paste"
if not os.path.exists(directory):
    os.mkdir(directory)
# create file list with snippets
files = [
    directory+"/"+item for item in os.listdir(directory) \
         if not item.endswith("~") and not item.startswith(".")
    ]
# create string list
strings = []
for file in files:
    with open(file) as src:
        strings.append(src.read())
# create list to display in option menu
list_items = ["manage snippets"]+[
    (str(i+1)+". "+strings[i].replace("\n", " ").replace\
     ('"', "'")[:20]+"..") for i in range(len(strings))
    ]
# define (zenity) option menu
test= 'zenity --list '+'"'+('" "')\
      .join(list_items)+'"'\
      +' --column="text fragments" --title="Paste snippets"'
# process user input
try:
    choice = subprocess.check_output(["/bin/bash", "-c", test]).decode("utf-8")
    if "manage snippets" in choice:
        subprocess.call(["nautilus", directory])
    else:
        i = int(choice[:choice.find(".")])
        # copy the content of corresponding snippet
        copy = "xclip -in -selection c "+"'"+files[i-1]+"'"
        subprocess.call(["/bin/bash", "-c", copy])
        # paste into open frontmost file
        paste = "xdotool key Control_L+v"
        subprocess.Popen(["/bin/bash", "-c", paste])
except Exception:
    pass

Si vous n'utilisez pas de nautile

Si vous utilisez un autre navigateur de fichiers, remplacez la ligne (29):

    subprocess.Popen(["nautilus", directory])

par:

    subprocess.Popen(["<your_filebrowser>", directory])

Placer le script sous une combinaison de touches de raccourci

Pour une utilisation plus pratique, vous pouvez créer un raccourci pour appeler le script:

"Paramètres système"> "Clavier"> "Raccourcis"> "Raccourcis personnalisés"

Cliquez sur "+" pour ajouter votre commande: python3 /path/to/paste_snippets.py


Le script est également publié sur Gist.gisthub


MODIFIER

La version ci-dessous vérifie automatiquement si le terminal (gnome-) est l’application la plus avancée et modifie automatiquement la commande coller en Ctrl+Shift+V au lieu de Ctrl+V

L'utilisation et la configuration sont à peu près les mêmes.

Le scénario

#!/usr/bin/env python3

import os
import subprocess

home = os.environ["HOME"]
directory = home+"/.config/snippet_paste"
if not os.path.exists(directory):
    os.mkdir(directory)
# create file list with snippets
files = [
    directory+"/"+item for item in os.listdir(directory) \
         if not item.endswith("~") and not item.startswith(".")
    ]
# create string list
strings = []
for file in files:
    with open(file) as src:
        strings.append(src.read())
# create list to display in option menu
list_items = ["manage snippets"]+[
    (str(i+1)+". "+strings[i].replace("\n", " ").replace\
     ('"', "'")[:20]+"..") for i in range(len(strings))
    ]
# define (zenity) option menu
test= 'zenity --list '+'"'+('" "')\
      .join(list_items)+'"'\
      +' --column="text fragments" --title="Paste snippets" --height 450 --width 150'

def check_terminal():
    # function to check if terminal is frontmost
    try:
        get = lambda cmd: subprocess.check_output(cmd).decode("utf-8").strip()
        get_terms = get(["xdotool", "search", "--class", "gnome-terminal"])
        term = [p for p in get(["xdotool", "search", "--class", "terminal"]).splitlines()]
        front = get(["xdotool", "getwindowfocus"])
        return True if front in term else False
    except:
        return False

# process user input
try:
    choice = subprocess.check_output(["/bin/bash", "-c", test]).decode("utf-8")
    if "manage snippets" in choice:
        subprocess.call(["nautilus", directory])
    else:
        i = int(choice[:choice.find(".")])
        # copy the content of corresponding snippet
        copy = "xclip -in -selection c "+"'"+files[i-1]+"'"
        subprocess.call(["/bin/bash", "-c", copy])
        # paste into open frontmost file
        paste = "xdotool key Control_L+v" if check_terminal() == False else "xdotool key Control_L+Shift_L+v"
        subprocess.Popen(["/bin/bash", "-c", paste])
except Exception:
    pass
6
Jacob Vlijm

J'utilise AutoKey il s'installe à partir du Centre de logiciel Ubuntu

vraiment facile à utiliser

J'ai ajouté "phrase" comme mon adresse e-mail [email protected] en tapant gm plus en appuyant sur l'onglet <tab>

enter image description here

enter image description here

4
BOB