Since Daniel Brockman suggested that I repost this patch in context format, there we go. It applies to the current version. Steven Tamm suggested a while ago that the 'fn' key (on Powerbook keyboards left of the ctrl key) be included, and I think this would be a very neat idea for someone to do.


Index: macterm.c =================================================================== RCS file: /cvsroot/emacs/emacs/src/macterm.c,v retrieving revision 1.113 diff -c -r1.113 macterm.c *** macterm.c 24 Apr 2005 06:06:39 -0000 1.113 --- macterm.c 2 May 2005 20:47:24 -0000 *************** *** 86,101 **** #include "composite.h" #include "coding.h"

! /* Set of macros that handle mapping of Mac modifier keys to emacs. */
! #define macCtrlKey (NILP (Vmac_reverse_ctrl_meta) ? controlKey : \
! (NILP (Vmac_command_key_is_meta) ? optionKey : cmdKey))
#define macShiftKey (shiftKey)
! #define macMetaKey (NILP (Vmac_reverse_ctrl_meta) ? \
! (NILP (Vmac_command_key_is_meta) ? optionKey : cmdKey) \
! : controlKey)
! #define macAltKey (NILP (Vmac_command_key_is_meta) ? cmdKey : optionKey)


#define mac_window_to_frame(wp) (((mac_output *) GetWRefCon (wp))->mFP)


  /* Non-nil means Emacs uses toolkit scroll bars.  */
--- 86,115 ----
  #include "composite.h"
  #include "coding.h"

! /* Set of macros that handle mapping of Mac modifier keys to emacs.
! If any of the newer-style mac_*_modifier variables is set, these macros are basically out of function,
! they just map to the normal keys - except for Meta, which is then (ESC or) command-control-option.
! */
!
! #define macOldModifierSetting ( NILP(Vmac_control_modifier) && NILP(Vmac_option_modifier) && NILP(Vmac_command_modifier) )
!
! #define macCtrlKey (macOldModifierSetting ? \
! (NILP(Vmac_reverse_ctrl_meta) ? controlKey : \
! (NILP(Vmac_command_key_is_meta) ? optionKey : cmdKey)) : \
! controlKey)
#define macShiftKey (shiftKey)
!
! #define macMetaKey (macOldModifierSetting ? \
! (NILP(Vmac_reverse_ctrl_meta) ? \
! (NILP(Vmac_command_key_is_meta) ? optionKey : cmdKey) : controlKey) : \
! (cmdKey | controlKey | optionKey))
!
! #define macAltKey (macOldModifierSetting ? (NILP(Vmac_command_key_is_meta) ? cmdKey : optionKey) : optionKey)
!
! #define macCmdKey (cmdKey)


#define mac_window_to_frame(wp) (((mac_output *) GetWRefCon (wp))->mFP)
+


  /* Non-nil means Emacs uses toolkit scroll bars.  */
***************
*** 238,244 ****

  /* The keysyms to use for the various modifiers.  */

! static Lisp_Object Qalt, Qhyper, Qsuper, Qmodifier_value;

  static Lisp_Object Qvendor_specific_keysyms;

--- 252,258 ----

  /* The keysyms to use for the various modifiers.  */

! static Lisp_Object Qalt, Qhyper, Qsuper, Qctrl, Qmeta, Qmodifier_value;

  static Lisp_Object Qvendor_specific_keysyms;

***************
*** 7113,7125 ****
/* Contains the string "reverse", which is a constant for mouse button emu.*/
Lisp_Object Qreverse;


! /* True if using command key as meta key.  */
  Lisp_Object Vmac_command_key_is_meta;

/* Modifier associated with the option key, or nil for normal behavior. */
Lisp_Object Vmac_option_modifier;


! /* True if the ctrl and meta keys should be reversed.  */
  Lisp_Object Vmac_reverse_ctrl_meta;

/* True if the option and command modifiers should be used to emulate
--- 7127,7147 ----
/* Contains the string "reverse", which is a constant for mouse button emu.*/
Lisp_Object Qreverse;


! /* True if using command key as meta key.
!    Deprecated; only use if macOldModifierSetting evaluates to true. */
  Lisp_Object Vmac_command_key_is_meta;

+ /* Modifier associated with the control key, or nil for normal behavior. */
+ Lisp_Object Vmac_control_modifier;
+
/* Modifier associated with the option key, or nil for normal behavior. */
Lisp_Object Vmac_option_modifier;


