#!/usr/bin/env bash # # Dieses Skript unterstützt die Benutzung der Neo-Tastatur # Als Argument kann ein einzelnes Zeichen oder eine Beschreibung eines Zeichens übergeben werden # # Dieses Skript stammt von: # Pascal Hauck # # Kontakt zu den Entwicklern der Neo-Tastatur: # # Benutze die beutzerspezifische Compose-Datei (wenn vorhanden); ansonsten die des Systems if [ -f $HOME/.XCompose ]; then COMPOSE=$HOME/.XCompose else COMPOSE=/usr/share/X11/locale/en_US.UTF-8/Compose fi # Benutze die von installiere_neo installierte Referenz-Datei (wenn vorhanden); ansonsten die aus dem SVN if [ -f $HOME/neo/neo20.txt ]; then REFERENZ=$HOME/neo/neo20.txt else REFERENZ=../../A-REFERENZ-A/neo20.txt fi VON[1]=7; BIS[1]=82; RAND[1]="┌─────┬──"; ORT[1]="" # HAUPTTASTATUR=1 VON[2]=1; BIS[2]=33; RAND[2]="┌───────┬──"; ORT[2]="auf dem Keypad" # KEYPAD=2 zeichen=$1 # suche nach diesem Zeichen typeset -i z s e j # z=zeile, s=spalte, e=Ebene # als TASTATURTEL wird immer 1 für die Haupttastatur und 2 für das Keypad verwendet bild () { # Aufruf: bild TASTATURTEIL # erzeugt das Bild des Tastaturteils wie die Skripte neo und num grep -m 1 -A 15 ${RAND[$1]} $REFERENZ | cut -c ${VON[$1]}-${BIS[$1]} } position () { # Aufruf: position TASTATURTEIL ZEILE SPALTE # gibt das Zeichen aus, das an der durch $TASTATURTEIL, $ZEILE und $SPALTE spezifizierten stelle liegt bild $1 | head -$2 | tail -1 | cut -c $3 } such_auf_tastatur () { # Aufruf: such_auf_tastatur ZEICHEN # sucht, ob das Zeichen $ZEICHEN irgendwo auf der Tastatur (Haupttastatur oder Keypad) zu finden ist zeichen=$1 # zu suchendes Zeichen j=0 # j=3, sobald das Zeichen gefunden wurde for tastatur in 1 2 # durchsuche beide Tastaturteile do anzahl=`bild $tastatur | grep -n [│\ ]$zeichen[│\ ] | wc -l` # wie häufig ist $zeichen auf der Tastatur? if [ $anzahl -ge 1 ] then # $zeichen gibt es direkt auf der Tastatur bei Ebene $e auf der Taste $ursprung [ $j -le 2 ] && echo • $zeichen gibt es direkt auf der Neo-Tastatur: && j=3 for i in $(seq 1 $anzahl) # eventuell mehrfach auf der Tastatur vorhanden do j=j+1 z=`bild $tastatur | grep -n [│\ ]$zeichen[│\ ] | head -$i | tail -1 | cut -f1 -d:` # Zeile, an der das gesuchte Zeichen gefunden worden ist s=`bild $tastatur | grep [│\ ]$zeichen[│\ ] | head -$i | tail -1 | cut -f1 -d $zeichen | wc -m` # Spalte, an der das gesuchte Zeichen gefunden worden ist e=0 # e gibt am Ende die Ebene an, in der das gesuchte Zeichen liegt test=`position $tastatur $z $s` while [ ! "$test" = "─" ] && [ ! "$test" = "┬" ] # suche in dem Kästchen bis der untere Rand gefunden ist # Beispiel: ┬────┴┬ # │N 4 ℕ│ # │n ( ν│ # ┴──┬──┴ do # finde Zeile z von $ursprung (=Tastenname, im Beispiel also ›n‹), berechne die Ebene $e von $zeichen z=z+1 e=e+1 ursprung=$test test=`position $tastatur $z $s` done z=z-1 ehilfe="1" # ehilfe="1" - es gibt kein Leerzeichen neben dem Rand test=$ursprung while [ ! "$test" = "│" ] # suche in dem Kästchen bis der linke Rand gefunden ist do if [ "$test" = " " ] then ehilfe="0" # ehilfe="0" - es gibt kein Leerzeichen - neben dem Rand? elif [ "$ehilfe" = "0" ] then e=e+2; ehilfe=1 ursprung=$test fi s=s-1 test=`position $tastatur $z $s` done ursprung=`echo $ursprung ${ORT[$tastatur]}` # gebe Position eines gefundenen Zeichens aus case $e in 1) echo $zeichen ist eine eigene Taste ${ORT[$tastatur]} ;; 2) echo $zeichen erreicht man mit Shift+$ursprung ;; 3) echo $zeichen erreicht man mit Mod3+$ursprung ;; 4) echo $zeichen erreicht man mit Mod4+$ursprung ;; 5) echo $zeichen erreicht man mit Shift+Mod3+$ursprung ;; 6) echo ›$zeichen erreicht man mit Mod3+Mod4+$ursprung ;; esac done else # $zeichen gibt es nicht direkt auf der Haupttastatur [ $j -eq 2 ] && echo • $zeichen gibt es nicht direkt auf der Neo-Tastatur && j=3 fi done } such_auf_tastatur $zeichen find=`grep "\"$zeichen\"" $COMPOSE | head -1 | cut -f1 -d \ ` if [ $find ] then # $zeichen gibt es als Compose echo echo • $zeichen ist über Compose folgendermaßen darstellbar: grep ^\<.*"\"$zeichen\"" $COMPOSE | cut -f1 -d: | sed -e 's/> +