It has taken some effort, but I finally created a reasonable (and close-to-default) keyboard layout and mapping for Genera for using a modern, 87-key "tenkeyless" keyboard under Xquartz. I became reasonably familiar (at a reading level) with Flavors and Genera's X implementation while reverse engineering all this stuff. I also used the apropos
function a lot, of course.
This layout stays very close to the default one provided by Genera while adding a few tweaks such as:
- Improved modifier mappings
- Calling
RUBOUT
forBackspace/Delete
- Ability to use the
Keyboard Control
activity to further remap things visually
I also created a patch file that will fix an X-Windows bug in Genera with a modern X server when it tries to set the modifier mappings. This will show up in the Genera herald so you know it's there.
The keyboard layout is called :xquartz-87-tenkeyless
and nicely printed as Xquartz 87-key Tenkeyless
. A keyboard reference is available.
Xquartz must be configured with these three checkboxes set: (others are at your discretion)
You need to allow remote connections, so be sure to do something like xhost +
in your xterm
window.
Furthermore, you should put the Genera fonts into your X11 font path as described here or things will look "wrong" and be less enjoyable.
One note: There seems to be only 6-key rollover when using the Key Test
feature of Keyboard Control
. I'm not sure if this is an Xquartz limitation or Genera limitation, or something else. Regardless, it's sufficient for our needs. (Shift-hyper-meta-super-control-X
anyone? Can't add symbol
in there...
Use
To use the keyboard layout in Genera:
- Download the XLib patch file and Keyboard Mapping file from my GitHub repo
- Warning: these contain non-ASCII/Unicode characters in them (Genera symbol characters)
Load File xlib-patch.lisp
Load File xquartz-87.lisp
Save World ...
and update your boot file- Restart Genera
- Start your Xquartz Server and configure as above
Start X Screen INTERNET|10.10.10.10 ...
on your host IP or hostname (if configured in yourNamespace
)Show X Keyboard Mapping
will confirm that this mapping is in use by sayingThe keyboard layout type is :XQUARTZ-87-TENKEYLESS.
- If not, see below
Show Keyboard Layout
will show details on the layoutSelect Activity Keyboard Control
will let you remap things further to your hearts content, then put on the kill ring the modifications for yourlismp-init.lisp
file.
If your keyboard isn't working, it's probably because Genera couldn't match it. One thing to try is this:
Command: sys:*consoles*
(#<X-SCREEN::X-CONSOLE NEON:0.0 0 (Genera on ARGON) 140001042> #<MTB:MAC-RPC-MAIN-CONSOLE 140005535>)
Command: (xlib:display-vendor (x-screen::x-console-display (car sys:*consoles*)))
"The X.Org Foundation"
11803000
Command:
Then, edit the xquartz-87.lisp
file to match, in the signature:
(x-screen:define-keyboard-signature :xquartz-87-tenkeyless
(:keycode-offset 8
:vendor-name "The X.Org Foundation"
:vendor-version 11803000)
After that, check the keys against the output of your xmodmap -pk
to make sure they match. If not, you'll have to edit almost everything else. (xmodmap
will start with ...KeyCodes range from 8 to...
- that's where the :keycode-offset
comes from.)
Forcing the Keyboard Mapping to Be Used
UPDATE: I cobbled together the Set X Keyboard Mapping
for Genera 8.3 from a few pieces I found on the Internet. Load set-x-kb-map.lisp
into your world (save it if you want the command permanently) and then you can say Set X Keyboard Mapping [screen] Xquartz-87-Tenkeyless
and it will load this mapping.
Note about F14 and F15
F14 and F15 are usually set to lower and raise brightness on the Mac. Disable this in System Preferences -> Keyboard -> Shortcuts -> Display
Next Steps
I'm going to make an improved layout that better utilizes the keys and puts the most frequently accessed ones closer to the home key. Having SELECT
on the esc
key is also nice (and familiar from using the MacIvory on the console). I'll share that here later.
Pictures
Here are some screenshots of the keyboard in use on my iMac from the MacIvory III.