Next: Windows Mouse, Previous: Windows HOME, Up: Microsoft Windows
This section describes the Windows-specific features related to keyboard input in Emacs.
Many key combinations (known as “keyboard shortcuts”) that have conventional uses in MS-Windows programs conflict with traditional Emacs key bindings. (These Emacs key bindings were established years before Microsoft was founded.) Examples of conflicts include C-c, C-x, C-z, C-a, and W-<SPC>. You can redefine some of them with meanings more like the MS-Windows meanings by enabling CUA Mode (see CUA Bindings).
By default, the key labeled <Alt> is mapped as the <META>
key. If you wish it to produce the Alt
modifier instead, set
the variable w32-alt-is-meta
to a nil
value.
MS-Windows reserves certain key combinations, such as
<Alt>-<TAB>, for its own use. These key combinations are
intercepted by the system before Emacs can see them. You can use the
w32-register-hot-key
function to allow a key sequence to be
seen by Emacs instead of being grabbed by Windows. This function
registers a key sequence as a hot key, overriding the special
meaning of that key sequence for Windows. (MS-Windows is told that
the key sequence is a hot key only when one of the Emacs windows has
focus, so that the special keys still have their usual meaning for
other Windows applications.)
The argument to w32-register-hot-key
must be a single key,
with or without modifiers, in vector form that would be acceptable to
define-key
. The meta modifier is interpreted as the <Alt>
key if w32-alt-is-meta
is t
(the default), and the hyper
modifier is always interpreted as the Windows key (usually labeled
with <start> and the Windows logo). If the function succeeds in
registering the key sequence, it returns the hotkey ID, a number;
otherwise it returns nil
.
For example, (w32-register-hot-key [M-tab])
lets you use
M-<TAB> normally in Emacs; for instance, to complete the word or
symbol at point at top level, or to complete the current search string
against previously sought strings during incremental search.
The function w32-unregister-hot-key
reverses the effect of
w32-register-hot-key
for its argument key sequence.
By default, the <CapsLock> key only affects normal character
keys (it converts lower-case characters to their upper-case
variants). However, if you set the variable
w32-capslock-is-shiftlock
to a non-nil
value, the
<CapsLock> key will affect non-character keys as well, as if you
pressed the <Shift> key while typing the non-character key.
If the variable w32-enable-caps-lock
is set to a nil
value, the <CapsLock> key produces the symbol capslock
instead of the shifted version of they keys. The default value is
t
.
Similarly, if w32-enable-num-lock
is nil
, the
<NumLock> key will produce the symbol kp-numlock
. The
default is t
, which causes <NumLock> to work as expected:
toggle the meaning of the keys on the numeric keypad.
The variable w32-apps-modifier
controls the effect of the
<Apps> key (usually located between the right <Alt> and the
right <Ctrl> keys). Its value can be one of the symbols
hyper
, super
, meta
, alt
, control
,
or shift
for the respective modifier, or nil
to appear
as the key apps
. The default is nil
.
The variable w32-lwindow-modifier
determines the effect of
the left Windows key (usually labeled with <start> and the Windows
logo). If its value is nil
(the default), the key will produce
the symbol lwindow
. Setting it to one of the symbols
hyper
, super
, meta
, alt
, control
,
or shift
will produce the respective modifier. A similar
variable w32-rwindow-modifier
controls the effect of the right
Windows key, and w32-scroll-lock-modifier
does the same for the
<ScrLock> key. If these variables are set to nil
, the
right Windows key produces the symbol rwindow
and <ScrLock>
produces the symbol scroll
.
Emacs compiled as a native Windows application normally turns off the Windows feature that tapping the <Alt> key invokes the Windows menu. The reason is that the <Alt> serves as <META> in Emacs. When using Emacs, users often press the <META> key temporarily and then change their minds; if this has the effect of bringing up the Windows menu, it alters the meaning of subsequent commands. Many users find this frustrating.
You can re-enable Windows's default handling of tapping the <Alt>
key by setting w32-pass-alt-to-system
to a non-nil
value.
The variables w32-pass-lwindow-to-system
and
w32-pass-rwindow-to-system
determine whether the respective
keys are passed to Windows or swallowed by Emacs. If the value is
nil
, the respective key is silently swallowed by Emacs,
otherwise it is passed to Windows. The default is t
for both
of these variables. Passing each of these keys to Windows produces
its normal effect: for example, <Lwindow> opens the
Start
menu, etc.1
The variable w32-recognize-altgr
controls whether the
<AltGr> key (if it exists on your keyboard), or its equivalent,
the combination of the right <Alt> and left <Ctrl> keys
pressed together, is recognized as the <AltGr> key. The default
is t
, which means these keys produce AltGr
; setting it
to nil
causes <AltGr> or the equivalent key combination to
be interpreted as the combination of <Ctrl> and <META>
modifiers.
[1]
Some combinations of the “Windows” keys with other keys are caught
by Windows at a low level in a way that Emacs currently cannot prevent.
For example, <Lwindow> r always pops up the Windows
‘Run’ dialog. Customizing the value of
w32-phantom-key-code
might help in some cases, though.