more flexible key remapping

Eric Pettersen%CGL pett at socrates.ucsf.edu
Fri Jan 27 05:09:24 AEST 1989


	Earlier, I posted some code to swap the functionality of the Caps Lock
and left-hand Ctrl key.  I have now written some code to make key remapping
more flexible.  This code is also better because Caps Lock was still Caps Lock
for an instant in the old code.  It not does function as Caps Lock at all in
this code.  If you put the following in your user.ps (and take out the stuff I
sent out before, if you have it), you can make any IRIS key behave as any
other.  This will only work under 3.1 however, so if you haven't upgraded, you
may want to keep the old code until you do upgrade.
-----

/replacekeys { % origkeyvals_array changedkeyvals_array -> -
        {
                /changedvals exch def
                /origvals exch def
                /keysdict origvals length dict def
                keysdict begin
                        0 1 origvals length 1 sub {
                                dup origvals exch get changedvals
                                3 2 roll get def
                        } for
                end
                createevent dup begin
                        /Name origvals def
                        /Priority 2 def
                        /Exclusivity true def
                end
                expressinterest
                {
                        awaitevent dup dup begin
                        /Name get keysdict exch get /Name exch def
                        end
                        redistributeevent
                } loop
        } fork pop pop pop
} def

-----
	Then, somewhere after this code in user.ps, you want to invoke it with
the appropiate arguments to have the keys you want changed.  For example, in
my user.ps I have:

	 [ 28420 28471 28562 ] [ 28419 28423 28471 ] replacekeys

This causes key number 28420 behave as 28419, key number 28471 to behave as key
number 28423, and key number 28562 to behave as key number 28471. [Caps Lock as
Ctrl, ~/` as Escape, and F1 as ~/`].

In general

	[ a1 b1 c1 ... ] [ a2 b2 c2 ... ] replacekeys

makes key a1 behave as key a2, b1 as b2, c1 as c2, etc.

I also have code that allows remapping *parts* of keys (i.e. swap ~ and Escape,
leaving backquote where it is), but that code is less elegant.  Mail me if
you want that functionality.

			Eric Pettersen
			pett at cgl.ucsf.edu
			...!ucbvax!ucsfcgl!pett


Here are the keys and their corresponding numbers (from left to right and
top to bottom on keyboard):

28423	Escape
28562	F1
28563	F2
28564	F3
28565	F4
28566	F5
28567	F6
28568	F7
28569	F8
28570	F9
28571	F10
28572	F11
28573	F12
28574	Print Screen
28575	Scroll Lock
28576	Pause
28471	` and ~
28424	1 and !
28430	2 and @
28431	3 and #
28438	4 and $
28439	5 and %
28446	6 and ^
28447	7 and &
28454	8 and *
28455	9 and (
28462	0 and )
28463	- and _
28470	= and +
28477	Backspace
28577	Insert
28578	Home
28579	Page Up
28582	Keypad Num Lock
28583	Keypad /
28584	Keypad *
28492	Keypad -
28425	Tab and Backtab
28426	q
28432	w
28433	e
28440	r
28441	t
28448	y
28449	u
28456	i
28457	o
28464	p
28465	[ and {
28472	] and }
28473	\ and |
28478	Delete
28580	End
28581	Page Down
28483	Keypad 7
28484	Keypad 8
28491	Keypad 9
28585	Keypad +
28420	Caps Lock
28427	a
28428	s
28434	d
28435	f
28442	g
28443	h
28450	j
28451	k
28458	l
28459	; and :
28466	' and "
28467	Enter
28479	Keypad 4
28485	Keypad 5
28486	Keypad 6
28422	Shift (left side)
28436	z
28437	x
28444	c
28445	v
28452	b
28453	n
28460	m
28461	, and <
28468	. and >
28469	/ and ?
28421	Shift (right side)
28497	uparrow
28474	Keypad 1
28480	Keypad 2
28481	Keypad 3
28498	Keypad Enter
28419	Ctrl (left side)
28559	Alt (left side)
28499	Spacebar
28560	Alt (right side)
28561	Ctrl (right side)
28489	leftarrow
28490	downarrow
28496	rightarrow
28475	Keypad 0
28482	Keypad .



More information about the Comp.sys.sgi mailing list