155 lines
4.6 KiB
Bash
Executable File
155 lines
4.6 KiB
Bash
Executable File
#!/bin/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 <pascal dot hauck at web dot de>
|
||
#
|
||
# Kontakt zu den Entwicklern der Neo-Tastatur:
|
||
# <diskussion at neo-layout dot org>
|
||
|
||
|
||
# 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/> </> + </g'
|
||
else
|
||
# $zeichen gibt es nicht als Compose
|
||
echo
|
||
echo • $zeichen kann man nicht über Compose erzeugen
|
||
fi
|