| | 2293 | @node Event Mod |
|---|
| | 2294 | @subsection Modifying and Translating Input Events |
|---|
| | 2295 | |
|---|
| | 2296 | Emacs modifies every event it reads according to |
|---|
| | 2297 | @code{extra-keyboard-modifiers}, then translates it through |
|---|
| | 2298 | @code{keyboard-translate-table} (if applicable), before returning it |
|---|
| | 2299 | from @code{read-event}. |
|---|
| | 2300 | |
|---|
| | 2301 | @c Emacs 19 feature |
|---|
| | 2302 | @defvar extra-keyboard-modifiers |
|---|
| | 2303 | This variable lets Lisp programs ``press'' the modifier keys on the |
|---|
| | 2304 | keyboard. The value is a character. Only the modifiers of the |
|---|
| | 2305 | character matter. Each time the user types a keyboard key, it is |
|---|
| | 2306 | altered as if those modifier keys were held down. For instance, if |
|---|
| | 2307 | you bind @code{extra-keyboard-modifiers} to @code{?\C-\M-a}, then all |
|---|
| | 2308 | keyboard input characters typed during the scope of the binding will |
|---|
| | 2309 | have the control and meta modifiers applied to them. The character |
|---|
| | 2310 | @code{?\C-@@}, equivalent to the integer 0, does not count as a control |
|---|
| | 2311 | character for this purpose, but as a character with no modifiers. |
|---|
| | 2312 | Thus, setting @code{extra-keyboard-modifiers} to zero cancels any |
|---|
| | 2313 | modification. |
|---|
| | 2314 | |
|---|
| | 2315 | When using a window system, the program can ``press'' any of the |
|---|
| | 2316 | modifier keys in this way. Otherwise, only the @key{CTL} and @key{META} |
|---|
| | 2317 | keys can be virtually pressed. |
|---|
| | 2318 | |
|---|
| | 2319 | Note that this variable applies only to events that really come from |
|---|
| | 2320 | the keyboard, and has no effect on mouse events or any other events. |
|---|
| | 2321 | @end defvar |
|---|
| | 2322 | |
|---|
| | 2323 | @defvar keyboard-translate-table |
|---|
| | 2324 | This variable is the translate table for keyboard characters. It lets |
|---|
| | 2325 | you reshuffle the keys on the keyboard without changing any command |
|---|
| | 2326 | bindings. Its value is normally a char-table, or else @code{nil}. |
|---|
| | 2327 | (It can also be a string or vector, but this is considered obsolete.) |
|---|
| | 2328 | |
|---|
| | 2329 | If @code{keyboard-translate-table} is a char-table |
|---|
| | 2330 | (@pxref{Char-Tables}), then each character read from the keyboard is |
|---|
| | 2331 | looked up in this char-table. If the value found there is |
|---|
| | 2332 | non-@code{nil}, then it is used instead of the actual input character. |
|---|
| | 2333 | |
|---|
| | 2334 | Note that this translation is the first thing that happens to a |
|---|
| | 2335 | character after it is read from the terminal. Record-keeping features |
|---|
| | 2336 | such as @code{recent-keys} and dribble files record the characters after |
|---|
| | 2337 | translation. |
|---|
| | 2338 | |
|---|
| | 2339 | Note also that this translation is done before the characters are |
|---|
| | 2340 | supplied to input methods (@pxref{Input Methods}). Use |
|---|
| | 2341 | @code{translation-table-for-input} (@pxref{Translation of Characters}), |
|---|
| | 2342 | if you want to translate characters after input methods operate. |
|---|
| | 2343 | @end defvar |
|---|
| | 2344 | |
|---|
| | 2345 | @defun keyboard-translate from to |
|---|
| | 2346 | This function modifies @code{keyboard-translate-table} to translate |
|---|
| | 2347 | character code @var{from} into character code @var{to}. It creates |
|---|
| | 2348 | the keyboard translate table if necessary. |
|---|
| | 2349 | @end defun |
|---|
| | 2350 | |
|---|
| | 2351 | Here's an example of using the @code{keyboard-translate-table} to |
|---|
| | 2352 | make @kbd{C-x}, @kbd{C-c} and @kbd{C-v} perform the cut, copy and paste |
|---|
| | 2353 | operations: |
|---|
| | 2354 | |
|---|
| | 2355 | @example |
|---|
| | 2356 | (keyboard-translate ?\C-x 'control-x) |
|---|
| | 2357 | (keyboard-translate ?\C-c 'control-c) |
|---|
| | 2358 | (keyboard-translate ?\C-v 'control-v) |
|---|
| | 2359 | (global-set-key [control-x] 'kill-region) |
|---|
| | 2360 | (global-set-key [control-c] 'kill-ring-save) |
|---|
| | 2361 | (global-set-key [control-v] 'yank) |
|---|
| | 2362 | @end example |
|---|
| | 2363 | |
|---|
| | 2364 | @noindent |
|---|
| | 2365 | On a graphical terminal that supports extended @acronym{ASCII} input, |
|---|
| | 2366 | you can still get the standard Emacs meanings of one of those |
|---|
| | 2367 | characters by typing it with the shift key. That makes it a different |
|---|
| | 2368 | character as far as keyboard translation is concerned, but it has the |
|---|
| | 2369 | same usual meaning. |
|---|
| | 2370 | |
|---|
| | 2371 | @xref{Translation Keymaps}, for mechanisms that translate event sequences |
|---|
| | 2372 | at the level of @code{read-key-sequence}. |
|---|
| | 2373 | |
|---|