[comp.windows.x] Solution Summary: Emulating a VT100 keypad in X

chai@hawk.cs.ukans.edu (Ian Chai) (04/25/91)

Ok, I got requests to post a summary of the methods to do the
X -> vt100 keymap.

I got three methods: 
	1) Modifying xterm* stuff in .Xdefaults
	2) Using xmodmap
	3) Using a custom program someone wrote

Method 1: (Thanks to Alan Sengillo)
Add the following to your .Xdefaults. When you press the "L1" key the keypad
will emulate a vt100 keypad. When you press "L1" again, it will go back to it
orginal settings. I hope this helps.

xterm*sunFunctionKeys:		true
xterm*VT100.Translations: \
#override <Key>L1: keymap(VT100)
!
!! Define keymapping for VT100
!!
!! SUN Key  VT100 Key
!!   R1		PF1
!!   R2		PF2
!!   R3		PF3
!!   F7		PF4
!!   R13	KP0
!!   R10(Left)	KP1
!!   R11	KP2
!!   R12(Right)	KP3
!!   R7		KP4
!!   R8(Up)	KP5
!!   R9		KP6
!!   R4		KP7
!!   R5		KP8
!!   R6		KP9
!!   R15	ENTER
!!   F8		KP -
!!   F9		KP ,
!!   R14(Down)	KP .
!!   F3		Up Arrow
!!   F4		Down Arrow
!!   F5		Left Arrow
!!   F6		Right Arrow
!
xterm*VT100.VT100Keymap.translations: \
<Key>L1:    keymap(None) \n\
<Key>R1:    string("0x01b") string("OP") \n\
<Key>R2:    string("0x01b") string("OQ") \n\
<Key>R3:    string("0x01b") string("OR") \n\
<Key>F7:    string("0x01b") string("OS") \n\
<Key>R13:   string("0x01b") string("Op") \n\
<Key>Left:  string("0x01b") string("Oq") \n\
<Key>R11:   string("0x01b") string("Or") \n\
<Key>Right: string("0x01b") string("Os") \n\
<Key>R7:    string("0x01b") string("Ot") \n\
<Key>Up:    string("0x01b") string("Ou") \n\
<Key>R9:    string("0x01b") string("Ov") \n\
<Key>R4:    string("0x01b") string("Ow") \n\
<Key>R5:    string("0x01b") string("Ox") \n\
<Key>R6:    string("0x01b") string("Oy") \n\
<Key>R15:   string("0x01b") string("OM") \n\
<Key>F8:    string("0x01b") string("Om") \n\
<Key>F9:    string("0x01b") string("Ol") \n\
<Key>Down:  string("0x01b") string("On") \n\
<Key>F3:    string("0x01b") string("OA") \n\
<Key>F4:    string("0x01b") string("OB") \n\
<Key>F5:    string("0x01b") string("OD") \n\
<Key>F6:    string("0x01b") string("OC")

Method 2 (Thanks to Jim Pflugrath)
Feed this file to xmodmap:
===cut here==
! Last modified: 9-Sep-1990
!
! Input file for xmodmap.  This file is used to re-map a Sun4 right keypad
! into a VT100 style right keypad.
!
! See 'man xmodmap' for more details.
!
! Usage:  xmodmap this_file
!
!        +-------+-------+-------+-------+
! Keycode|  28   |   29  |  30   |  105  |
!        |       |       |       |       |
!  VT100 |  <-   |   ->  |   ,   |Nm_Lock|
!        +-------+-------+-------+-------+
!        |  52   |   53  |  54   |   78  |
!        |       |       |       |       |
!        |  PF1  |  PF2  |  PF3  |  PF4  |
!        +-------+-------+-------+-------+
!        |  75   |   76  |  77   |  132  |
!        |       |       |       |       |
!        |   7   |    8  |   9   |   -   |    Shift 8 is Up
!        +-------+-------+-------+       |    Shift 4 is Left
!        |  98   |   99  | 100   |       |    Shift 6 is Right
!        |       |       |       |   ,   |    Shift 2 is Down
!        |   4   |    5  |   6   |       |
!        +-------+-------+-------+-------+    To get the Sun4 keys as labelled
!        | 119   |  120  | 121   |   97  |    on the keypad be sure that
!        |       |       |       |       |    Num_Lock is engaged (except for
!        |   1   |    2  |   3   |   E   |    the + key.
!        +-------+-------+-------+   n   |
!        |      101      |  57   |   t   |
!        |               |       |   e   |
!        |       0       |   .   |   r   |
!        +---------------+-------+-------+
!     
keycode 28 = Left
keycode	29 = Right
keycode 30 = KP_Separator comma
keycode 52 = KP_F1  KP_Equal
keycode 53 = KP_F2  KP_Divide
keycode 54 = KP_F3  KP_Multiply
keycode 78 = KP_F4  KP_Subtract
!
! The Sun4 + key is really 2 VT100 keys: , and - so use the Shift modifier
! to mimic this.  This means the loss of the normal Sun4 function
!
keycode 132 = KP_Separator KP_Subtract KP_Add
keycode 75 = KP_7
keycode 76 = KP_8 Up
keycode 77 = KP_9
keycode 98 = KP_4 Left
keycode 99 = KP_5
keycode 100 = KP_6 Right
keycode 119 = KP_1
keycode 120 = KP_2 Down
keycode 121 = KP_3
keycode 101 = KP_0
keycode 57 = KP_Decimal
keycode 97 = KP_Enter
======cut here========
Note: This is the method I used, except I didn't use this file as
I had a different keyboard, and so I used xev to figure out the
appropriate keycodes for my keyboard.


Method 3a: (Thanks to Bruce Barnett)

use vtttool. get it from titan.rice.edu under the name
sun-sources/vttool.shar.?

It provides keypads two ways:
	it adds a panel next to a tty window that has mouse clickable
buttons in it.
	It also suports keyboard remapping in a per-window basis.

xvttool is
	written by Bruce
	only does ASCII emulation (it uses termcap)
	uses XView

Method 3b: (Thanks to Bob Mende Pie)

  Bob has written a *hack* of a script that will define keyboard translations
for all xterms that are invoked after this script is run.   It works on type
2,3 and 4 keyboards.   It allows dynamid switching of numeric, sun, arrow, or
DEC application keypad.   It is available for anonymous ftp in
athos.rutgers.edu /pub/xkeypad.shar

-- 
Ian Chai                     | "God loves you just  the way you are,  but
Internet: chai@cs.ukans.edu  | He loves you too much to let you stay that
  Bitnet: 2fntnougat@ukanvax | way."                   - Harry Poindexter
I don't believe in flaming. If I appear to be flaming, either (a) it's an