all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Kai.Grossjohann@CS.Uni-Dortmund.DE (Kai Großjohann)
Subject: Re: Switch Meta and Alt modifiers
Date: Thu, 14 Feb 2002 11:09:01 +0100	[thread overview]
Message-ID: <vafd6z8nznm.fsf@INBOX.auto.emacs.devel.tok.lucy.cs.uni-dortmund.de> (raw)
In-Reply-To: <vafzo3na09i.fsf@INBOX.auto.emacs.devel.tok.lucy.cs.uni-dortmund.de> (Kai.Grossjohann@cs.uni-dortmund.de's message of "Wed, 09 Jan 2002 18:43:05 +0100")

[-- Attachment #1: Type: text/plain, Size: 219 bytes --]

Here is a new version, incorporating a suggestion from Stefan
Monnier.  I have made an entry in etc/NEWS.

Should I use "unsigned int" or "EMACS_UINT"?

Opinions?

kai
-- 
~/.signature is: umop 3p!sdn    (Frank Nobis)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: core --]
[-- Type: text/x-patch, Size: 7729 bytes --]

Index: etc/NEWS
===================================================================
RCS file: /cvsroot/emacs/emacs/etc/NEWS,v
retrieving revision 1.597
diff -u -r1.597 NEWS
--- etc/NEWS	12 Feb 2002 18:58:21 -0000	1.597
+++ etc/NEWS	14 Feb 2002 10:07:23 -0000
@@ -240,9 +240,12 @@
 example, if you set `jit-lock-defer-time' to 0.25, fontification will
 only happen after 0.25s of idle time.
 
-** If you hit M-C-SPC (mark-sexp) repeatedly, the marked region
-will now be extended each time, so you can mark the next two sexps with
-M-C-SPC M-C-SPC, for example.
+** Marking commands extend the region when invoked multiple times.  If
+you hit M-C-SPC (mark-sexp), M-@ (mark-word), M-h (mark-paragraph), or
+C-M-h (mark-defun) repeatedly, the marked region will now be extended
+each time, so you can mark the next two sexps with M-C-SPC M-C-SPC,
+for example.  This feature also works for mark-end-of-sentence, if you
+bind that to a key.
 
 ** In the *Occur* buffer, `o' switches to it in another window, and
 C-o displays the current line's occurrence in another window without
@@ -386,6 +389,14 @@
 The new variable `w32-pass-extra-mouse-buttons-to-system' controls
 whether Emacs should handle the extra buttons itself (the default), or
 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.
Index: src/xterm.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xterm.c,v
retrieving revision 1.703
diff -u -r1.703 xterm.c
--- src/xterm.c	27 Jan 2002 16:43:36 -0000	1.703
+++ src/xterm.c	14 Feb 2002 10:07:24 -0000
@@ -381,6 +381,14 @@
 
 extern int extra_keyboard_modifiers;
 
+/* The keysyms to use for the various modifiers.  */
+
+unsigned int Vx_alt_keysym;
+unsigned int Vx_hyper_keysym;
+unsigned int Vx_meta_keysym;
+unsigned int Vx_super_keysym;
+static Lisp_Object Qalt, Qhyper, Qmeta, Qsuper, Qmodifier_value;
+
 static Lisp_Object Qvendor_specific_keysyms;
 
 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *));
@@ -6422,12 +6430,28 @@
      struct x_display_info *dpyinfo;
      unsigned int state;
 {
+  unsigned int mod_meta = meta_modifier;
+  unsigned int mod_alt  = alt_modifier;
+  unsigned int mod_hyper = hyper_modifier;
+  unsigned int mod_super = super_modifier;
+  EMACS_UINT 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)
-	  | ((state & ControlMask)	       ? ctrl_modifier  : 0)
-	  | ((state & dpyinfo->meta_mod_mask)  ? meta_modifier  : 0)
-	  | ((state & dpyinfo->alt_mod_mask)   ? alt_modifier  : 0)
-	  | ((state & dpyinfo->super_mod_mask) ? super_modifier  : 0)
-	  | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier  : 0));
+            | ((state & ControlMask)			? ctrl_modifier	: 0)
+            | ((state & dpyinfo->meta_mod_mask)		? mod_meta	: 0)
+            | ((state & dpyinfo->alt_mod_mask)		? mod_alt	: 0)
+            | ((state & dpyinfo->super_mod_mask)	? mod_super	: 0)
+            | ((state & dpyinfo->hyper_mod_mask)	? mod_hyper	: 0));
 }
 
 static unsigned int
@@ -6435,12 +6459,29 @@
      struct x_display_info *dpyinfo;
      unsigned int state;
 {
-  return (  ((state & alt_modifier)	? dpyinfo->alt_mod_mask   : 0)
-	  | ((state & super_modifier)	? dpyinfo->super_mod_mask : 0)
-	  | ((state & hyper_modifier)	? dpyinfo->hyper_mod_mask : 0)
-	  | ((state & shift_modifier)	? ShiftMask        : 0)
-	  | ((state & ctrl_modifier)	? ControlMask      : 0)
-	  | ((state & meta_modifier)	? dpyinfo->meta_mod_mask  : 0));
+  unsigned int mod_meta = meta_modifier;
+  unsigned int mod_alt  = alt_modifier;
+  unsigned int mod_hyper = hyper_modifier;
+  unsigned int mod_super = super_modifier;
+  
+  EMACS_UINT 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.  */
@@ -15035,6 +15076,45 @@
 
   staticpro (&last_mouse_motion_frame);
   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 */
Index: src/alloc.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/alloc.c,v
retrieving revision 1.263
diff -u -r1.263 alloc.c
--- src/alloc.c	8 Feb 2002 21:23:53 -0000	1.263
+++ src/alloc.c	14 Feb 2002 10:07:24 -0000
@@ -396,7 +396,7 @@
 
 /* Addresses of staticpro'd variables.  */
 
-#define NSTATICS 1024
+#define NSTATICS 1026
 Lisp_Object *staticvec[NSTATICS] = {0};
 
 /* Index of next unused slot in staticvec.  */

       reply	other threads:[~2002-02-14 10:09 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <vafzo3na09i.fsf@INBOX.auto.emacs.devel.tok.lucy.cs.uni-dortmund.de>
2002-02-14 10:09 ` Kai Großjohann [this message]
2002-02-14 12:30   ` Switch Meta and Alt modifiers Andreas Schwab
2002-02-15  9:38 ` Kai Großjohann
2002-02-17  5:48   ` Eli Zaretskii
2002-02-17  9:58     ` Kai Großjohann
2002-02-17 10:10       ` Eli Zaretskii
2002-02-17 15:23         ` Kai Großjohann
2002-02-17 17:00         ` Eli Zaretskii
2002-02-19  6:36           ` Richard Stallman
2002-02-19  9:31             ` Eli Zaretskii
2002-02-20 22:12               ` Richard Stallman
2002-02-21  6:44                 ` Eli Zaretskii
2002-02-22  4:32                   ` Richard Stallman
2002-02-24 17:41                     ` Kai Großjohann
2002-02-24 18:49                       ` Jason Rumney
2002-02-24 19:10                         ` Kai Großjohann
2002-02-25  0:09                       ` Richard Stallman
2002-02-25  6:03                         ` Eli Zaretskii
2002-02-21 18:59                 ` Jason Rumney
2002-02-17 11:53       ` Jason Rumney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=vafd6z8nznm.fsf@INBOX.auto.emacs.devel.tok.lucy.cs.uni-dortmund.de \
    --to=kai.grossjohann@cs.uni-dortmund.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.