Fix: besser kommentierte Version von Pascal (via Mailingliste).

This commit is contained in:
dennis 2011-05-11 19:50:33 +00:00
parent 98509f310b
commit 52e7703786
1 changed files with 29 additions and 18 deletions

View File

@ -1,8 +1,7 @@
#!/bin/bash #!/bin/sh
# #
# Dieses Skript unterstützt die Benutzung der Neo-Tastatur # Dieses Skript unterstützt die Benutzung der Neo-Tastatur
# Als Argument kann ein einzelnes Zeichen oder eine Beschreibung eines # Als Argument kann ein einzelnes Zeichen oder eine Beschreibung eines Zeichens übergeben werden
# Zeichens übergeben werden
# #
# Dieses Skript stammt von: # Dieses Skript stammt von:
# Pascal Hauck <pascal dot hauck at web dot de> # Pascal Hauck <pascal dot hauck at web dot de>
@ -10,7 +9,7 @@
# Kontakt zu den Entwicklern der Neo-Tastatur: # Kontakt zu den Entwicklern der Neo-Tastatur:
# <diskussion at neo-layout dot org> # <diskussion at neo-layout dot org>
COMPOSE=/usr/share/X11/locale/en_US.UTF-8/Compose COMPOSE=$HOME/.XCompose
REFERENZ=$HOME/neo/neo20.txt REFERENZ=$HOME/neo/neo20.txt
VON[1]=7; BIS[1]=82; RAND[1]="┌─────┬──"; ORT[1]="" # HAUPTTASTATUR=1 VON[1]=7; BIS[1]=82; RAND[1]="┌─────┬──"; ORT[1]="" # HAUPTTASTATUR=1
@ -22,19 +21,23 @@ zeichen=$1 # suche nach diesem Zeichen
typeset -i z s e j # z=zeile, s=spalte, e=Ebene 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 () { # bild TASTATURTEIL , erzeugt das Bild des Tastaturteils wie die Skripte neo und num 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]} grep -m 1 -A 15 ${RAND[$1]} $REFERENZ | cut -c ${VON[$1]}-${BIS[$1]}
} }
teste () { # teste TASTATURTEIL ZEILE SPALTE 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 bild $1 | head -$2 | tail -1 | cut -c $3
} }
schau_auf_tastatur () { such_auf_tastatur () { # Aufruf: such_auf_tastatur ZEICHEN
zeichen=$1 # sucht, ob das Zeichen $ZEICHEN irgendwo auf der Tastatur (Haupttastatur oder Keypad) zu finden ist
j=0 zeichen=$1 # zu suchendes Zeichen
for tastatur in 1 2 j=0 # j=3, sobald das Zeichen gefunden wurde
for tastatur in 1 2 # durchsuche beide Tastaturteile
do do
anzahl=`bild $tastatur | grep -n [│\ ]$zeichen[│\ ] | wc -l` # wie häufig ist $zeichen auf der Tastatur? anzahl=`bild $tastatur | grep -n [│\ ]$zeichen[│\ ] | wc -l` # wie häufig ist $zeichen auf der Tastatur?
@ -48,27 +51,35 @@ schau_auf_tastatur () {
do do
j=j+1 j=j+1
z=`bild $tastatur | grep -n [│\ ]$zeichen[│\ ] | head -$i | tail -1 | cut -f1 -d:` 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` 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=0 # e gibt am Ende die Ebene an, in der das gesuchte Zeichen liegt
test=`teste $tastatur $z $s` test=`position $tastatur $z $s`
while [ ! "$test" = "─" ] && [ ! "$test" = "┬" ] while [ ! "$test" = "─" ] && [ ! "$test" = "┬" ]
# suche in dem Kästchen bis der untere Rand gefunden ist
# Beispiel: ┬────┴┬
# │N 4 ℕ│
# │n ( ν│
# ┴──┬──┴
do do
# finde Zeile z von $ursprung (=Tastenname), berechne die Ebene $e von $zeichen # finde Zeile z von $ursprung (=Tastenname, im Beispiel also n), berechne die Ebene $e von $zeichen
z=z+1 z=z+1
e=e+1 e=e+1
ursprung=$test ursprung=$test
test=`teste $tastatur $z $s` test=`position $tastatur $z $s`
done done
z=z-1 z=z-1
ehilfe="1" ehilfe="1" # ehilfe="1" - es gibt kein Leerzeichen neben dem Rand
test=$ursprung test=$ursprung
while [ ! "$test" = "│" ] while [ ! "$test" = "│" ]
# suche in dem Kästchen bis der linke Rand gefunden ist
do do
if [ "$test" = " " ] if [ "$test" = " " ]
then then
ehilfe="0" ehilfe="0" # ehilfe="0" - es gibt kein Leerzeichen - neben dem Rand?
elif [ "$ehilfe" = "0" ] elif [ "$ehilfe" = "0" ]
then then
e=e+2; ehilfe=1 e=e+2; ehilfe=1
@ -76,7 +87,7 @@ schau_auf_tastatur () {
fi fi
s=s-1 s=s-1
test=`teste $tastatur $z $s` test=`position $tastatur $z $s`
done done
ursprung=`echo $ursprung ${ORT[$tastatur]}` ursprung=`echo $ursprung ${ORT[$tastatur]}`
@ -113,7 +124,7 @@ schau_auf_tastatur () {
schau_auf_tastatur $zeichen such_auf_tastatur $zeichen