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).
This commit is contained in:
parent
034244e55b
commit
b7d1e14447
5 changed files with 92 additions and 3 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
56
src/nsterm.m
56
src/nsterm.m
|
@ -157,10 +157,20 @@ Updated by Christian Limpach (chris@nice.ch)
|
|||
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 @@ the Function modifier (laptops). May be any of the modifier lisp symbols. */
|
|||
/* 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 @@ the Function modifier (laptops). May be any of the modifier lisp symbols. */
|
|||
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 @@ most recently updated (I guess), which is not the correct one. */
|
|||
|
||||
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 @@ most recently updated (I guess), which is not the correct one. */
|
|||
}
|
||||
|
||||
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 @@ Convert an X font name (XLFD) to an NS font name.
|
|||
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\
|
||||
|
|
Loading…
Add table
Reference in a new issue