Textsnippets bei KDE mit und ohne Klipper [Update #2, „Solved“]

Auch ich hatte jetzt einen aussreichend hohen Leidensdruck, das ich mich umgeschaut habe, wie ich vermeiden kann, immer und immer wieder den gleichen Text eingeben zu können. Z.B. das allseits beliebte „Sehr geehrte Damen und Herren,„. Wollte dafür eine schnellere und bequemere Lösung haben.

Ich nutze z.Zt. KDE und da gibt’s direkt 2 Lösungsmöglichkeiten.1)

Im KDE Kontrollzentrum gibt es die Kurzbefehle und Gestensteuerung, wo man auch Eigene Kurzbefehle definieren kann. Diese versehe man dann noch mit einem „Kurzbefehl“ (also Tastenkombination, z.B. Meta+Alt+1) und wenn man dann diese Tastenkombination drückt, wird der Text eingefügt.

Aber, wie man beim Screenshot sehen kann, das ist eher unschön. Um „Sehr geehrte Damen und Herren,“ eingeben zu lassen, muss man eingeben:

Shift+S:E:H:R:SPACE:G:E:E:H:R:T:E:SPACE:SHIFT+K:U:N:D:I:N:,:RETURN:Shift+S:E:H:R:SPACE:G:E:E:H:R:T:E:SPACE:SHIFT+K:U:N:D:E:,:RETURN:RETURN

Urks.

Aber dafür klappt’s auch direkt und überall…

2)

Klipper. Klipper kann man so einsellen, das irgendwelche Aktionen ausgeführt werden, wenn ein Text in die Zwischenablage kopiert wird, der auf einen regulären Ausdruck passt.

Die Screenshots oben zeigen, wie ich Klipper bei mir konfiguriert habe, so das es (für mich!) passt.

  • Aktions-Eigenschaften
    • Regulärer Ausdruck: ^,,,
    • Befehl: /home/ask/bin/Klipper-Replace-Text %s
    • Ausgabebehandlung: Zwischenablage ersetzen

Das bewirkt, das wenn ein Text in die Zwischenablage kopiert wird, der mit „,,,“ (3× Komma) beginnt, das dann das Klipper-Replace-Text Script aufgerufen wird und dieses erhält als Parameter was auch immer kopiert wurde.

Das Klipper-Replace-Text Script macht, vereinfacht gesagt, das der Präfix (,,,) abgeschnitten wird, dann in einer „Datenbank“ der Kurztext (z.B. „SgDuH„) nachgeschlagen wird und der dazu gehörige Langtext (z.B. „Sehr geehrte Damen und Herren,„) in die Zwischenablage kopiert wird.

Das Script gibt’s bei pastebin „in schön“: http://pastebin.com/XNAfyrJN; es benötigt eine „Datenbank“ (Textdatei), als Beispiel diese: http://pastebin.com/C6yUgSx0

Klipper-Replace-Text Script

klipper-replace-text Datenbank

Update:

2 „Kleinigkeiten“ vergessen:

  1. per Default wird die Klipper Lösung (2) so nicht klappen. Grund ist, das KDE (zumindest bei meinem openSUSE 11.4) so ausgeliefert wird, das Klipper so eingestellt ist, das es *NICHT* bei netscape/firefox/“browser“ Fenstern matcht. Man muss zuerst die Regel „netscape:browser“ (oder so ähnlich…) aus den „Erweiterten“ Einstellungen bei Klipper entfenen. Dann klappt’s, ABER
  2. Macht man das, so kommen alle naslang solche Popups, wenn man z.B. URLs (in der Adresszeile) markiert. Auf Dauer ist das *MEGA* Nervig! Was bestimmt auch der Grund ist, warum KDE so voreingestellt ist, das bei Firefox Klipper die Klappe hält…

Update #2, Lösung!:

Noch ein wenig daran „gearbeitet“. Ich habe jetzt, wie oben beschrieben, die AUTOMATISCHE Aktionsauslösung für Firefox deaktiviert (die zu verwendende WM_CLASS findet man durch xprop WM_CLASS raus). Aber, es gibt das globale Shortcut Ctrl+Alt+R, was eine Aktion manuell anstösst!

Und das nutze ich jetzt so🙂 Also mein Klipper-Replace-Text Script, welches bei „,,,“ ausgelöst wird, aber bei den Browsern nicht automatisch.

Tut für mich😉


$HOME/bin/Klipper-Replace-Text Script:

#! /bin/bash

# Ersetze den übergebenen Text aus der Zwischenablage mit
# einem neuen Text.
# Bsp.: Mache aus "SgDuH" "Sehr geehrte Damen und Herren"

# Datei mit den Kurz- und Langtexten
replace_db="$HOME/var/klipper-replace-text.txt"

# Das Script wird von Klipper aufgerufen, wenn irgendein Prefix
# in die Zwischenablage kopiert wurde. Dieser Prefix ist abzuschneiden.
prefix=",,,"

# Holen:
# qdbus org.kde.klipper /klipper  org.kde.klipper.klipper.getClipboardContents
# Setzen:
# qdbus org.kde.klipper /klipper  org.kde.klipper.klipper.setClipboardContents Klipper-Replace-Text

# Wurde Text auf der Kommandozeile uebergeben?
if [[ "$#" -eq 0 ]]; then
  # Hole Text aus der Zwischenablage
  clip=$( qdbus org.kde.klipper /klipper org.kde.klipper.klipper.getClipboardContents )
else
  # Text von der Kommandozeile nehmen
  clip="$@"
fi

# Entferne prefix vom clip
clip_clean=${clip#$prefix}
# Mache den Text "safe"
clip_quoted=$( printf "%q" "$clip_clean" )

# Suche in der "DatenbanK"
replace=$( awk -F'°' "/^${clip_quoted}/ "'{print $2}' "$replace_db" 2> /dev/null )

# Was gefunden?
[[ -z "$replace" ]] && exit 1

# Expandiere evtl. vorhandene Backslash Sequenzen (\n -> Zeilenumbruch)
replace_bs=$( printf "%b" "$replace" )

# Speichere in Zwischenablage
qdbus org.kde.klipper /klipper org.kde.klipper.klipper.setClipboardContents "$replace_bs" > /dev/null 2>&1
printf "%s\n" "$replace_bs"

exit $?
# EOF #

$HOME/var/klipper-replace-text.txt Datenbank:

SgDuH°Sehr geehrte Damen und Herren,
SgK°Sehr geehrte Kundin,\nSehr geehrter Kunde,
as°Alexander Skwar
mail°Sehr geehrte Damen und Herren,\n\nBLAH\n\nMit freundlichen Grüssen,\n\nAlexander Skwar\n
mfg°\n\nMit freundlichen Grüssen\n\nAlexander Skwar\n
bash°#! /bin/bash\n\n# Dieses Script macht...\n\nexit 0\n# EOF #

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s