Mercurial > hg > xemacs-beta
diff man/xemacs/keystrokes.texi @ 428:3ecd8885ac67 r21-2-22
Import from CVS: tag r21-2-22
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:28:15 +0200 |
parents | |
children | 8de8e3f6228a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/xemacs/keystrokes.texi Mon Aug 13 11:28:15 2007 +0200 @@ -0,0 +1,516 @@ + +@node Keystrokes, Pull-down Menus, Frame, Top +@chapter Keystrokes, Key Sequences, and Key Bindings + +@iftex + This chapter discusses the character set Emacs uses for input commands +and inside files. You have already learned that the more frequently +used Emacs commands are bound to keys. For example, @kbd{Control-f} is +bound to @code{forward-char}. The following issues are covered: + +@itemize @bullet +@item +How keystrokes can be represented +@item +How you can create key sequences from keystrokes +@item +How you can add to the available modifier keys by customizing your +keyboard: for example, you could have the +@key{Capslock} key be understood as the @key{Super} key by Emacs. A +@key{Super} key is used like @key{Control} or @key{Meta} in that you hold +it while typing another key. +@end itemize + + You will also learn how to customize existing key bindings and +create new ones. +@end iftex + +@menu +* Intro to Keystrokes:: Keystrokes as building blocks of key sequences. +* Representing Keystrokes:: Using lists of modifiers and keysyms to + represent keystrokes. +* Key Sequences:: Combine key strokes into key sequences you can + bind to commands. +* String Key Sequences:: Available for upward compatibility. +* Meta Key:: Using @key{ESC} to represent @key{Meta} +* Super and Hyper Keys:: Adding modifier keys on certain keyboards. +* Character Representation:: How characters appear in Emacs buffers. +* Commands:: How commands are bound to key sequences. +@end menu + +@node Intro to Keystrokes, Representing Keystrokes, Keystrokes, Keystrokes +@section Keystrokes as Building Blocks of Key Sequences +@cindex character set +@cindex ASCII +@cindex keystroke + + Earlier versions of Emacs used only the ASCII character set, +which defines 128 different character codes. Some of these codes are +assigned graphic symbols like @samp{a} and @samp{=}; the rest are +control characters, such as @kbd{Control-a} (also called @kbd{C-a}). +@kbd{C-a} means you hold down the @key{CTRL} key and then press +@kbd{a}.@refill + + Keybindings in XEmacs are not restricted to the set of +keystrokes that can be represented in ASCII. XEmacs can tell the +difference between, for example, @kbd{Control-h}, @kbd{Control-Shift-h}, +and @kbd{Backspace}. + +@cindex modifier key +@cindex keysym +@kindex meta key +@kindex control key +@kindex hyper key +@kindex super key +@kindex shift key +@kindex button1 +@kindex button2 +@kindex button3 +@kindex button1up +@kindex button2up +@kindex button3up + + A keystroke is like a piano chord: you get it by simultaneously +striking several keys. To be more precise, a keystroke consists +of a possibly empty set of modifiers followed by a single +@dfn{keysym}. The set of modifiers is small; it consists of +@kbd{Control}, @kbd{Meta}, @kbd{Super}, @kbd{Hyper}, and @kbd{Shift}. + + The rest of the keys on your keyboard, along with the mouse buttons, +make up the set of keysyms. A keysym is usually what is printed on the +keys on your keyboard. Here is a table of some of the symbolic names +for keysyms: +@table @kbd +@item a,b,c... +alphabetic keys +@item f1,f2... +function keys +@item button1 +left mouse button +@item button2 +middle mouse button +@item button3 +right mouse button +@item button1up +upstroke on the left mouse button +@item button2up +upstroke on the middle mouse button +@item button3up +upstroke on the right mouse button +@item return +Return key +@end table + +@vindex keyboard-translate-table +Use the variable @code{keyboard-translate-table} only if you are on a +dumb tty, as it cannot handle input that cannot be represented as ASCII. +The value of this variable is a string used as a translate table for +keyboard input or @code{nil}. Each character is looked up in this +string and the contents used instead. If the string is of length +@code{n}, character codes @code{N} and up are untranslated. If you are +running Emacs under X, you should do the translations with the +@code{xmodmap} program instead. + + +@node Representing Keystrokes, Key Sequences, Intro to Keystrokes, Keystrokes +@comment node-name, next, previous, up +@subsection Representing Keystrokes +@kindex hyper key +@kindex super key +@findex read-key-sequence + + XEmacs represents keystrokes as lists. Each list consists of +an arbitrary combination of modifiers followed by a single keysym at the +end of the list. If the keysym corresponds to an ASCII character, you +can use its character code. (A keystroke may also be represented by an +event object, as returned by the @code{read-key-sequence} function; +non-programmers need not worry about this.) + +The following table gives some examples of how to list representations +for keystrokes. Each list consists of sets of modifiers followed by +keysyms: + +@table @kbd +@item (control a) +Pressing @key{CTRL} and @kbd{a} simultaneously. +@item (control ?a) +Another way of writing the keystroke @kbd{C-a}. +@item (control 65) +Yet another way of writing the keystroke @kbd{C-a}. +@item (break) +Pressing the @key{BREAK} key. +@item (control meta button2up) +Release the middle mouse button, while pressing @key{CTRL} and +@key{META}. +@end table +@cindex shift modifer + Note: As you define keystrokes, you can use the @kbd{shift} key only +as a modifier with characters that do not have a second keysym on the +same key, such as @kbd{backspace} and @kbd{tab}. It is an error to +define a keystroke using the @key{shift} modifier with keysyms such as +@kbd{a} and @kbd{=}. The correct forms are @kbd{A} and @kbd{+}. + +@node Key Sequences, String Key Sequences, Representing Keystrokes, Keystrokes +@subsection Representing Key Sequences + + A @dfn{complete key sequence} is a sequence of keystrokes that Emacs +understands as a unit. Key sequences are significant because you can +bind them to commands. Note that not all sequences of keystrokes are +possible key sequences. In particular, the initial keystrokes in a key +sequence must make up a @dfn{prefix key sequence}. + + Emacs represents a key sequence as a vector of keystrokes. Thus, the +schematic representation of a complete key sequence is as follows: + +@example + [(modifier .. modifer keysym) ... (modifier .. modifier keysym)] +@end example + + Here are some examples of complete key sequences: + +@table @kbd +@item [(control c) (control a)] +Typing @kbd{C-c} followed by @kbd{C-a} +@item [(control c) (control 65)] +Typing @kbd{C-c} followed by @kbd{C-a}. (Using the ASCII code +for the character `a')@refill +@item [(control c) (break)] +Typing @kbd{C-c} followed by the @kbd{break} character.@refill +@end table + +@kindex C-c +@kindex C-x +@kindex C-h +@kindex ESC +@cindex prefix key sequence + + A @dfn{prefix key sequence} is the beginning of a series of longer +sequences that are valid key sequences; adding any single keystroke to +the end of a prefix results in a valid key sequence. For example, +@kbd{control-x} is standardly defined as a prefix. Thus there is a +two-character key sequence starting with @kbd{C-x} for each valid +keystroke, giving numerous possibilities. Here are some samples: + +@itemize @bullet +@item +@kbd{[(control x) (c)]} +@item +@kbd{[(control x) (control c)]} +@end itemize + + Adding one character to a prefix key does not have to form a complete +key. It could make another, longer prefix. For example, @kbd{[(control +x) (\4)]} is itself a prefix that leads to any number of different +three-character keys, including @kbd{[(control x) (\4) (f)]}, +@kbd{[(control x) (\4) (b)]} and so on. It would be possible to define +one of those three-character sequences as a prefix, creating a series of +four-character keys, but we did not define any of them this way.@refill + + By contrast, the two-character sequence @kbd{[(control f) (control +k)]} is not a key, because the @kbd{(control f)} is a complete key +sequence in itself. You cannot give @kbd{[(control f (control k)]} an +independent meaning as a command while @kbd{(control f)} is a complete +sequence, because Emacs would understand @key{C-f C-k} as two +commands.@refill + + The predefined prefix key sequences in Emacs are @kbd{(control c)}, +@kbd{(control x)}, @kbd{(control h)}, @kbd{[(control x) (\4)]}, and +@kbd{escape}. You can customize Emacs and could make new prefix keys or +eliminate the default key sequences. @xref{Key Bindings}. For example, +if you redefine @kbd{(control f)} as a prefix, @kbd{[(control f) +(control k)]} automatically becomes a valid key sequence (complete, +unless you define it as a prefix as well). Conversely, if you remove +the prefix definition of @kbd{[(control x) (\4)]}, @kbd{[(control x) +(\4) (f)]} (or @kbd{[(control x) (\4) @var{anything}]}) is no longer a +valid key sequence. + +Note that the above paragraphs uses \4 instead of simply 4, because \4 +is the symbol whose name is "4", and plain 4 is the integer 4, which +would have been interpreted as the ASCII value. Another way of +representing the symbol whose name is "4" is to write ?4, which would be +interpreted as the number 52, which is the ASCII code for the character +"4". We could therefore actually have written 52 directly, but that is +far less clear. + +@node String Key Sequences, Meta Key, Key Sequences, Keystrokes +@comment node-name, next, previous, up +@subsection String Key Sequences +For backward compatibility, you may also represent a key sequence using +strings. For example, we have the following equivalent representations: + +@table @kbd +@item "\C-c\C-c" +@code{[(control c) (control c)]} +@item "\e\C-c" +@code{[(meta control c)]} +@end table + +@kindex LFD +@kindex TAB + +@node Meta Key, Super and Hyper Keys, String Key Sequences, Keystrokes +@comment node-name, next, previous, up +@subsection Assignment of the @key{META} Key + +@kindex META +@kindex ESC + Not all terminals have the complete set of modifiers. +Terminals that have a @key{Meta} key allow you to type Meta characters +by just holding that key down. To type @kbd{Meta-a}, hold down +@key{META} and press @kbd{a}. On those terminals, the @key{META} key +works like the @key{SHIFT} key. Such a key is not always labeled +@key{META}, however, as this function is often a special option for a +key with some other primary purpose.@refill + + If there is no @key{META} key, you can still type Meta characters +using two-character sequences starting with @key{ESC}. To enter +@kbd{M-a}, you could type @kbd{@key{ESC} a}. To enter @kbd{C-M-a}, you +would type @kbd{ESC C-a}. @key{ESC} is allowed on terminals with +Meta keys, too, in case you have formed a habit of using it.@refill + +If you are running under X and do not have a @key{META} key, it +is possible to reconfigure some other key to be a @key{META} +key. @xref{Super and Hyper Keys}. @refill + +@vindex meta-flag + Emacs believes the terminal has a @key{META} key if the variable +@code{meta-flag} is non-@code{nil}. Normally this is set automatically +according to the termcap entry for your terminal type. However, sometimes +the termcap entry is wrong, and then it is useful to set this variable +yourself. @xref{Variables}, for how to do this. + +Note: If you are running under the X window system, the setting of +the @code{meta-flag} variable is irrelevant. + +@node Super and Hyper Keys, Character Representation, Meta Key, Keystrokes +@comment node-name, next, previous, up +@subsection Assignment of the @key{SUPER} and @key{HYPER} Keys +@kindex hyper key +@kindex super key + + Most keyboards do not, by default, have @key{SUPER} or @key{HYPER} +modifier keys. Under X, you can simulate the @key{SUPER} or +@key{HYPER} key if you want to bind keys to sequences using @kbd{super} +and @kbd{hyper}. You can use the @code{xmodmap} program to do this. + + For example, to turn your @key{CAPS-LOCK} key into a @key{SUPER} key, +do the following: + + Create a file called @code{~/.xmodmap}. In this file, place the lines + +@example + remove Lock = Caps_Lock + keysym Caps_Lock = Super_L + add Mod2 = Super_L +@end example + +The first line says that the key that is currently called @code{Caps_Lock} +should no longer behave as a ``lock'' key. The second line says that +this should now be called @code{Super_L} instead. The third line says that +the key called @code{Super_L} should be a modifier key, which produces the +@code{Mod2} modifier. + +To create a @key{META} or @key{HYPER} key instead of a @key{SUPER} key, +replace the word @code{Super} above with @code{Meta} or @code{Hyper}. + +Just after you start up X, execute the command @code{xmodmap /.xmodmap}. +You can add this command to the appropriate initialization file to have +the command executed automatically.@refill + +If you have problems, see the documentation for the @code{xmodmap} +program. The X keyboard model is quite complicated, and explaining +it is beyond the scope of this manual. However, we reprint the +following description from the X Protocol document for your convenience: + +@cindex keysyms +@cindex keycode + + A list of keysyms is associated with each keycode. If that list +(ignoring trailing @code{NoSymbol} entries) is a single keysym @samp{K}, +then the list is treated as if it were the list +@code{``K NoSymbol K NoSymbol''}. If the list (ignoring trailing +@code{NoSymbol} entries) is a pair of keysyms @samp{K1 K2}, then the +list is treated as if it were the list @code{``K1 K2 K1 K2''}. If the +list (ignoring trailing @code{NoSymbol} entries) is a triple of keysyms +@samp{K1 K2 K3}, then the list is treated as if it were the list +@code{``K1 K2 K3 NoSymbol''}. + + The first four elements of the list are split into two groups of +keysyms. Group 1 contains the first and second keysyms; Group 2 contains +third and fourth keysyms. Within each group, if the second element of +the group is NoSymbol, then the group should be treated as if the second +element were the same as the first element, except when the first +element is an alphabetic keysym @samp{K} for which both lowercase and +uppercase forms are defined. In that case, the group should be treated +as if the first element were the lowercase form of @samp{K} and the second +element were the uppercase form of @samp{K}. + + The standard rules for obtaining a keysym from a KeyPress event make use of +only the Group 1 and Group 2 keysyms; no interpretation of other keysyms in +the list is given here. (That is, the last four keysyms are unused.) + + Which group to use is determined by modifier state. Switching between +groups is controlled by the keysym named @code{Mode_switch}. Attach that +keysym to some keycode and attach that keycode to any one of the +modifiers Mod1 through Mod5. This modifier is called the @dfn{group +modifier}. For any keycode, Group 1 is used when the group modifier is +off, and Group 2 is used when the group modifier is on. + + Within a group, which keysym to use is also determined by modifier +state. The first keysym is used when the @code{Shift} and @code{Lock} +modifiers are off. The second keysym is used when the @code{Shift} +modifier is on, or when the @code{Lock} modifier is on and the second +keysym is uppercase alphabetic, or when the @code{Lock} modifier is on +and is interpreted as @code{ShiftLock}. Otherwise, when the @code{Lock} +modifier is on and is interpreted as @code{CapsLock}, the state of the +@code{Shift} modifier is applied first to select a keysym, +but if that keysym is lower-case alphabetic, then the corresponding +upper-case keysym is used instead. + + In addition to the above information on keysyms, we also provide the +following description of modifier mapping from the InterClient +Communications Conventions Manual: + +@cindex modifier mapping + + X11 supports 8 modifier bits, of which 3 are pre-assigned to +@code{Shift}, @code{Lock}, and @code{Control}. Each modifier bit is +controlled by the state of a set of keys, and these sets are specified +in a table accessed by @code{GetModifierMapping()} and +@code{SetModifierMapping()}. + + A client needing to use one of the pre-assigned modifiers should assume +that the modifier table has been set up correctly to control these +modifiers. The @code{Lock} modifier should be interpreted as @code{Caps +Lock} or @code{Shift Lock} according to whether the keycodes in its +controlling set include @code{XK_Caps_Lock} or @code{XK_Shift_Lock}. + + Clients should determine the meaning of a modifier bit from the keysyms +being used to control it. + +A client needing to use an extra modifier, for example @code{Meta}, should: + +@enumerate +@item +Scan the existing modifier mappings. + +@enumerate +@item +If it finds a modifier that contains a keycode whose set of keysyms +includes @code{XK_Meta_L} or @code{XK_Meta_R}, it should use that +modifier bit. + +@item +If there is no existing modifier controlled by @code{XK_Meta_L} or +@code{XK_Meta_R}, it should select an unused modifier bit (one with +an empty controlling set) and: +@end enumerate + +@item +If there is a keycode with @code{XL_Meta_L} in its set of keysyms, +add that keycode to the set for the chosen modifier, and then: + +@enumerate +@item +If there is a keycode with @code{XL_Meta_R} in its set of keysyms, +add that keycode to the set for the chosen modifier, and then: + +@item +If the controlling set is still empty, interact with the user to +select one or more keys to be @code{Meta}. +@end enumerate + + +@item +If there are no unused modifier bits, ask the user to take corrective action. +@end enumerate + + This means that the @code{Mod1} modifier does not necessarily mean +@code{Meta}, although some applications (such as twm and emacs 18) +assume that. Any of the five unassigned modifier bits could mean +@code{Meta}; what matters is that a modifier bit is generated by a +keycode which is bound to the keysym @code{Meta_L} or @code{Meta_R}. + + Therefore, if you want to make a @key{META} key, the right way +is to make the keycode in question generate both a @code{Meta} keysym +and some previously-unassigned modifier bit. + +@node Character Representation, Commands, Super and Hyper Keys, Keystrokes +@comment node-name, next, previous, up +@section Representation of Characters + +This section briefly discusses how characters are represented in Emacs +buffers. @xref{Key Sequences}, for information on representing key +sequences to create key bindings. + + ASCII graphic characters in Emacs buffers are displayed with their +graphics. @key{LFD} is the same as a newline character; it is displayed +by starting a new line. @key{TAB} is displayed by moving to the next +tab stop column (usually every 8 spaces). Other control characters are +displayed as a caret (@samp{^}) followed by the non-control version of +the character; thus, @kbd{C-a} is displayed as @samp{^A}. Non-ASCII +characters 128 and up are displayed with octal escape sequences; thus, +character code 243 (octal), also called @kbd{M-#} when used as an input +character, is displayed as @samp{\243}. + +The variable @code{ctl-arrow} may be used to alter this behavior. +@xref{Display Vars}. + +@node Commands, , Character Representation, Keystrokes +@section Keys and Commands + +@cindex binding +@cindex customization +@cindex keymap +@cindex function +@cindex command + This manual is full of passages that tell you what particular keys do. +But Emacs does not assign meanings to keys directly. Instead, Emacs +assigns meanings to @dfn{functions}, and then gives keys their meanings +by @dfn{binding} them to functions. + + A function is a Lisp object that can be executed as a program. Usually +it is a Lisp symbol that has been given a function definition; every +symbol has a name, usually made of a few English words separated by +dashes, such as @code{next-line} or @code{forward-word}. It also has a +@dfn{definition}, which is a Lisp program. Only some functions can be the +bindings of keys; these are functions whose definitions use +@code{interactive} to specify how to call them interactively. Such +functions are called @dfn{commands}, and their names are @dfn{command +names}. More information on this subject will appear in the @i{XEmacs +Lisp Reference Manual}. + + The bindings between keys and functions are recorded in various tables +called @dfn{keymaps}. @xref{Key Bindings}, for more information on key +sequences you can bind commands to. @xref{Keymaps}, for information on +creating keymaps. + + When we say ``@kbd{C-n} moves down vertically one line'' we are +glossing over a distinction that is irrelevant in ordinary use but is +vital in understanding how to customize Emacs. The function +@code{next-line} is programmed to move down vertically. @kbd{C-n} +has this effect @i{because} it is bound to that function. If you rebind +@kbd{C-n} to the function @code{forward-word} then @kbd{C-n} will move +forward by words instead. Rebinding keys is a common method of +customization.@refill + + The rest of this manual usually ignores this subtlety to keep +things simple. To give the customizer the information needed, we often +state the name of the command that really does the work in parentheses +after mentioning the key that runs it. For example, we will say that +``The command @kbd{C-n} (@code{next-line}) moves point vertically +down,'' meaning that @code{next-line} is a command that moves vertically +down and @kbd{C-n} is a key that is standardly bound to it. + +@cindex variables + While we are on the subject of information for customization only, +it's a good time to tell you about @dfn{variables}. Often the +description of a command will say, ``To change this, set the variable +@code{mumble-foo}.'' A variable is a name used to remember a value. +Most of the variables documented in this manual exist just to facilitate +customization: some command or other part of Emacs uses the variable +and behaves differently depending on its setting. Until you are interested in +customizing, you can ignore the information about variables. When you +are ready to be interested, read the basic information on variables, and +then the information on individual variables will make sense. +@xref{Variables}.