! /* Modifier associated with the command key, or nil for normal behavior. */
! Lisp_Object Vmac_command_modifier;
!
! /* True if the ctrl and meta keys should be reversed.
! Deprecated; only use if macOldModifierSetting evaluates to true. */
Lisp_Object Vmac_reverse_ctrl_meta;


  /* True if the option and command modifiers should be used to emulate
***************
*** 7194,7210 ****
    unsigned int result = 0;
    if (mods & macShiftKey)
      result |= shift_modifier;
!   if (mods & macCtrlKey)
!     result |= ctrl_modifier;
!   if (mods & macMetaKey)
!     result |= meta_modifier;
!   if (NILP (Vmac_command_key_is_meta) && (mods & macAltKey))
!     result |= alt_modifier;
!   if (!NILP (Vmac_option_modifier) && (mods & optionKey)) {
!       Lisp_Object val = Fget(Vmac_option_modifier, Qmodifier_value);
!       if (!NILP(val))
            result |= XUINT(val);
!   }

return result;
}
--- 7216,7259 ----
unsigned int result = 0;
if (mods & macShiftKey)
result |= shift_modifier;
!
! if (macOldModifierSetting) /* compatibility with old-style modifier keys */
! {
! if (mods & macCtrlKey)
! result |= ctrl_modifier;
! if (mods & macMetaKey)
! result |= meta_modifier;
!
! if ( NILP (Vmac_command_key_is_meta) && (mods & macAltKey) )
! result |= alt_modifier;
! } else
! {
! /* new-style modifier keys */
! if (!NILP (Vmac_option_modifier) && (mods & optionKey)) {
! Lisp_Object val = Fget(Vmac_option_modifier, Qmodifier_value);
! if (!NILP(val))
result |= XUINT(val);
! } else { /* default behavior if modifier variable is not set */
! if (mods & macAltKey)
! result |= alt_modifier;
! }
! if (!NILP (Vmac_command_modifier) && (mods & cmdKey)) {
! Lisp_Object val = Fget(Vmac_command_modifier, Qmodifier_value);
! if (!NILP(val))
! result |= XUINT(val);
! } else { /* default behavior if modifier variable is not set: assign hyper*/
! if (mods & macCmdKey)
! result |= hyper_modifier;
! }
! if (!NILP (Vmac_control_modifier) && (mods & controlKey)) {
! Lisp_Object val = Fget(Vmac_control_modifier, Qmodifier_value);
! if (!NILP(val))
! result |= XUINT(val);
! } else { /* default behavior if modifier variable is not set */
! if (mods & macCtrlKey)
! result |= ctrl_modifier;
! }
! }


return result;
}
***************
*** 9029,9037 ****
}
else
{
! if (er.modifiers & (controlKey |
! (NILP (Vmac_command_key_is_meta) ? optionKey
! : cmdKey)))
{
/* This code comes from Keyboard Resource,
Appendix C of IM - Text. This is necessary
--- 9078,9087 ----
}
else
{
! if (er.modifiers & (controlKey |
! ((macOldModifierSetting &&
! NILP (Vmac_command_key_is_meta)) ?
! optionKey : cmdKey)))
{
/* This code comes from Keyboard Resource,
Appendix C of IM - Text. This is necessary
***************
*** 9048,9072 ****
inev.code = KeyTranslate (kchr_ptr, new_keycode,
&some_state) & 0xff;
}
! else if (!NILP (Vmac_option_modifier)
! && (er.modifiers & optionKey))
{
! /* When using the option key as an emacs modifier,
convert the pressed key code back to one
! without the Mac option modifier applied. */
! int new_modifiers = er.modifiers & ~optionKey;
int new_keycode = keycode | new_modifiers;
Ptr kchr_ptr = (Ptr) GetScriptManagerVariable (smKCHRCache);
unsigned long some_state = 0;
inev.code = KeyTranslate (kchr_ptr, new_keycode,
&some_state) & 0xff;
! }
! else
inev.code = er.message & charCodeMask;
inev.kind = ASCII_KEYSTROKE_EVENT;
}
}
!
#if USE_CARBON_EVENTS
inev.modifiers = mac_event_to_emacs_modifiers (eventRef);
#else
--- 9098,9127 ----
inev.code = KeyTranslate (kchr_ptr, new_keycode,
&some_state) & 0xff;
}
! else if (!macOldModifierSetting
! && (er.modifiers & (optionKey | controlKey | cmdKey) ))
{
! /* When using a key as an emacs modifier,
convert the pressed key code back to one
! without the Mac modifier applied.
!
! Could we do something like
! new_modifiers = er.modifiers & shiftKey
! instead?
! */
! int new_modifiers = er.modifiers & ~controlKey & ~optionKey & ~cmdKey;
int new_keycode = keycode | new_modifiers;
Ptr kchr_ptr = (Ptr) GetScriptManagerVariable (smKCHRCache);
unsigned long some_state = 0;
inev.code = KeyTranslate (kchr_ptr, new_keycode,
&some_state) & 0xff;
! } else
inev.code = er.message & charCodeMask;
+
inev.kind = ASCII_KEYSTROKE_EVENT;
}
}
!
#if USE_CARBON_EVENTS
inev.modifiers = mac_event_to_emacs_modifiers (eventRef);
#else
***************
*** 9760,9765 ****
--- 9815,9824 ----
#if TARGET_API_MAC_CARBON
init_required_apple_events ();


