Tool zum Einfügen von Textausschnitten in Anwendungen

Tool zum Einfügen von Textausschnitten in Anwendungen

Im Deutschen beginnt man Mails und Briefe mit „Sehr geehrter Herr ....“.

Ich bin es leid, das immer wieder einzutippen. Und ich bin es leid, Anwendungen so zu konfigurieren, dass sie mir Verknüpfungen zum Einfügen solcher Textblöcke bieten.

Gibt es eine Möglichkeit, Kommentartextblöcke mit der Desktopumgebung einzufügen?

Auf diese Weise konnte ich Textblöcke in vi, Thunderbird, Firefox, LibreOffice usw. einfügen.

Ein weiteres Beispiel: Ich muss meinen SSH-Pub-Schlüssel oft irgendwo einfügen. Ich weiß, wie man SSH-Copy-ID verwendet, aber auch hier wäre eine Desktop-Lösung, die mir Zugriff auf eine konfigurierbare Liste von Textblöcken gibt, großartig.

Antwort1

ich benutzeAutoKeyEs wird vom Ubuntu Software Center installiert

wirklich einfach zu bedienen

Ich habe "Phrasen" wie meine E-Mail-Adresse hinzugefügt, [email protected]indem ich sie eingetippt gmund die Tabulatortaste gedrückt habe<tab>

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort2

Das folgende Skript erledigt die Aufgabemit Anwendungen, die Ctrl+V Text einfügengnome-terminal. Es ist wichtig zu wissen, dass es beispielsweise im * nicht funktioniert .
Ich habe es unter anderem mit Firefox, Thunderbird, Libreoffice, Sublime Text und Gedit ohne Probleme getestet.

Wie es funktioniert

Wenn das Skript aufgerufen wird, erscheint ein Fenster mit einer Liste der von Ihnen definierten Snippets. Wählen Sie ein Element aus (oder geben Sie seine Nummer ein) und das Textfragment wird in das vorderste Fenster einer beliebigen Anwendung eingefügt, die Ctrl+ V"-kompatibel" ist:

Bildbeschreibung hier eingeben

Snippets hinzufügen/bearbeiten

Wenn Sie wählen manage snippets, wird der Ordner des Skripts ~/.config/snippet_pastein Nautilus geöffnet. Um ein neues Snippet zu erstellen, erstellen Sie einfach eine Textdatei mit dem Text Ihres Snippets. Der Name, den Sie der Datei geben, ist egal; solange es einfacher Text ist, ist alles in Ordnung. Das Skript verwendet nur den Inhalt der Datei und erstellt eine nummerierte Liste aller Dateien („Inhalt“), die es findet.

Bildbeschreibung hier eingeben

Wenn das Snippets-Verzeichnis ( ~/.config/snippet_paste) nicht existiert, erstellt das Skript es für Sie.

Wie benutzt man

  • Erstinstallation xdotoolund xclip, falls es nicht auf Ihrem System installiert ist:

    sudo apt-get install xdotool
    

    Und

    sudo apt-get install xclip
    
  • Kopieren Sie das folgende Skript, speichern Sie es unter und paste_snippets.pyführen Sie es mit dem folgenden Befehl aus:

    python3 /path/to/paste_snippets.py
    

Das Drehbuch

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

Wenn Sie Nautilus nicht verwenden

Wenn Sie einen anderen Dateibrowser verwenden, ersetzen Sie die Zeile (29):

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

von:

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

Unterbringen des Skripts unter eine Tastenkombination

Zur bequemeren Verwendung können Sie eine Verknüpfung zum Aufrufen des Skripts erstellen:

  • Systemeinstellungen →TastaturVerknüpfungenBenutzerdefinierte Verknüpfungen

  • Klicken Sie hier +, um Ihren Befehl hinzuzufügen:

    python3 /path/to/paste_snippets.py
    

Das Skript ist auch verfügbar aufgist.gisthub.


*BEARBEITEN

Die folgende Version prüft automatisch, ob das ( gnome-)-Terminal die vorderste Anwendung ist, und ändert den Einfügebefehl automatisch in Ctrl+ Shift+ Vanstelle von Ctrl+V

Die Nutzung und Einrichtung sind weitgehend gleich.

Das Drehbuch

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

verwandte Informationen