bin/162175: [patch] bsdinstall: add keymap selection loop and testing

Warren Block wblock at wonkity.com
Sun Oct 30 20:20:09 UTC 2011


>Number:         162175
>Category:       bin
>Synopsis:       [patch] bsdinstall: add keymap selection loop and testing
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Oct 30 20:20:09 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Warren Block
>Release:        FreeBSD-9
>Organization:
>Environment:
FreeBSD machine3.example.com 9.0-BETA3 FreeBSD 9.0-BETA3 #0: Sat Sep 24 21:31:28 UTC 2011     root at farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
The existing bsdinstall keymap script gives the user one chance to choose the right keymap, and no way to test whether the one chosen matches the physical keyboard.

The patch modifies the keymap script to show the current keymap, test it, or pick a different one.  This option loops until the user selects "OK, use this keymap".
>How-To-Repeat:

>Fix:
Apply patch.

Patch attached with submission follows:

--- usr.sbin/bsdinstall/scripts/keymap.orig	2011-10-10 07:57:35.000000000 -0600
+++ usr.sbin/bsdinstall/scripts/keymap	2011-10-23 07:30:15.000000000 -0600
@@ -26,10 +26,53 @@
 #
 # $FreeBSD: src/usr.sbin/bsdinstall/scripts/keymap,v 1.2.2.2 2011/10/10 13:57:35 nwhitehorn Exp $
 
+: ${DIALOG_OK=0}
+: ${DIALOG_CANCEL=1}
+: ${DIALOG_EXTRA=3}
+: ${DIALOG_ESC=255}
+
+keymapfile="$BSDINSTALL_TMPETC/rc.conf.keymap"
+mapdescfile="/usr/share/syscons/keymaps/INDEX.keymaps"
+
 kbdcontrol -d >/dev/null 2>&1
 if [ $? -eq 0 ]; then
-	dialog --backtitle "FreeBSD Installer" --title "Keymap Selection" \
-	    --yesno "Would you like to set a non-default key mapping for your keyboard?" 0 0 || exit 0
 	exec 3>&1
-	kbdmap 2>&1 1>&3 | grep 'keymap=' > $BSDINSTALL_TMPETC/rc.conf.keymap
+	while : ; do
+		if [ -s "$keymapfile" ]; then
+			keymap=`sed -e 's/keymap=\(.*\)/\1/' "$keymapfile"`
+			mapdesc=`grep -m1 $keymap: $mapdescfile \
+			| sed -e "s/$keymap:.*://"`
+		else
+			mapdesc="default"
+		fi
+		
+		trap 'rm $keymapfile; exit 1' SIGINT
+		
+		dialog --backtitle "FreeBSD Installer" \
+		    --title "Keymap Selection" \
+		    --ok-label "OK, use this keymap" \
+		    --cancel-label "Pick different keymap" \
+		    --extra-button --extra-label "Test this keymap" \
+		    --yesno "The current keyboard mapping is:\n$mapdesc" 0 0
+		
+		case $? in
+		${DIALOG_OK})
+			break
+			;;
+		${DIALOG_ESC})
+			rm "$keymapfile"
+			break
+			;;
+		${DIALOG_CANCEL})
+			kbdmap 2>&1 1>&3 \
+			| grep 'keymap=' > "$keymapfile"
+			;;
+		${DIALOG_EXTRA})
+			keymaptest=`dialog --backtitle "FreeBSD Installer" \
+			    --title "Test keymap" \
+			    --no-cancel \
+			    --inputbox "Test the keymap by typing letters, numbers, and symbols.  Characters should match the labels on the keyboard keys.\nPress Enter to stop testing." 0 0 2>&1 1>&3`
+			;;
+		esac
+	done
 fi


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list