+   Qctrl = intern ("ctrl");
+   Fput (Qctrl, Qmodifier_value, make_number (ctrl_modifier));
+   Qmeta = intern ("meta");
+   Fput (Qmeta, Qmodifier_value, make_number (meta_modifier));
  #if USE_CARBON_EVENTS
  #ifdef MAC_OSX
    init_service_handler ();
***************
*** 9810,9815 ****
--- 9869,9877 ----
  #ifdef MAC_OSX
    Fprovide (intern ("mac-carbon"), Qnil);
  #endif
+ /* Deprecated variables to configure modifier key assignment.
+       Retained for backward-compatibility. */
+       

    staticpro (&Qreverse);
    Qreverse = intern ("reverse");
***************
*** 9846,9864 ****

DEFVAR_LISP ("mac-command-key-is-meta", &Vmac_command_key_is_meta,
doc: /* Non-nil means that the command key is used as the Emacs meta key.
! Otherwise the option key is used. */);
Vmac_command_key_is_meta = Qt;


    DEFVAR_LISP ("mac-option-modifier", &Vmac_option_modifier,
      doc: /* Modifier to use for the Mac alt/option key.  The value can
  be alt, hyper, or super for the respective modifier.  If the value is
! nil then the key will act as the normal Mac option modifier.  */);
    Vmac_option_modifier = Qnil;

! DEFVAR_LISP ("mac-reverse-ctrl-meta", &Vmac_reverse_ctrl_meta,
! doc: /* Non-nil means that the control and meta keys are reversed. This is
! useful for non-standard keyboard layouts. */);
! Vmac_reverse_ctrl_meta = Qnil;


    DEFVAR_LISP ("mac-emulate-three-button-mouse",
               &Vmac_emulate_three_button_mouse,
--- 9908,9952 ----

DEFVAR_LISP ("mac-command-key-is-meta", &Vmac_command_key_is_meta,
doc: /* Non-nil means that the command key is used as the Emacs meta key.
! Otherwise the option key is used. This variable is DEPRECATED.
! It is only in effect if all of the variables mac-*-modifier are nil. */);
Vmac_command_key_is_meta = Qt;
+
+ DEFVAR_LISP ("mac-reverse-ctrl-meta", &Vmac_reverse_ctrl_meta,
+ doc: /* Non-nil means that the control and meta keys are reversed. This is
+ useful for non-standard keyboard layouts. This variable is DEPRECATED.
+ It is only in effect if none of the variables mac-*-modifier is non-nil. */);
+ Vmac_reverse_ctrl_meta = Qnil;
+
+
+ /* Variables to configure modifier key assignment. */
+
+ DEFVAR_LISP ("mac-control-modifier", &Vmac_control_modifier,
+ doc: /* Modifier to use for the Mac control key. The value can
+ be alt, hyper, or super for the respective modifier. If the value is
+ nil then the key will act as the normal Mac control modifier. However, if all
+ values of mac-{command|control|option}-modifier are nil, the deprecated
+ default assignment determined by mac-command-key-is-meta and
+ mac-reverse-ctrl-meta is used. */);
+ Vmac_control_modifier = Qnil;


DEFVAR_LISP ("mac-option-modifier", &Vmac_option_modifier,
doc: /* Modifier to use for the Mac alt/option key. The value can
be alt, hyper, or super for the respective modifier. If the value is
! nil then the key will act as the normal Mac option modifier. However, if all
! values of mac-{command|control|option}-modifier are nil, the deprecated
! default assignment determined by mac-command-key-is-meta and
! mac-reverse-ctrl-meta is used. */);
Vmac_option_modifier = Qnil;


! DEFVAR_LISP ("mac-command-modifier", &Vmac_command_modifier,
! doc: /* Modifier to use for the Mac command key. The value can
! be alt, hyper, or super for the respective modifier. If the value is
! nil then the key will act as the normal Mac option modifier. However, if all
! values of mac-{command|control|option}-modifier are nil, the deprecated
! default assignment determined by mac-command-key-is-meta and
! mac-reverse-ctrl-meta is used. */);
! Vmac_command_modifier = Qnil;


    DEFVAR_LISP ("mac-emulate-three-button-mouse",
               &Vmac_emulate_three_button_mouse,



_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel

Reply via email to