Commit 98659da6 authored by Kai Großjohann's avatar Kai Großjohann

(Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)

(Vx_super_keysym): New variables.
(syms_of_xterm): DEFVAR_LISP them.
(x_x_to_emacs_modifiers, x_emacs_to_x_modifiers): Use the
variables to determine which keys to use for the various
modifiers.
parent cad113ae
...@@ -396,6 +396,14 @@ The new variable `w32-pass-extra-mouse-buttons-to-system' controls ...@@ -396,6 +396,14 @@ The new variable `w32-pass-extra-mouse-buttons-to-system' controls
whether Emacs should handle the extra buttons itself (the default), or whether Emacs should handle the extra buttons itself (the default), or
pass them to Windows to be handled with system-wide functions. pass them to Windows to be handled with system-wide functions.
** Under X11, it is possible to swap Alt and Meta (and Super and Hyper).
The new variables `x-alt-keysym', `x-hyper-keysym', `x-meta-keysym',
and `x-super-keysym' can be used to choose which keysyms Emacs should
use for the modifiers. For example, the following two lines swap
Meta and Alt:
(setq x-alt-keysym 'meta)
(setq x-meta-keysym 'alt)
--- ---
** A French translation of the `Emacs Survival Guide' is available. ** A French translation of the `Emacs Survival Guide' is available.
......
2002-02-15 Kai Gro,A_(Bjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
* xterm.c (Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym)
(Vx_super_keysym): New variables.
(syms_of_xterm): DEFVAR_LISP them.
(x_x_to_emacs_modifiers, x_emacs_to_x_modifiers): Use the
variables to determine which keys to use for the various
modifiers.
2002-02-13 Kim F. Storm <storm@cua.dk> 2002-02-13 Kim F. Storm <storm@cua.dk>
* window.c: (Vmode_line_in_non_selected_windows): Removed. * window.c: (Vmode_line_in_non_selected_windows): Removed.
...@@ -94,7 +103,7 @@ ...@@ -94,7 +103,7 @@
* floatfns.c (Fround): Doc fix. * floatfns.c (Fround): Doc fix.
2002-02-08 Pavel Jan,Bm(Bk <Pavel@Janik.cz> 2002-02-08 Pavel Jan,Am(Bk <Pavel@Janik.cz>
* sysdep.c (init_system_name): Put unused variable `p' in #if 0. * sysdep.c (init_system_name): Put unused variable `p' in #if 0.
......
...@@ -396,7 +396,7 @@ struct gcpro *gcprolist; ...@@ -396,7 +396,7 @@ struct gcpro *gcprolist;
/* Addresses of staticpro'd variables. */ /* Addresses of staticpro'd variables. */
#define NSTATICS 1024 #define NSTATICS 1026
Lisp_Object *staticvec[NSTATICS] = {0}; Lisp_Object *staticvec[NSTATICS] = {0};
/* Index of next unused slot in staticvec. */ /* Index of next unused slot in staticvec. */
......
...@@ -381,6 +381,11 @@ extern int errno; ...@@ -381,6 +381,11 @@ extern int errno;
extern int extra_keyboard_modifiers; extern int extra_keyboard_modifiers;
/* The keysyms to use for the various modifiers. */
Lisp_Object Vx_alt_keysym, Vx_hyper_keysym, Vx_meta_keysym, Vx_super_keysym;
static Lisp_Object Qalt, Qhyper, Qmeta, Qsuper, Qmodifier_value;
static Lisp_Object Qvendor_specific_keysyms; static Lisp_Object Qvendor_specific_keysyms;
extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *)); extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
...@@ -6422,12 +6427,28 @@ x_x_to_emacs_modifiers (dpyinfo, state) ...@@ -6422,12 +6427,28 @@ x_x_to_emacs_modifiers (dpyinfo, state)
struct x_display_info *dpyinfo; struct x_display_info *dpyinfo;
unsigned int state; unsigned int state;
{ {
EMACS_UINT mod_meta = meta_modifier;
EMACS_UINT mod_alt = alt_modifier;
EMACS_UINT mod_hyper = hyper_modifier;
EMACS_UINT mod_super = super_modifier;
Lisp_Object tem;
tem = Fget (Vx_alt_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_alt = XUINT (tem);
tem = Fget (Vx_meta_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_meta = XUINT (tem);
tem = Fget (Vx_hyper_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_hyper = XUINT (tem);
tem = Fget (Vx_super_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
return ( ((state & (ShiftMask | dpyinfo->shift_lock_mask)) ? shift_modifier : 0) return ( ((state & (ShiftMask | dpyinfo->shift_lock_mask)) ? shift_modifier : 0)
| ((state & ControlMask) ? ctrl_modifier : 0) | ((state & ControlMask) ? ctrl_modifier : 0)
| ((state & dpyinfo->meta_mod_mask) ? meta_modifier : 0) | ((state & dpyinfo->meta_mod_mask) ? mod_meta : 0)
| ((state & dpyinfo->alt_mod_mask) ? alt_modifier : 0) | ((state & dpyinfo->alt_mod_mask) ? mod_alt : 0)
| ((state & dpyinfo->super_mod_mask) ? super_modifier : 0) | ((state & dpyinfo->super_mod_mask) ? mod_super : 0)
| ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0)); | ((state & dpyinfo->hyper_mod_mask) ? mod_hyper : 0));
} }
static unsigned int static unsigned int
...@@ -6435,12 +6456,29 @@ x_emacs_to_x_modifiers (dpyinfo, state) ...@@ -6435,12 +6456,29 @@ x_emacs_to_x_modifiers (dpyinfo, state)
struct x_display_info *dpyinfo; struct x_display_info *dpyinfo;
unsigned int state; unsigned int state;
{ {
return ( ((state & alt_modifier) ? dpyinfo->alt_mod_mask : 0) EMACS_UINT mod_meta = meta_modifier;
| ((state & super_modifier) ? dpyinfo->super_mod_mask : 0) EMACS_UINT mod_alt = alt_modifier;
| ((state & hyper_modifier) ? dpyinfo->hyper_mod_mask : 0) EMACS_UINT mod_hyper = hyper_modifier;
| ((state & shift_modifier) ? ShiftMask : 0) EMACS_UINT mod_super = super_modifier;
| ((state & ctrl_modifier) ? ControlMask : 0)
| ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0)); Lisp_Object tem;
tem = Fget (Vx_alt_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_alt = XUINT (tem);
tem = Fget (Vx_meta_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_meta = XUINT (tem);
tem = Fget (Vx_hyper_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_hyper = XUINT (tem);
tem = Fget (Vx_super_keysym, Qmodifier_value);
if (! EQ (tem, Qnil)) mod_super = XUINT (tem);
return ( ((state & mod_alt) ? dpyinfo->alt_mod_mask : 0)
| ((state & mod_super) ? dpyinfo->super_mod_mask : 0)
| ((state & mod_hyper) ? dpyinfo->hyper_mod_mask : 0)
| ((state & shift_modifier) ? ShiftMask : 0)
| ((state & ctrl_modifier) ? ControlMask : 0)
| ((state & mod_meta) ? dpyinfo->meta_mod_mask : 0));
} }
/* Convert a keysym to its name. */ /* Convert a keysym to its name. */
...@@ -15035,6 +15073,45 @@ Otherwise, value is a symbol describing the X toolkit. */); ...@@ -15035,6 +15073,45 @@ Otherwise, value is a symbol describing the X toolkit. */);
staticpro (&last_mouse_motion_frame); staticpro (&last_mouse_motion_frame);
last_mouse_motion_frame = Qnil; last_mouse_motion_frame = Qnil;
Qmodifier_value = intern ("modifier-value");
Qalt = intern ("alt");
Fput (Qalt, Qmodifier_value, make_number (alt_modifier));
Qhyper = intern ("hyper");
Fput (Qhyper, Qmodifier_value, make_number (hyper_modifier));
Qmeta = intern ("meta");
Fput (Qmeta, Qmodifier_value, make_number (meta_modifier));
Qsuper = intern ("super");
Fput (Qsuper, Qmodifier_value, make_number (super_modifier));
DEFVAR_LISP ("x-alt-keysym", &Vx_alt_keysym,
doc: /* Which keys Emacs uses for the alt modifier.
This should be one of the symbols `alt', `hyper', `meta', `super'.
For example, `alt' means use the Alt_L and Alt_R keysyms. The default
is nil, which is the same as `alt'. */);
Vx_alt_keysym = Qnil;
DEFVAR_LISP ("x-hyper-keysym", &Vx_hyper_keysym,
doc: /* Which keys Emacs uses for the hyper modifier.
This should be one of the symbols `alt', `hyper', `meta', `super'.
For example, `hyper' means use the Hyper_L and Hyper_R keysyms. The
default is nil, which is the same as `hyper'. */);
Vx_hyper_keysym = Qnil;
DEFVAR_LISP ("x-meta-keysym", &Vx_meta_keysym,
doc: /* Which keys Emacs uses for the meta modifier.
This should be one of the symbols `alt', `hyper', `meta', `super'.
For example, `meta' means use the Meta_L and Meta_R keysyms. The
default is nil, which is the same as `meta'. */);
Vx_meta_keysym = Qnil;
DEFVAR_LISP ("x-super-keysym", &Vx_super_keysym,
doc: /* Which keys Emacs uses for the super modifier.
This should be one of the symbols `alt', `hyper', `meta', `super'.
For example, `super' means use the Super_L and Super_R keysyms. The
default is nil, which is the same as `super'. */);
Vx_super_keysym = Qnil;
} }
#endif /* HAVE_X_WINDOWS */ #endif /* HAVE_X_WINDOWS */
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment