Mercurial > emacs
changeset 111662:1303259207a9
Add separate key mappings for left/right control/command on Nextstep (Bug#7458).
* 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).
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Sun, 21 Nov 2010 14:09:34 +0100 |
parents | c07eb42b870c |
children | 82407e275674 |
files | lisp/ChangeLog lisp/cus-start.el lisp/term/ns-win.el src/ChangeLog src/nsterm.m |
diffstat | 5 files changed, 92 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Nov 21 09:51:04 2010 +0100 +++ b/lisp/ChangeLog Sun Nov 21 14:09:34 2010 +0100 @@ -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)
--- a/lisp/cus-start.el Sun Nov 21 09:51:04 2010 +0100 +++ b/lisp/cus-start.el Sun Nov 21 14:09:34 2010 +0100 @@ -320,12 +320,28 @@ (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)
--- a/lisp/term/ns-win.el Sun Nov 21 09:51:04 2010 +0100 +++ b/lisp/term/ns-win.el Sun Nov 21 14:09:34 2010 +0100 @@ -179,7 +179,9 @@ (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 @@ ;; 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)
--- a/src/ChangeLog Sun Nov 21 09:51:04 2010 +0100 +++ b/src/ChangeLog Sun Nov 21 14:09:34 2010 +0100 @@ -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.
--- a/src/nsterm.m Sun Nov 21 09:51:04 2010 +0100 +++ b/src/nsterm.m Sun Nov 21 14:09:34 2010 +0100 @@ -158,10 +158,20 @@ 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 @@ /* 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 @@ 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 @@ 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 @@ } 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 @@ 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\