There are several ways to change key
bindings in NEdit. The easiest way to add a new key
binding in NEdit is to define a macro in Menu. However, if you want to change
existing bindings or add a significant number of new
key bindings you will need to do so via X resources.
Before reading this section, you must
understand how to set X resources (see the section
titled "X
Resources" above). Since setting X resources
is tricky, it is also helpful when working on key-binding,
to set some easier-to-verify resource at the same
time, as a simple check that the NEdit program is
actually seeing your changes. The appres program is
also very helpful in checking that the resource settings
that you make, actually reach the program for which
they are intended in the correct form.
Key Binding in General
Keyboard commands are associated with
editor action routines through two separate mechanisms
in NEdit. Commands which appear in pull-down menus
have individual resources designating a keyboard equivalent
to the menu command, called an accelerator key. Commands
which do not have an associated menu item are bound
to keys via the X toolkit translation mechanism. The
methods for changing these two kinds of bindings are
quite different.
Key Binding Via Translations
The most general way to bind actions
to keys in NEdit is to use the translation table associated
with the text widget. To add a binding to Alt+Y
to insert the string "Hi!", for example,
add lines similar to the following to your X resource
file:
NEdit*text.Translations:
#override \n\
Alt<Key>y: insert_string("Hi!")
\n
The section "Action
routines" above lists the actions available
to be bound.
Translation tables map key and mouse
presses, window operations, and other kinds of events,
to actions. The syntax for translation tables is simplified
here, and you. may need to refer to a book on the
X window system for more detailed information.
Note that accelerator resources (discussed
below) override translations, and that most Ctrl+letter
and Alt+letter combinations are already
bound to an accelerator key. To use one of these combinations
from a translation table, therefore, you must first
un-bind the original menu accelerator.
A resource for changing a translation
table consists of a keyword; #override,
#augment, or #replace;
followed by lines (separated by newline characters)
pairing events with actions. Events begin with modifiers,
like Ctrl, Shift, or Alt,
followed by the event type in <>. BtnDown,
Btn1Down, Btn2Down, Btn1Up,
Key, KeyUp are valid event types.
For key presses, the event type is followed by the
name of the key. You can specify a combination of
events, such as a sequence of key presses, by separating
them with commas. The other half of the event/action
pair is a set of actions. These are separated from
the event specification by a colon and from each other
by spaces. Actions are names followed by parentheses,
optionally containing one or more parameters separated
by comas.
Changing Menu Accelerator Keys
The menu shortcut keys shown at the
right of NEdit menu items can also be changed via
X resources. Each menu item has two resources associated
with it, accelerator, the event to trigger the menu
item; and acceleratorText, the string shown in the
menu. The form of the accelerator resource is the
same as events for translation table entries discussed
above, though multiple keys and other subtleties are
not allowed. The resource name for a menu is the title
in lower case, followed by "Menu", the resource
name of menu item is the name in lower case, run together,
with words separated by caps, and all punctuation
removed. For example, to change Cut to Ctrl+X,
you would add the following to your .Xdefaults file:
nedit*editMenu.cut.accelerator:
Ctrl<Key>x
nedit*editMenu.cut.acceleratorText: Ctrl+X
Accelerator keys with optional shift
key modifiers, like ,
have an
additional accelerator resource with Shift
appended to the name. For example:
nedit*searchMenu.find.acceleratorText: [Shift]Alt+F
nedit*searchMenu.find.accelerator: Alt<Key>f
nedit*searchMenu.findShift.accelerator: Shift
Alt<Key>f
|