0
0
mirror of https://github.com/vim/vim.git synced 2025-10-01 04:54:07 -04:00

updated for version 7.0-138

This commit is contained in:
Bram Moolenaar
2006-10-17 10:51:57 +00:00
parent b90daee952
commit adcb9497e8
2 changed files with 132 additions and 149 deletions

View File

@@ -2014,7 +2014,7 @@ gui_mac_doKeyEventCarbon(
void *data)
{
/* Multibyte-friendly key event handler */
OSStatus e = -1;
OSStatus err = -1;
UInt32 actualSize;
UniChar *text;
char_u result[INLINE_KEY_BUFFER_SIZE];
@@ -2022,114 +2022,59 @@ gui_mac_doKeyEventCarbon(
UInt32 key_sym;
char charcode;
int key_char;
UInt32 modifiers;
UInt32 modifiers, vimModifiers;
size_t encLen;
char_u *to = NULL;
Boolean isSpecial = FALSE;
int i;
EventRef keyEvent;
/* Mask the mouse (as per user setting) */
if (p_mh)
ObscureCursor();
do
{
/* Don't use the keys when the dialog wants them. */
if (dialog_busy)
break;
return eventNotHandledErr;
if (noErr != GetEventParameter(theEvent, kEventParamTextInputSendText,
typeUnicodeText, NULL, 0, &actualSize, NULL))
break;
return eventNotHandledErr;
text = (UniChar *)alloc(actualSize);
if (!text)
return eventNotHandledErr;
if (text)
{
do
{
if (noErr != GetEventParameter(theEvent,
kEventParamTextInputSendText,
typeUnicodeText, NULL, actualSize, NULL, text))
break;
EventRef keyEvent;
if (noErr != GetEventParameter(theEvent,
kEventParamTextInputSendKeyboardEvent,
typeEventRef, NULL, sizeof(EventRef), NULL, &keyEvent))
break;
if (noErr != GetEventParameter(keyEvent,
kEventParamKeyModifiers,
typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers))
break;
if (noErr != GetEventParameter(keyEvent,
kEventParamKeyCode,
typeUInt32, NULL, sizeof(UInt32), NULL, &key_sym))
break;
if (noErr != GetEventParameter(keyEvent,
kEventParamKeyMacCharCodes,
typeChar, NULL, sizeof(char), NULL, &charcode))
break;
err = GetEventParameter(theEvent, kEventParamTextInputSendText,
typeUnicodeText, NULL, actualSize, NULL, text);
require_noerr(err, done);
err = GetEventParameter(theEvent, kEventParamTextInputSendKeyboardEvent,
typeEventRef, NULL, sizeof(EventRef), NULL, &keyEvent);
require_noerr(err, done);
err = GetEventParameter(keyEvent, kEventParamKeyModifiers,
typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers);
require_noerr(err, done);
err = GetEventParameter(keyEvent, kEventParamKeyCode,
typeUInt32, NULL, sizeof(UInt32), NULL, &key_sym);
require_noerr(err, done);
err = GetEventParameter(keyEvent, kEventParamKeyMacCharCodes,
typeChar, NULL, sizeof(char), NULL, &charcode);
require_noerr(err, done);
#ifndef USE_CMD_KEY
if (modifiers & cmdKey)
goto done; /* Let system handle Cmd+... */
#endif
key_char = charcode;
vimModifiers = EventModifiers2VimModifiers(modifiers);
if (modifiers & controlKey)
{
if ((modifiers & ~(controlKey|shiftKey)) == 0
&& (key_char == '2' || key_char == '6'))
{
/* CTRL-^ and CTRL-@ don't work in the normal way. */
if (key_char == '2')
key_char = Ctrl_AT;
else
key_char = Ctrl_HAT;
text[0] = (UniChar)key_char;
modifiers = 0;
}
}
if (modifiers & cmdKey)
#ifndef USE_CMD_KEY
break; /* Let system handle Cmd+... */
#else
{
/* Intercept CMD-. */
if (key_char == '.')
got_int = TRUE;
/* Convert the modifiers */
modifiers = EventModifiers2VimModifiers(modifiers);
/* Following code to simplify and consolidate modifiers
* taken liberally from gui_w48.c */
key_char = simplify_key(key_char, (int *)&modifiers);
/* remove SHIFT for keys that are already shifted, e.g.,
* '(' and '*' */
if (key_char < 0x100 &&
!isalpha(key_char) && isprint(key_char))
modifiers &= ~MOD_MASK_SHIFT;
/* Interpret META, include SHIFT, etc. */
key_char = extract_modifiers(key_char, (int *)&modifiers);
if (key_char == CSI)
key_char = K_CSI;
if (modifiers)
{
result[len++] = CSI;
result[len++] = KS_MODIFIER;
result[len++] = modifiers;
}
isSpecial = TRUE;
}
#endif
else
{
/* Find the special key (eg., for cursor keys) */
if (!(actualSize > sizeof(UniChar)) &&
if (actualSize <= sizeof(UniChar) &&
((text[0] < 0x20) || (text[0] == 0x7f)))
{
for (i = 0; special_keys[i].key_sym != (KeySym)0; ++i)
@@ -2138,11 +2083,50 @@ gui_mac_doKeyEventCarbon(
key_char = TO_SPECIAL(special_keys[i].vim_code0,
special_keys[i].vim_code1);
key_char = simplify_key(key_char,
(int *)&modifiers);
(int *)&vimModifiers);
isSpecial = TRUE;
break;
}
}
/* Intercept CMD-. and CTRL-c */
if (((modifiers & controlKey) && key_char == 'c') ||
((modifiers & cmdKey) && key_char == '.'))
got_int = TRUE;
if (!isSpecial)
{
/* remove SHIFT for keys that are already shifted, e.g.,
* '(' and '*' */
if (key_char < 0x100 && !isalpha(key_char) && isprint(key_char))
vimModifiers &= ~MOD_MASK_SHIFT;
/* remove CTRL from keys that already have it */
if (key_char < 0x20)
vimModifiers &= ~MOD_MASK_CTRL;
/* don't process unicode characters here */
if (!IS_SPECIAL(key_char))
{
/* Following code to simplify and consolidate vimModifiers
* taken liberally from gui_w48.c */
key_char = simplify_key(key_char, (int *)&vimModifiers);
/* Interpret META, include SHIFT, etc. */
key_char = extract_modifiers(key_char, (int *)&vimModifiers);
if (key_char == CSI)
key_char = K_CSI;
if (IS_SPECIAL(key_char))
isSpecial = TRUE;
}
}
if (vimModifiers)
{
result[len++] = CSI;
result[len++] = KS_MODIFIER;
result[len++] = vimModifiers;
}
if (isSpecial && IS_SPECIAL(key_char))
@@ -2155,8 +2139,6 @@ gui_mac_doKeyEventCarbon(
{
encLen = actualSize;
to = mac_utf16_to_enc(text, actualSize, &encLen);
}
if (to)
{
/* This is basically add_to_input_buf_csi() */
@@ -2171,25 +2153,22 @@ gui_mac_doKeyEventCarbon(
}
vim_free(to);
}
}
add_to_input_buf(result, len);
e = noErr;
}
while (0);
err = noErr;
done:
vim_free(text);
if (e == noErr)
if (err == noErr)
{
/* Fake event to wake up WNE (required to get
* key repeat working */
PostEvent(keyUp, 0);
return noErr;
}
}
}
while (0);
return CallNextEventHandler(nextHandler, theEvent);
return eventNotHandledErr;
}
#else
void
@@ -5748,7 +5727,8 @@ gui_mch_show_popupmenu(vimmenu_T *menu)
/* TODO: Get the text selection from Vim */
/* Call to Handle Popup */
status = ContextualMenuSelect(CntxMenu, where, false, kCMHelpItemNoHelp, HelpName, NULL, &CntxType, &CntxMenuID, &CntxMenuItem);
status = ContextualMenuSelect(CntxMenu, where, false, kCMHelpItemNoHelp,
HelpName, NULL, &CntxType, &CntxMenuID, &CntxMenuItem);
if (status == noErr)
{
@@ -5756,7 +5736,8 @@ gui_mch_show_popupmenu(vimmenu_T *menu)
{
/* Handle the menu CntxMenuID, CntxMenuItem */
/* The submenu can be handle directly by gui_mac_handle_menu */
/* But what about the current menu, is the menu changed by ContextualMenuSelect */
/* But what about the current menu, is the menu changed by
* ContextualMenuSelect */
gui_mac_handle_menu((CntxMenuID << 16) + CntxMenuItem);
}
else if (CntxMenuID == kCMShowHelpSelected)

View File

@@ -666,6 +666,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
138,
/**/
137,
/**/