Want a "meta" key for Gnu emacs on 4D's
Scott Henry
scotth at sgi.com
Mon May 8 19:02:17 AEST 1989
mecklen%gr.utah.edu at wasatch.utah.edu (Robert Mecklenburg) requests:
> We run Gnu emacs on personal irises and a 4D/140GT. The editor works well
> (although we haven't bothered to compile in job control), but lacks a meta key.
> Here's what we've found:
> ... [stuff deleted] ...
> So the question is: Is there any way to get a "real" meta key?
Several months ago, someone (I'm sorry, but I lost the reference) dug deep
into the 4Sight code and figured out how to make the ALT keys into META
keys (and also make the CAPS-LOCK into a CTRL key where it belongs).
The basic instructions are: patch the following diff file against
/usr/NeWS/lib/NeWS/UI.ps, and put it in ~/NeWS (since you don't want to
mess up your real UI.ps, and 4Sight looks in ~/NeWS before
/usr/NeWS/lib/NeWS for loading code). I am also including the entries in
my ~/user.ps which implement the key mappings.
--------------- UI.ps.diff -----------------------------
*** /usr/NeWS/lib/NeWS/UI.ps Thu Mar 9 16:51:01 1989
--- ~/NeWS/UI.ps Wed Mar 8 09:39:49 1989
***************
*** 318,326 ****
--- 318,358 ----
} ifelse
} def
+ % new code for meta key
+ /MetaDown false def % true when either alt key is down
+
+ {
+ createevent dup begin % gobble alt key
+ % Do not eat the right ctrl key.
+ % We will need it to swap with capslock
+ % in user.ps.
+ /Name [28419 28560 28559] def % first one is left ctrl key
+ /Priority 4 def
+ /Exclusivity true def
+ end
+ expressinterest
+ {
+ awaitevent
+ dup /Action get /DownTransition eq
+ {/MetaDown true store} % downtrans -> set flag
+ {/MetaDown false store} % uptrans -> clear flag
+ ifelse
+ } loop
+ } fork
+ %end new code
+
/deliver_keyboard_to_focus { % event => -
dup dup begin % ev ev
sgi_translatekey % ev (string)
+ % new code for meta key
+ dup dup type /stringtype eq % if there's a string
+ exch length 0 ne and % of nonzero length
+ MetaDown and % and meta is down
+ Action /DownTransition eq and % and ev is a keypress
+ {dup dup 0 get 128 or % then ior 128 into
+ 0 exch put % the 1st char in the string
+ } if
+ % end new code
/ClientData exch def % ev
end
InteractionLock monitorlocked MenuBusy 0 ne or {
----------------- end UI.ps.diff -------------------------
Here are the relevant parts of my ~/user.ps
------------------ ~/user.ps -------------------------
%
% User customization file.
%
% 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
%
% customizations
%
/RestartActions [
{ [ 28420 ] [ 28561 ] replacekeys }
% other startup actions here
] def
------------------------ end of ~/user.ps -------------------
I have been using these patches for several months on a 4D70G under IRIX
3.1 and 3.1D and now have full Meta-key access to GNUEmacs. This posted
code will map both ALT keys and the left CTRL key to work as Meta-keys,
and maps the CAPS-Lock and right CTRL keys as CTRL keys. Note that you no
longer have a Caps-Lock key after these modifications. (I almost never use
it, so I don't miss it). Note that this modification only works when in
4Sight (since it is done in the NeWS server), and the keyboard has normal
functionality when in NOGRAPHICS mode...
Disclaimer: these are my own modifications to SGI-supplied code based upon
previously posted public domain code. No warranty is expressed or implied.
It works for me!
--
---------------------
Scott Henry <scotth at sgi.com>
#include <std_disclaimer.h>
More information about the Comp.sys.sgi
mailing list