summaryrefslogtreecommitdiff
path: root/linux/bin/wiemitneo
blob: 1cb20fb978ec9f25be993b812b655bfd74b940eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/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