xref: /freebsd/usr.sbin/bsdconfig/console/keymap (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
1641a6cfbSDevin Teske#!/bin/sh
2641a6cfbSDevin Teske#-
3e14ddd1fSDevin Teske# Copyright (c) 2012-2013 Devin Teske
4f8ea072aSDevin Teske# All rights reserved.
5641a6cfbSDevin Teske#
6641a6cfbSDevin Teske# Redistribution and use in source and binary forms, with or without
7641a6cfbSDevin Teske# modification, are permitted provided that the following conditions
8641a6cfbSDevin Teske# are met:
9641a6cfbSDevin Teske# 1. Redistributions of source code must retain the above copyright
10641a6cfbSDevin Teske#    notice, this list of conditions and the following disclaimer.
11641a6cfbSDevin Teske# 2. Redistributions in binary form must reproduce the above copyright
12641a6cfbSDevin Teske#    notice, this list of conditions and the following disclaimer in the
13641a6cfbSDevin Teske#    documentation and/or other materials provided with the distribution.
14641a6cfbSDevin Teske#
15641a6cfbSDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
168e37a7c8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17641a6cfbSDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18641a6cfbSDevin Teske# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19641a6cfbSDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
208e37a7c8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21641a6cfbSDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22641a6cfbSDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23641a6cfbSDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24641a6cfbSDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25641a6cfbSDevin Teske# SUCH DAMAGE.
26641a6cfbSDevin Teske#
27641a6cfbSDevin Teske#
28641a6cfbSDevin Teske############################################################ INCLUDES
29641a6cfbSDevin Teske
30ab2043b8SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
31ab2043b8SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
3256961fd7SDevin Teskef_dprintf "%s: loading includes..." "$0"
33ab2043b8SDevin Teskef_include $BSDCFG_SHARE/dialog.subr
34ab2043b8SDevin Teskef_include $BSDCFG_SHARE/mustberoot.subr
35ab2043b8SDevin Teskef_include $BSDCFG_SHARE/sysrc.subr
36641a6cfbSDevin Teske
37ab2043b8SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="080.console"
38641a6cfbSDevin Teskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
39641a6cfbSDevin Teske
40d4ae33f0SDevin Teskef_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm &&
41d4ae33f0SDevin Teske	pgm="${ipgm:-$pgm}"
42641a6cfbSDevin Teske
43641a6cfbSDevin Teske############################################################ CONFIGURATION
44641a6cfbSDevin Teske
45641a6cfbSDevin Teske#
46641a6cfbSDevin Teske# List of keymap names
47641a6cfbSDevin Teske#
48641a6cfbSDevin TeskeKEYMAP_NAMES="
49641a6cfbSDevin Teske	belgian                  brazil_cp850             brazil_iso
50641a6cfbSDevin Teske	brazil_iso_accent        bulgarian_bds            bulgarian_phonetic
51641a6cfbSDevin Teske	central_european_iso     croatian_iso             czech_iso_accent
52641a6cfbSDevin Teske	danish_cp865             danish_iso               estonian_cp850
53641a6cfbSDevin Teske	estonian_iso             estonian_iso_15          finnish_cp850
54641a6cfbSDevin Teske	finnish_iso              french_iso               french_iso_accent
55641a6cfbSDevin Teske	french_iso_macbook       german_cp850             german_iso
56641a6cfbSDevin Teske	greek_101                greek_104                greek_elot
57641a6cfbSDevin Teske	hungarian_101            hungarian_102            icelandic
58641a6cfbSDevin Teske	icelandic_accent         italian                  japanese_106
59641a6cfbSDevin Teske	latin_american           latin_american_accent    norway_iso
60641a6cfbSDevin Teske	polish_iso               portuguese               portuguese_accent
61641a6cfbSDevin Teske	russia_koi8_r            slovak                   slovenian
62641a6cfbSDevin Teske	spanish                  spanish_accent           swedish_cp850
63641a6cfbSDevin Teske	swedish_iso              swiss_french_cp850       swiss_french_iso
64641a6cfbSDevin Teske	swiss_french_iso_accent  swiss_german_cp850       swiss_german_iso
65641a6cfbSDevin Teske	swiss_german_iso_accent  uk_cp850                 uk_iso
66641a6cfbSDevin Teske	ukrainian_koi8_u         ukrainian_koi8_u_koi8_r  usa_capslock_ctrl
67641a6cfbSDevin Teske	usa_dvorak               usa_dvorak_left          usa_dvorak_right
68641a6cfbSDevin Teske	usa_emacs                usa_iso                  usa_unix
69641a6cfbSDevin Teske" # END-QUOTE
70641a6cfbSDevin Teske
71641a6cfbSDevin Teske############################################################ FUNCTIONS
72641a6cfbSDevin Teske
73641a6cfbSDevin Teske# dialog_menu_main
74641a6cfbSDevin Teske#
75641a6cfbSDevin Teske# Display the dialog(1)-based application main menu.
76641a6cfbSDevin Teske#
77641a6cfbSDevin Teskedialog_menu_main()
78641a6cfbSDevin Teske{
79641a6cfbSDevin Teske	local prompt="$msg_keymap_menu_text"
80052f8969SDevin Teske	local menu_list defaultitem= # Calculated below
81052f8969SDevin Teske	local hline="$hline_choose_a_keyboard_map"
82641a6cfbSDevin Teske
83641a6cfbSDevin Teske	#
84641a6cfbSDevin Teske	# Export variables for awk(1) ENVIRON visibility
85641a6cfbSDevin Teske	#
86641a6cfbSDevin Teske	local name
87641a6cfbSDevin Teske	for name in $KEYMAP_NAMES; do
88641a6cfbSDevin Teske		export msg_$name msg_${name}_desc
89641a6cfbSDevin Teske	done
90641a6cfbSDevin Teske
91641a6cfbSDevin Teske	#
92641a6cfbSDevin Teske	# Generate a sorted list of keymaps. If the first letter of the keymap
93641a6cfbSDevin Teske	# name is unique (case-insensitive) then it is used as the tag to allow
94641a6cfbSDevin Teske	# the user to jump to that entry.
95641a6cfbSDevin Teske	#
96641a6cfbSDevin Teske	menu_list=$(
97641a6cfbSDevin Teske		for name in $KEYMAP_NAMES; do
98641a6cfbSDevin Teske			eval echo \"\$msg_$name\" msg_$name
99641a6cfbSDevin Teske		done | sort | awk 'BEGIN { prefix = "" }
100641a6cfbSDevin Teske		{
101641a6cfbSDevin Teske			cur_prefix = tolower(substr(ENVIRON[$NF], 1, 1))
102641a6cfbSDevin Teske			printf "'\''"
103641a6cfbSDevin Teske			if ( prefix != cur_prefix )
104641a6cfbSDevin Teske				prefix = cur_prefix
105641a6cfbSDevin Teske			else
106641a6cfbSDevin Teske				printf " "
107641a6cfbSDevin Teske			printf "%s'\'' '\''%s'\''\n",
108641a6cfbSDevin Teske			       ENVIRON[$NF], ENVIRON[$NF"_desc"]
109641a6cfbSDevin Teske		}'
110641a6cfbSDevin Teske	)
111641a6cfbSDevin Teske
11274036c4dSDevin Teske	local height width rows
11374036c4dSDevin Teske	eval f_dialog_menu_size height width rows \
114641a6cfbSDevin Teske	                        \"\$DIALOG_TITLE\"     \
115641a6cfbSDevin Teske	                        \"\$DIALOG_BACKTITLE\" \
116641a6cfbSDevin Teske	                        \"\$prompt\"           \
117641a6cfbSDevin Teske	                        \"\$hline\"            \
11874036c4dSDevin Teske	                        $menu_list
119641a6cfbSDevin Teske
120d3a0f918SDevin Teske	case "$( f_sysrc_get keymap )" in
121d3a0f918SDevin Teske	be.iso)                defaultitem="$msg_belgian"                 ;;
122d3a0f918SDevin Teske	br275.cp850)           defaultitem="$msg_brazil_cp850"            ;;
123d3a0f918SDevin Teske	br275.iso)             defaultitem="$msg_brazil_iso"              ;;
124d3a0f918SDevin Teske	br275.iso.acc)         defaultitem="$msg_brazil_iso_accent"       ;;
125d3a0f918SDevin Teske	bg.bds.ctrlcaps)       defaultitem="$msg_bulgarian_bds"           ;;
126d3a0f918SDevin Teske	bg.phonetic.ctrlcaps)  defaultitem="$msg_bulgarian_phonetic"      ;;
127d3a0f918SDevin Teske	ce.iso2)               defaultitem="$msg_central_european_iso"    ;;
128d3a0f918SDevin Teske	hr.iso)                defaultitem="$msg_croatian_iso"            ;;
129d3a0f918SDevin Teske	cs.latin2.qwertz)      defaultitem="$msg_czech_iso_accent"        ;;
130d3a0f918SDevin Teske	danish.cp865)          defaultitem="$msg_danish_cp865"            ;;
131d3a0f918SDevin Teske	danish.iso)            defaultitem="$msg_danish_iso"              ;;
132d3a0f918SDevin Teske	estonian.cp850)        defaultitem="$msg_estonian_cp850"          ;;
133d3a0f918SDevin Teske	estonian.iso)          defaultitem="$msg_estonian_iso"            ;;
134d3a0f918SDevin Teske	estonian.iso15)        defaultitem="$msg_estonian_iso_15"         ;;
135d3a0f918SDevin Teske	finnish.cp850)         defaultitem="$msg_finnish_cp850"           ;;
136d3a0f918SDevin Teske	finnish.iso)           defaultitem="$msg_finnish_iso"             ;;
137d3a0f918SDevin Teske	fr.iso)                defaultitem="$msg_french_iso"              ;;
138d3a0f918SDevin Teske	fr.iso.acc)            defaultitem="$msg_french_iso_accent"       ;;
139d3a0f918SDevin Teske	fr.macbook.acc)        defaultitem="$msg_french_iso_macbook"      ;;
140d3a0f918SDevin Teske	german.cp850)          defaultitem="$msg_german_cp850"            ;;
141d3a0f918SDevin Teske	german.iso)            defaultitem="$msg_german_iso"              ;;
142d3a0f918SDevin Teske	gr.us101.acc)          defaultitem="$msg_greek_101"               ;;
143d3a0f918SDevin Teske	el.iso07)              defaultitem="$msg_greek_104"               ;;
144d3a0f918SDevin Teske	gr.elot.acc)           defaultitem="$msg_greek_elot"              ;;
145d3a0f918SDevin Teske	hu.iso2.101keys)       defaultitem="$msg_hungarian_101"           ;;
146d3a0f918SDevin Teske	hu.iso2.102keys)       defaultitem="$msg_hungarian_102"           ;;
147d3a0f918SDevin Teske	icelandic.iso)         defaultitem="$msg_icelandic"               ;;
148d3a0f918SDevin Teske	icelandic.iso.acc)     defaultitem="$msg_icelandic_accent"        ;;
149d3a0f918SDevin Teske	it.iso)                defaultitem="$msg_italian"                 ;;
150d3a0f918SDevin Teske	jp.106)                defaultitem="$msg_japanese_106"            ;;
151d3a0f918SDevin Teske	latinamerican)         defaultitem="$msg_latin_american"          ;;
152d3a0f918SDevin Teske	latinamerican.iso.acc) defaultitem="$msg_latin_american_accent"   ;;
153d3a0f918SDevin Teske	norwegian.iso)         defaultitem="$msg_norway_iso"              ;;
154d3a0f918SDevin Teske	pl_PL.ISO8859-2)       defaultitem="$msg_polish_iso"              ;;
155d3a0f918SDevin Teske	pt.iso)                defaultitem="$msg_portuguese"              ;;
156d3a0f918SDevin Teske	pt.iso.acc)            defaultitem="$msg_portuguese_accent"       ;;
157d3a0f918SDevin Teske	ru.koi8-r)             defaultitem="$msg_russia_koi8_r"           ;;
158d3a0f918SDevin Teske	sk.iso2)               defaultitem="$msg_slovak"                  ;;
159d3a0f918SDevin Teske	si.iso)                defaultitem="$msg_slovenian"               ;;
160d3a0f918SDevin Teske	spanish.iso)           defaultitem="$msg_spanish"                 ;;
161d3a0f918SDevin Teske	spanish.iso.acc)       defaultitem="$msg_spanish_accent"          ;;
162d3a0f918SDevin Teske	swedish.cp850)         defaultitem="$msg_swedish_cp850"           ;;
163d3a0f918SDevin Teske	swedish.iso)           defaultitem="$msg_swedish_iso"             ;;
164d3a0f918SDevin Teske	swissfrench.cp850)     defaultitem="$msg_swiss_french_cp850"      ;;
165d3a0f918SDevin Teske	swissfrench.iso)       defaultitem="$msg_swiss_french_iso"        ;;
166d3a0f918SDevin Teske	swissfrench.iso.acc)   defaultitem="$msg_swiss_french_iso_accent" ;;
167d3a0f918SDevin Teske	swissgerman.cp850)     defaultitem="$msg_swiss_german_cp850"      ;;
168d3a0f918SDevin Teske	swissgerman.iso)       defaultitem="$msg_swiss_german_iso"        ;;
169d3a0f918SDevin Teske	swissgerman.iso.acc)   defaultitem="$msg_swiss_german_iso_accent" ;;
170d3a0f918SDevin Teske	uk.cp850)              defaultitem="$msg_uk_cp850"                ;;
171d3a0f918SDevin Teske	uk.iso)                defaultitem="$msg_uk_iso"                  ;;
172d3a0f918SDevin Teske	ua.koi8-u)             defaultitem="$msg_ukrainian_koi8_u"        ;;
173d3a0f918SDevin Teske	ua.koi8-u.shift.alt)   defaultitem="$msg_ukrainian_koi8_u_koi8_r" ;;
174*ab00ac32SDevin Teske	us.ctrl)               defaultitem="$msg_usa_capslock_ctrl"       ;;
175d3a0f918SDevin Teske	us.pc-ctrl)            defaultitem="$msg_usa_capslock_ctrl"       ;;
176d3a0f918SDevin Teske	us.dvorak)             defaultitem="$msg_usa_dvorak"              ;;
177d3a0f918SDevin Teske	us.dvorakl)            defaultitem="$msg_usa_dvorak_left"         ;;
178d3a0f918SDevin Teske	us.dvorakr)            defaultitem="$msg_usa_dvorak_right"        ;;
179d3a0f918SDevin Teske	us.emacs)              defaultitem="$msg_usa_emacs"               ;;
180d3a0f918SDevin Teske	us.iso)                defaultitem="$msg_usa_iso"                 ;;
181d3a0f918SDevin Teske	us.unix)               defaultitem="$msg_usa_unix"                ;;
182d3a0f918SDevin Teske	esac
183d3a0f918SDevin Teske
184d3a0f918SDevin Teske	# The defaultitem may have to be indented to match the menu_list
185d3a0f918SDevin Teske	if [ "$defaultitem" ]; then
186d3a0f918SDevin Teske		( eval set -- $menu_list
187d3a0f918SDevin Teske		  while [ $# -gt 0 ]; do
188d3a0f918SDevin Teske		  	[ "$defaultitem" = "$1" ] && break
189d3a0f918SDevin Teske		  	[ " $defaultitem" = "$1" ] && exit 0
190d3a0f918SDevin Teske		  	shift 2 # tag/item
191d3a0f918SDevin Teske		  done
192d3a0f918SDevin Teske		  exit 1 # No modification needed
193d3a0f918SDevin Teske		) && defaultitem=" $defaultitem"
194d3a0f918SDevin Teske	fi
195d3a0f918SDevin Teske
196fd962ac6SDevin Teske	local menu_choice
197fd962ac6SDevin Teske	menu_choice=$( eval $DIALOG \
198d3a0f918SDevin Teske		--title \"\$DIALOG_TITLE\"         \
199641a6cfbSDevin Teske		--backtitle \"\$DIALOG_BACKTITLE\" \
200641a6cfbSDevin Teske		--hline \"\$hline\"                \
201641a6cfbSDevin Teske		--ok-label \"\$msg_ok\"            \
202641a6cfbSDevin Teske		--cancel-label \"\$msg_cancel\"    \
203d3a0f918SDevin Teske		--default-item \"\$defaultitem\"   \
20474036c4dSDevin Teske		--menu \"\$prompt\"                \
20574036c4dSDevin Teske		$height $width $rows               \
206641a6cfbSDevin Teske		$menu_list                         \
20789498fdfSDevin Teske		2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
20889498fdfSDevin Teske	)
20989498fdfSDevin Teske	local retval=$?
210fd962ac6SDevin Teske	f_dialog_menutag_store -s "$menu_choice"
21189498fdfSDevin Teske	return $retval
212641a6cfbSDevin Teske}
213641a6cfbSDevin Teske
214641a6cfbSDevin Teske############################################################ MAIN
215641a6cfbSDevin Teske
216641a6cfbSDevin Teske# Incorporate rc-file if it exists
217641a6cfbSDevin Teske[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
218641a6cfbSDevin Teske
219641a6cfbSDevin Teske#
220641a6cfbSDevin Teske# Process command-line arguments
221641a6cfbSDevin Teske#
222c3755aa3SDevin Teskewhile getopts h$GETOPTS_STDARGS flag; do
223641a6cfbSDevin Teske	case "$flag" in
224641a6cfbSDevin Teske	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;;
225641a6cfbSDevin Teske	esac
226641a6cfbSDevin Teskedone
227641a6cfbSDevin Teskeshift $(( $OPTIND - 1 ))
228641a6cfbSDevin Teske
229641a6cfbSDevin Teske#
230641a6cfbSDevin Teske# Initialize
231641a6cfbSDevin Teske#
232641a6cfbSDevin Teskef_dialog_title "$msg_system_console_keymap"
233641a6cfbSDevin Teskef_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
234641a6cfbSDevin Teskef_mustberoot_init
235641a6cfbSDevin Teske
236641a6cfbSDevin Teske#
237641a6cfbSDevin Teske# Launch application main menu
238641a6cfbSDevin Teske#
239641a6cfbSDevin Teskewhile :; do
240fd962ac6SDevin Teske	dialog_menu_main || f_die
241fd962ac6SDevin Teske	f_dialog_menutag_fetch mtag
242641a6cfbSDevin Teske
243641a6cfbSDevin Teske	#
244641a6cfbSDevin Teske	# Reverse the users choice into the variable name
245641a6cfbSDevin Teske	#
246641a6cfbSDevin Teske	keymap_name=
247641a6cfbSDevin Teske	mtag="${mtag# }" # remove single leading-space if-present
248641a6cfbSDevin Teske	for name in $KEYMAP_NAMES; do
249d4ae33f0SDevin Teske		debug= f_getvar msg_$name msg
250d4ae33f0SDevin Teske		[ "$msg" = "$mtag" ] && keymap_name="$name" break
251641a6cfbSDevin Teske	done
252641a6cfbSDevin Teske
253641a6cfbSDevin Teske	[ "$keymap_name" ] || continue
254641a6cfbSDevin Teske
255a67f39c5SDevin Teske	keymap_to_set=
256641a6cfbSDevin Teske	case "$keymap_name" in
257a67f39c5SDevin Teske	belgian)                 keymap_to_set="be.iso"                ;;
258a67f39c5SDevin Teske	brazil_cp850)            keymap_to_set="br275.cp850"           ;;
259a67f39c5SDevin Teske	brazil_iso)              keymap_to_set="br275.iso"             ;;
260a67f39c5SDevin Teske	brazil_iso_accent)       keymap_to_set="br275.iso.acc"         ;;
261a67f39c5SDevin Teske	bulgarian_bds)           keymap_to_set="bg.bds.ctrlcaps"       ;;
262a67f39c5SDevin Teske	bulgarian_phonetic)      keymap_to_set="bg.phonetic.ctrlcaps"  ;;
263a67f39c5SDevin Teske	central_european_iso)    keymap_to_set="ce.iso2"               ;;
264a67f39c5SDevin Teske	croatian_iso)            keymap_to_set="hr.iso"                ;;
265a67f39c5SDevin Teske	czech_iso_accent)        keymap_to_set="cs.latin2.qwertz"      ;;
266a67f39c5SDevin Teske	danish_cp865)            keymap_to_set="danish.cp865"          ;;
267a67f39c5SDevin Teske	danish_iso)              keymap_to_set="danish.iso"            ;;
268a67f39c5SDevin Teske	estonian_cp850)          keymap_to_set="estonian.cp850"        ;;
269a67f39c5SDevin Teske	estonian_iso)            keymap_to_set="estonian.iso"          ;;
270a67f39c5SDevin Teske	estonian_iso_15)         keymap_to_set="estonian.iso15"        ;;
271a67f39c5SDevin Teske	finnish_cp850)           keymap_to_set="finnish.cp850"         ;;
272a67f39c5SDevin Teske	finnish_iso)             keymap_to_set="finnish.iso"           ;;
273a67f39c5SDevin Teske	french_iso)              keymap_to_set="fr.iso"                ;;
274a67f39c5SDevin Teske	french_iso_accent)       keymap_to_set="fr.iso.acc"            ;;
275a67f39c5SDevin Teske	french_iso_macbook)      keymap_to_set="fr.macbook.acc"        ;;
276a67f39c5SDevin Teske	german_cp850)            keymap_to_set="german.cp850"          ;;
277a67f39c5SDevin Teske	german_iso)              keymap_to_set="german.iso"            ;;
278a67f39c5SDevin Teske	greek_101)               keymap_to_set="gr.us101.acc"          ;;
279a67f39c5SDevin Teske	greek_104)               keymap_to_set="el.iso07"              ;;
280a67f39c5SDevin Teske	greek_elot)              keymap_to_set="gr.elot.acc"           ;;
281a67f39c5SDevin Teske	hungarian_101)           keymap_to_set="hu.iso2.101keys"       ;;
282a67f39c5SDevin Teske	hungarian_102)           keymap_to_set="hu.iso2.102keys"       ;;
283a67f39c5SDevin Teske	icelandic)               keymap_to_set="icelandic.iso"         ;;
284a67f39c5SDevin Teske	icelandic_accent)        keymap_to_set="icelandic.iso.acc"     ;;
285a67f39c5SDevin Teske	italian)                 keymap_to_set="it.iso"                ;;
286a67f39c5SDevin Teske	japanese_106)            keymap_to_set="jp.106"                ;;
287a67f39c5SDevin Teske	latin_american)          keymap_to_set="latinamerican"         ;;
288a67f39c5SDevin Teske	latin_american_accent)   keymap_to_set="latinamerican.iso.acc" ;;
289a67f39c5SDevin Teske	norway_iso)              keymap_to_set="norwegian.iso"         ;;
290a67f39c5SDevin Teske	polish_iso)              keymap_to_set="pl_PL.ISO8859-2"       ;;
291a67f39c5SDevin Teske	portuguese)              keymap_to_set="pt.iso"                ;;
292a67f39c5SDevin Teske	portuguese_accent)       keymap_to_set="pt.iso.acc"            ;;
293a67f39c5SDevin Teske	russia_koi8_r)           keymap_to_set="ru.koi8-r"             ;;
294a67f39c5SDevin Teske	slovak)                  keymap_to_set="sk.iso2"               ;;
295a67f39c5SDevin Teske	slovenian)               keymap_to_set="si.iso"                ;;
296a67f39c5SDevin Teske	spanish)                 keymap_to_set="spanish.iso"           ;;
297a67f39c5SDevin Teske	spanish_accent)          keymap_to_set="spanish.iso.acc"       ;;
298a67f39c5SDevin Teske	swedish_cp850)           keymap_to_set="swedish.cp850"         ;;
299a67f39c5SDevin Teske	swedish_iso)             keymap_to_set="swedish.iso"           ;;
300a67f39c5SDevin Teske	swiss_french_cp850)      keymap_to_set="swissfrench.cp850"     ;;
301a67f39c5SDevin Teske	swiss_french_iso)        keymap_to_set="swissfrench.iso"       ;;
302a67f39c5SDevin Teske	swiss_french_iso_accent) keymap_to_set="swissfrench.iso.acc"   ;;
303a67f39c5SDevin Teske	swiss_german_cp850)      keymap_to_set="swissgerman.cp850"     ;;
304a67f39c5SDevin Teske	swiss_german_iso)        keymap_to_set="swissgerman.iso"       ;;
305a67f39c5SDevin Teske	swiss_german_iso_accent) keymap_to_set="swissgerman.iso.acc"   ;;
306a67f39c5SDevin Teske	uk_cp850)                keymap_to_set="uk.cp850"              ;;
307a67f39c5SDevin Teske	uk_iso)                  keymap_to_set="uk.iso"                ;;
308a67f39c5SDevin Teske	ukrainian_koi8_u)        keymap_to_set="ua.koi8-u"             ;;
309a67f39c5SDevin Teske	ukrainian_koi8_u_koi8_r) keymap_to_set="ua.koi8-u.shift.alt"   ;;
310*ab00ac32SDevin Teske	usa_capslock_ctrl)
311*ab00ac32SDevin Teske		case "$( sysctl -n kern.vty )" in
312*ab00ac32SDevin Teske		vt)              keymap_to_set="us.ctrl"               ;;
313*ab00ac32SDevin Teske		*)               keymap_to_set="us.pc-ctrl"            ;;
314*ab00ac32SDevin Teske		esac
315*ab00ac32SDevin Teske		;;
316a67f39c5SDevin Teske	usa_dvorak)              keymap_to_set="us.dvorak"             ;;
317a67f39c5SDevin Teske	usa_dvorak_left)         keymap_to_set="us.dvorakl"            ;;
318a67f39c5SDevin Teske	usa_dvorak_right)        keymap_to_set="us.dvorakr"            ;;
319a67f39c5SDevin Teske	usa_emacs)               keymap_to_set="us.emacs"              ;;
320a67f39c5SDevin Teske	usa_iso)                 keymap_to_set="us.iso"                ;;
321a67f39c5SDevin Teske	usa_unix)                keymap_to_set="us.unix"               ;;
322641a6cfbSDevin Teske	esac
323a67f39c5SDevin Teske
324a67f39c5SDevin Teske	if [ "$keymap_to_set" ]; then
325d4ae33f0SDevin Teske		f_eval_catch "$0" f_sysrc_set \
326d4ae33f0SDevin Teske			'f_sysrc_set keymap "%s"' "$keymap_to_set" || f_die
327a67f39c5SDevin Teske		break
328a67f39c5SDevin Teske	else
3298de4fc8dSDevin Teske		f_die 1 "$msg_unknown_keymap"
330a67f39c5SDevin Teske	fi
331641a6cfbSDevin Teskedone
332641a6cfbSDevin Teske
333641a6cfbSDevin Teskeexit $SUCCESS
334641a6cfbSDevin Teske
335641a6cfbSDevin Teske################################################################################
336641a6cfbSDevin Teske# END
337641a6cfbSDevin Teske################################################################################
338