
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 gm
und die Tabulatortaste gedrückt habe<tab>
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:
Snippets hinzufügen/bearbeiten
Wenn Sie wählen manage snippets
, wird der Ordner des Skripts ~/.config/snippet_paste
in 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.
Wenn das Snippets-Verzeichnis ( ~/.config/snippet_paste
) nicht existiert, erstellt das Skript es für Sie.
Wie benutzt man
Erstinstallation
xdotool
undxclip
, 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.py
fü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 →Tastatur→Verknüpfungen→Benutzerdefinierte 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