Add separate key mappings for left/right control/command on Nextstep (Bug#7458).
authorJan Djärv <jan.h.d@swipnet.se>
Sun, 21 Nov 2010 13:09:34 +0000 (14:09 +0100)
committerJan Djärv <jan.h.d@swipnet.se>
Sun, 21 Nov 2010 13:09:34 +0000 (14:09 +0100)
* lisp/cus-start.el (all): Add ns-right-control-modifier and
ns-right-command-modifier.

* lisp/term/ns-win.el (ns-right-control-modifier)
(ns-right-command-modifier): Defvar them.

* src/nsterm.m (ns_right_command_modifier, ns_right_control_modifier):
Define (Bug#7458).
(NSRightCommandKeyMask, NSRightControlKeyMask): Define (Bug#7458).
(EV_MODIFIERS): Check for NSRightCommandKeyMask and
NSRightControlKeyMask also (Bug#7458).
(keyDown): Ditto (Bug#7458).
(syms_of_nsterm): Defvar ns-right-command-modifier and
ns-right-control-modifier (Bug#7458).

lisp/ChangeLog
lisp/cus-start.el
lisp/term/ns-win.el
src/ChangeLog
src/nsterm.m

index c4bb5ec..1a48666 100644 (file)
@@ -1,3 +1,11 @@
+2010-11-21  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * term/ns-win.el (ns-right-control-modifier)
+       (ns-right-command-modifier): Defvar them.
+
+       * cus-start.el (all): Add ns-right-control-modifier and
+       ns-right-command-modifier (Bug#7458).
+
 2010-11-20  Glenn Morris  <rgm@gnu.org>
 
        * emacs-lisp/authors.el (authors-ignored-files)
index 750b657..91aa3ed 100644 (file)
@@ -320,12 +320,28 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
                      (const control) (const meta)
                      (const alt) (const hyper)
                      (const super)) "23.1")
+            (ns-right-control-modifier
+             ns
+             (choice (const :tag "No modifier (work as control)" none)
+                     (const :tag "Use the value of ns-control-modifier"
+                            left)
+                     (const control) (const meta)
+                     (const alt) (const hyper)
+                     (const super)) "24.0")
             (ns-command-modifier
              ns
              (choice (const :tag "No modifier" nil)
                      (const control) (const meta)
                      (const alt) (const hyper)
                      (const super)) "23.1")
+            (ns-right-command-modifier
+             ns
+             (choice (const :tag "No modifier (work as command)" none)
+                     (const :tag "Use the value of ns-command-modifier"
+                            left)
+                     (const control) (const meta)
+                     (const alt) (const hyper)
+                     (const super)) "24.0")
             (ns-alternate-modifier
              ns
              (choice (const :tag "No modifier (work as alternate/option)" none)
index 24f70f9..89fcfde 100644 (file)
@@ -179,7 +179,9 @@ The properties returned may include `top', `left', `height', and `width'."
 
 (defvaralias 'mac-allow-anti-aliasing 'ns-antialias-text)
 (defvaralias 'mac-command-modifier 'ns-command-modifier)
+(defvaralias 'mac-right-command-modifier 'ns-right-command-modifier)
 (defvaralias 'mac-control-modifier 'ns-control-modifier)
+(defvaralias 'mac-right-control-modifier 'ns-right-control-modifier)
 (defvaralias 'mac-option-modifier 'ns-option-modifier)
 (defvaralias 'mac-right-option-modifier 'ns-right-option-modifier)
 (defvaralias 'mac-function-modifier 'ns-function-modifier)
@@ -514,6 +516,8 @@ unless the current buffer is a scratch buffer."
 ;; nsterm.m
 (defvar ns-alternate-modifier)
 (defvar ns-right-alternate-modifier)
+(defvar ns-right-command-modifier)
+(defvar ns-right-control-modifier)
 
 ;; You say tomAYto, I say tomAHto..
 (defvaralias 'ns-option-modifier 'ns-alternate-modifier)
index f5ab887..8a77fc1 100644 (file)
@@ -1,3 +1,14 @@
+2010-11-21  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * nsterm.m (ns_right_command_modifier, ns_right_control_modifier):
+       Define (Bug#7458).
+       (NSRightCommandKeyMask, NSRightControlKeyMask): Define (Bug#7458).
+       (EV_MODIFIERS): Check for NSRightCommandKeyMask and
+       NSRightControlKeyMask also (Bug#7458).
+       (keyDown): Ditto (Bug#7458).
+       (syms_of_nsterm): Defvar ns-right-command-modifier and
+       ns-right-control-modifier (Bug#7458).
+
 2010-11-21  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * sysdep.c (sys_subshell): Remove SET_EMACS_PRIORITY.
index 1060776..06d7354 100644 (file)
@@ -157,10 +157,20 @@ Lisp_Object ns_right_alternate_modifier;
    the Command modifier.  May be any of the modifier lisp symbols. */
 Lisp_Object ns_command_modifier;
 
+/* Specifies which emacs modifier should be generated when NS receives
+   the right Command modifier.  Has same values as ns_command_modifier plus
+   the value Qleft which means whatever value ns_command_modifier has.  */
+Lisp_Object ns_right_command_modifier;
+
 /* Specifies which emacs modifier should be generated when NS receives
    the Control modifier.  May be any of the modifier lisp symbols. */
 Lisp_Object ns_control_modifier;
 
+/* Specifies which emacs modifier should be generated when NS receives
+   the right Control modifier.  Has same values as ns_control_modifier plus
+   the value Qleft which means whatever value ns_control_modifier has.  */
+Lisp_Object ns_right_control_modifier;
+
 /* Specifies which emacs modifier should be generated when NS receives
    the Function modifier (laptops).  May be any of the modifier lisp symbols. */
 Lisp_Object ns_function_modifier;
@@ -224,6 +234,8 @@ static BOOL inNsSelect = 0;
 /* Convert modifiers in a NeXTSTEP event to emacs style modifiers.  */
 #define NS_FUNCTION_KEY_MASK 0x800000
 #define NSRightAlternateKeyMask (0x000040 | NSAlternateKeyMask)
+#define NSRightControlKeyMask   (0x002000 | NSControlKeyMask)
+#define NSRightCommandKeyMask   (0x000010 | NSCommandKeyMask)
 #define EV_MODIFIERS(e)                               \
     ((([e modifierFlags] & NSHelpKeyMask) ?           \
            hyper_modifier : 0)                        \
@@ -235,10 +247,18 @@ static BOOL inNsSelect = 0;
            parse_solitary_modifier (ns_alternate_modifier) : 0)   \
      | (([e modifierFlags] & NSShiftKeyMask) ?     \
            shift_modifier : 0)                        \
+     | (!EQ (ns_right_control_modifier, Qleft) && \
+        (([e modifierFlags] & NSRightControlKeyMask) \
+         == NSRightControlKeyMask) ? \
+           parse_solitary_modifier (ns_right_control_modifier) : 0) \
      | (([e modifierFlags] & NSControlKeyMask) ?      \
            parse_solitary_modifier (ns_control_modifier) : 0)     \
      | (([e modifierFlags] & NS_FUNCTION_KEY_MASK) ?  \
            parse_solitary_modifier (ns_function_modifier) : 0)    \
+     | (!EQ (ns_right_command_modifier, Qleft) && \
+        (([e modifierFlags] & NSRightCommandKeyMask) \
+         == NSRightCommandKeyMask) ? \
+           parse_solitary_modifier (ns_right_command_modifier) : 0) \
      | (([e modifierFlags] & NSCommandKeyMask) ?      \
            parse_solitary_modifier (ns_command_modifier):0))
 
@@ -4424,7 +4444,14 @@ ns_term_shutdown (int sig)
 
       if (flags & NSCommandKeyMask)
         {
-          emacs_event->modifiers |= parse_solitary_modifier (ns_command_modifier);
+          if ((flags & NSRightCommandKeyMask) == NSRightCommandKeyMask
+              && !EQ (ns_right_command_modifier, Qleft))
+            emacs_event->modifiers |= parse_solitary_modifier
+              (ns_right_command_modifier);
+          else
+            emacs_event->modifiers |= parse_solitary_modifier
+              (ns_command_modifier);
+
           /* if super (default), take input manager's word so things like
              dvorak / qwerty layout work */
           if (EQ (ns_command_modifier, Qsuper)
@@ -4458,8 +4485,15 @@ ns_term_shutdown (int sig)
         }
 
       if (flags & NSControlKeyMask)
-          emacs_event->modifiers |=
-            parse_solitary_modifier (ns_control_modifier);
+        {
+          if ((flags & NSRightControlKeyMask) == NSRightControlKeyMask
+              && !EQ (ns_right_control_modifier, Qleft))
+            emacs_event->modifiers |= parse_solitary_modifier
+              (ns_right_control_modifier);
+          else
+            emacs_event->modifiers |= parse_solitary_modifier
+              (ns_control_modifier);
+        }
 
       if (flags & NS_FUNCTION_KEY_MASK && !fnKeysym)
           emacs_event->modifiers |=
@@ -6246,11 +6280,27 @@ at all, allowing it to be used at a lower level for accented character entry.");
 Set to control, meta, alt, super, or hyper means it is taken to be that key.");
   ns_command_modifier = Qsuper;
 
+  DEFVAR_LISP ("ns-right-command-modifier", &ns_right_command_modifier,
+               "This variable describes the behavior of the right command key.\n\
+Set to control, meta, alt, super, or hyper means it is taken to be that key.\n\
+Set to left means be the same key as `ns-command-modifier'.\n\
+Set to none means that the command / option key is not interpreted by Emacs\n\
+at all, allowing it to be used at a lower level for accented character entry.");
+  ns_right_command_modifier = Qleft;
+
   DEFVAR_LISP ("ns-control-modifier", &ns_control_modifier,
                "This variable describes the behavior of the control key.\n\
 Set to control, meta, alt, super, or hyper means it is taken to be that key.");
   ns_control_modifier = Qcontrol;
 
+  DEFVAR_LISP ("ns-right-control-modifier", &ns_right_control_modifier,
+               "This variable describes the behavior of the right control key.\n\
+Set to control, meta, alt, super, or hyper means it is taken to be that key.\n\
+Set to left means be the same key as `ns-control-modifier'.\n\
+Set to none means that the control / option key is not interpreted by Emacs\n\
+at all, allowing it to be used at a lower level for accented character entry.");
+  ns_right_control_modifier = Qleft;
+
   DEFVAR_LISP ("ns-function-modifier", &ns_function_modifier,
                "This variable describes the behavior of the function key (on laptops).\n\
 Set to control, meta, alt, super, or hyper means it is taken to be that key.\n\