]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.sbin/bsdconfig/console/keymap
Update to latest git version of dtc to get new dtsv2 support,
[FreeBSD/FreeBSD.git] / usr.sbin / bsdconfig / console / keymap
1 #!/bin/sh
2 #-
3 # Copyright (c) 2012 Devin Teske
4 # All Rights Reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 #    notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 #    notice, this list of conditions and the following disclaimer in the
13 #    documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 # DAMAGES (INLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 # SUCH DAMAGE.
26 #
27 # $FreeBSD$
28 #
29 ############################################################ INCLUDES
30
31 BSDCFG_LIBE="/usr/libexec/bsdconfig"
32 . $BSDCFG_LIBE/include/common.subr || exit 1
33 f_include $BSDCFG_LIBE/include/dialog.subr
34 f_include $BSDCFG_LIBE/include/mustberoot.subr
35 f_include $BSDCFG_LIBE/include/sysrc.subr
36
37 APP_DIR="080.console"
38 f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
39
40 ipgm=$( f_index_menu_selection $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
41 [ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
42
43 ############################################################ CONFIGURATION
44
45 #
46 # List of keymap names
47 #
48 KEYMAP_NAMES="
49         belgian                  brazil_cp850             brazil_iso
50         brazil_iso_accent        bulgarian_bds            bulgarian_phonetic
51         central_european_iso     croatian_iso             czech_iso_accent
52         danish_cp865             danish_iso               estonian_cp850
53         estonian_iso             estonian_iso_15          finnish_cp850
54         finnish_iso              french_iso               french_iso_accent
55         french_iso_macbook       german_cp850             german_iso
56         greek_101                greek_104                greek_elot
57         hungarian_101            hungarian_102            icelandic
58         icelandic_accent         italian                  japanese_106
59         latin_american           latin_american_accent    norway_iso
60         polish_iso               portuguese               portuguese_accent
61         russia_koi8_r            slovak                   slovenian
62         spanish                  spanish_accent           swedish_cp850
63         swedish_iso              swiss_french_cp850       swiss_french_iso
64         swiss_french_iso_accent  swiss_german_cp850       swiss_german_iso
65         swiss_german_iso_accent  uk_cp850                 uk_iso
66         ukrainian_koi8_u         ukrainian_koi8_u_koi8_r  usa_capslock_ctrl
67         usa_dvorak               usa_dvorak_left          usa_dvorak_right
68         usa_emacs                usa_iso                  usa_unix
69 " # END-QUOTE
70
71 ############################################################ FUNCTIONS
72
73 # dialog_menu_main
74 #
75 # Display the dialog(1)-based application main menu.
76 #
77 dialog_menu_main()
78 {
79         local menu_list size
80         local hline="$hline_choose_a_keyboard_map"
81         local prompt="$msg_keymap_menu_text"
82
83         #
84         # Export variables for awk(1) ENVIRON visibility
85         #
86         local name
87         for name in $KEYMAP_NAMES; do
88                 export msg_$name msg_${name}_desc
89         done
90
91         #
92         # Generate a sorted list of keymaps. If the first letter of the keymap
93         # name is unique (case-insensitive) then it is used as the tag to allow
94         # the user to jump to that entry.
95         #
96         menu_list=$(
97                 for name in $KEYMAP_NAMES; do
98                         eval echo \"\$msg_$name\" msg_$name
99                 done | sort | awk 'BEGIN { prefix = "" }
100                 {
101                         cur_prefix = tolower(substr(ENVIRON[$NF], 1, 1))
102                         printf "'\''"
103                         if ( prefix != cur_prefix )
104                                 prefix = cur_prefix
105                         else
106                                 printf " "
107                         printf "%s'\'' '\''%s'\''\n",
108                                ENVIRON[$NF], ENVIRON[$NF"_desc"]
109                 }'
110         )
111
112         size=$( eval f_dialog_menu_size \
113                         \"\$DIALOG_TITLE\"     \
114                         \"\$DIALOG_BACKTITLE\" \
115                         \"\$prompt\"           \
116                         \"\$hline\"            \
117                         $menu_list             )
118
119         eval $DIALOG \
120                 --clear --title \"\$DIALOG_TITLE\" \
121                 --backtitle \"\$DIALOG_BACKTITLE\" \
122                 --hline \"\$hline\"                \
123                 --ok-label \"\$msg_ok\"            \
124                 --cancel-label \"\$msg_cancel\"    \
125                 --menu \"\$prompt\" $size          \
126                 $menu_list                         \
127                 2> "$DIALOG_TMPDIR/dialog.menu.$$"
128 }
129
130 ############################################################ MAIN
131
132 # Incorporate rc-file if it exists
133 [ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
134
135 #
136 # Process command-line arguments
137 #
138 while getopts hSX flag; do
139         case "$flag" in
140         h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm";;
141         esac
142 done
143 shift $(( $OPTIND - 1 ))
144
145 #
146 # Initialize
147 #
148 f_dialog_init
149 f_dialog_title "$msg_system_console_keymap"
150 f_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
151 f_mustberoot_init
152
153 #
154 # Launch application main menu
155 #
156 while :; do
157         dialog_menu_main
158         retval=$?
159         mtag=$( f_dialog_menutag )
160
161         [ $retval -eq 0 ] || f_die
162
163         #
164         # Reverse the users choice into the variable name
165         #
166         keymap_name=
167         mtag="${mtag# }" # remove single leading-space if-present
168         for name in $KEYMAP_NAMES; do
169                 if [ "$( eval echo \"\$msg_$name\" )" = "$mtag" ]; then
170                         keymap_name="$name"
171                         break
172                 fi
173         done
174
175         [ "$keymap_name" ] || continue
176
177         case "$keymap_name" in
178         belgian)
179                 f_sysrc_set keymap "be.iso" || f_die
180                 break ;;
181         brazil_cp850)
182                 f_sysrc_set keymap "br275.cp850" || f_die
183                 break ;;
184         brazil_iso)
185                 f_sysrc_set keymap "br275.iso" || f_die
186                 break ;;
187         brazil_iso_accent)
188                 f_sysrc_set keymap "br275.iso.acc" || f_die
189                 break ;;
190         bulgarian_bds)
191                 f_sysrc_set keymap "bg.bds.ctrlcaps" || f_die
192                 break ;;
193         bulgarian_phonetic)
194                 f_sysrc_set keymap "bg.phonetic.ctrlcaps" || f_die
195                 break ;;
196         central_european_iso)
197                 f_sysrc_set keymap "ce.iso2" || f_die
198                 break ;;
199         croatian_iso)
200                 f_sysrc_set keymap "hr.iso" || f_die
201                 break ;;
202         czech_iso_accent)
203                 f_sysrc_set keymap "cs.latin2.qwertz" || f_die
204                 break ;;
205         danish_cp865)
206                 f_sysrc_set keymap "danish.cp865" || f_die
207                 break ;;
208         danish_iso)
209                 f_sysrc_set keymap "danish.iso" || f_die
210                 break ;;
211         estonian_cp850)
212                 f_sysrc_set keymap "estonian.cp850" || f_die
213                 break ;;
214         estonian_iso)
215                 f_sysrc_set keymap "estonian.iso" || f_die
216                 break ;;
217         estonian_iso_15)
218                 f_sysrc_set keymap "estonian.iso15" || f_die
219                 break ;;
220         finnish_cp850)
221                 f_sysrc_set keymap "finnish.cp850" || f_die
222                 break ;;
223         finnish_iso)
224                 f_sysrc_set keymap "finnish.iso" || f_die
225                 break ;;
226         french_iso)
227                 f_sysrc_set keymap "fr.iso" || f_die
228                 break ;;
229         french_iso_accent)
230                 f_sysrc_set keymap "fr.iso.acc" || f_die
231                 break ;;
232         french_iso_macbook)
233                 f_sysrc_set keymap "fr.macbook.acc" || f_die
234                 break ;;
235         german_cp850)
236                 f_sysrc_set keymap "german.cp850" || f_die
237                 break ;;
238         german_iso)
239                 f_sysrc_set keymap "german.iso" || f_die
240                 break ;;
241         greek_101)
242                 f_sysrc_set keymap "gr.us101.acc" || f_die
243                 break ;;
244         greek_104)
245                 f_sysrc_set keymap "el.iso07" || f_die
246                 break ;;
247         greek_elot)
248                 f_sysrc_set keymap "gr.elot.acc" || f_die
249                 break ;;
250         hungarian_101)
251                 f_sysrc_set keymap "hu.iso2.101keys" || f_die
252                 break ;;
253         hungarian_102)
254                 f_sysrc_set keymap "hu.iso2.102keys" || f_die
255                 break ;;
256         icelandic)
257                 f_sysrc_set keymap "icelandic.iso" || f_die
258                 break ;;
259         icelandic_accent)
260                 f_sysrc_set keymap "icelandic.iso.acc" || f_die
261                 break ;;
262         italian)
263                 f_sysrc_set keymap "it.iso" || f_die
264                 break ;;
265         japanese_106)
266                 f_sysrc_set keymap "jp.106" || f_die
267                 break ;;
268         latin_american)
269                 f_sysrc_set keymap "latinamerican" || f_die
270                 break ;;
271         latin_american_accent)
272                 f_sysrc_set keymap "latinamerican.iso.acc" || f_die
273                 break ;;
274         norway_iso)
275                 f_sysrc_set keymap "norwegian.iso" || f_die
276                 break ;;
277         polish_iso)
278                 f_sysrc_set keymap "pl_PL.ISO8859-2" || f_die
279                 break ;;
280         portuguese)
281                 f_sysrc_set keymap "pt.iso" || f_die
282                 break ;;
283         portuguese_accent)
284                 f_sysrc_set keymap "pt.iso.acc" || f_die
285                 break ;;
286         russia_koi8_r)
287                 f_sysrc_set keymap "ru.koi8-r" || f_die
288                 break ;;
289         slovak) 
290                 f_sysrc_set keymap "sk.iso2" || f_die
291                 break ;;
292         slovenian)
293                 f_sysrc_set keymap "si.iso" || f_die
294                 break ;;
295         spanish)
296                 f_sysrc_set keymap "spanish.iso" || f_die
297                 break ;;
298         spanish_accent)
299                 f_sysrc_set keymap "spanish.iso.acc" || f_die
300                 break ;;
301         swedish_cp850)
302                 f_sysrc_set keymap "swedish.cp850" || f_die
303                 break ;;
304         swedish_iso)
305                 f_sysrc_set keymap "swedish.iso" || f_die
306                 break ;;
307         swiss_french_cp850)
308                 f_sysrc_set keymap "swissfrench.cp850" || f_die
309                 break ;;
310         swiss_french_iso)
311                 f_sysrc_set keymap "swissfrench.iso" || f_die
312                 break ;;
313         swiss_french_iso_accent)
314                 f_sysrc_set keymap "swissfrench.iso.acc" || f_die
315                 break ;;
316         swiss_german_cp850)
317                 f_sysrc_set keymap "swissgerman.cp850" || f_die
318                 break ;;
319         swiss_german_iso)
320                 f_sysrc_set keymap "swissgerman.iso" || f_die
321                 break ;;
322         swiss_german_iso_accent)
323                 f_sysrc_set keymap "swissgerman.iso.acc" || f_die
324                 break ;;
325         uk_cp850)
326                 f_sysrc_set keymap "uk.cp850" || f_die
327                 break ;;
328         uk_iso)
329                 f_sysrc_set keymap "uk.iso" || f_die
330                 break ;;
331         ukrainian_koi8_u)
332                 f_sysrc_set keymap "ua.koi8-u" || f_die
333                 break ;;
334         ukrainian_koi8_u_koi8_r)
335                 f_sysrc_set keymap "ua.koi8-u.shift.alt" || f_die
336                 break ;;
337         usa_capslock_ctrl)
338                 f_sysrc_set keymap "us.pc-ctrl" || f_die
339                 break ;;
340         usa_dvorak)
341                 f_sysrc_set keymap "us.dvorak" || f_die
342                 break ;;
343         usa_dvorak_left)
344                 f_sysrc_set keymap "us.dvorakl" || f_die
345                 break ;;
346         usa_dvorak_right)
347                 f_sysrc_set keymap "us.dvorakr" || f_die
348                 break ;;
349         usa_emacs)
350                 f_sysrc_set keymap "us.emacs" || f_die
351                 break ;;
352         usa_iso)
353                 f_sysrc_set keymap "us.iso" || f_die
354                 break ;;
355         usa_unix)
356                 f_sysrc_set keymap "us.unix" || f_die
357                 break ;;
358         esac
359 done
360
361 exit $SUCCESS
362
363 ################################################################################
364 # END
365 ################################################################################