diff options
-rw-r--r-- | cocoa/ScintillaCocoa.mm | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index f3acfc1e1..899078b68 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -32,24 +32,30 @@ NSString* ScintillaRecPboardType = @"com.scintilla.utf16-plain-text.rectangular" //-------------------------------------------------------------------------------------------------- // Define keyboard shortcuts (equivalents) the Mac way. -#define SCI_CMD ( SCI_ALT | SCI_CTRL) +#define SCI_CMD ( SCI_CTRL) #define SCI_SCMD ( SCI_CMD | SCI_SHIFT) +#define SCI_META ( SCMOD_META ) +#define SCI_SMETA ( SCI_META | SCI_SHIFT) static const KeyToCommand macMapDefault[] = { + // OS X specific {SCK_DOWN, SCI_CMD, SCI_DOCUMENTEND}, {SCK_UP, SCI_CMD, SCI_DOCUMENTSTART}, {SCK_LEFT, SCI_CMD, SCI_VCHOME}, {SCK_LEFT, SCI_SCMD, SCI_VCHOMEEXTEND}, {SCK_RIGHT, SCI_CMD, SCI_LINEEND}, {SCK_RIGHT, SCI_SCMD, SCI_LINEENDEXTEND}, + + // Similar to Windows and GTK+ + // Where equivalent clashes with OS X standard, use Meta instead {SCK_DOWN, SCI_NORM, SCI_LINEDOWN}, {SCK_DOWN, SCI_SHIFT, SCI_LINEDOWNEXTEND}, - {SCK_DOWN, SCI_CTRL, SCI_LINESCROLLDOWN}, + {SCK_DOWN, SCI_META, SCI_LINESCROLLDOWN}, {SCK_DOWN, SCI_ASHIFT, SCI_LINEDOWNRECTEXTEND}, {SCK_UP, SCI_NORM, SCI_LINEUP}, {SCK_UP, SCI_SHIFT, SCI_LINEUPEXTEND}, - {SCK_UP, SCI_CTRL, SCI_LINESCROLLUP}, + {SCK_UP, SCI_META, SCI_LINESCROLLUP}, {SCK_UP, SCI_ASHIFT, SCI_LINEUPRECTEXTEND}, {'[', SCI_CTRL, SCI_PARAUP}, {'[', SCI_CSHIFT, SCI_PARAUPEXTEND}, @@ -58,13 +64,15 @@ static const KeyToCommand macMapDefault[] = {SCK_LEFT, SCI_NORM, SCI_CHARLEFT}, {SCK_LEFT, SCI_SHIFT, SCI_CHARLEFTEXTEND}, {SCK_LEFT, SCI_ALT, SCI_WORDLEFT}, - {SCK_LEFT, SCI_CSHIFT, SCI_WORDLEFTEXTEND}, - {SCK_LEFT, SCI_ASHIFT, SCI_WORDLEFTEXTEND}, + {SCK_LEFT, SCI_META, SCI_WORDLEFT}, + {SCK_LEFT, SCI_SMETA, SCI_WORDLEFTEXTEND}, + {SCK_LEFT, SCI_ASHIFT, SCI_CHARLEFTRECTEXTEND}, {SCK_RIGHT, SCI_NORM, SCI_CHARRIGHT}, {SCK_RIGHT, SCI_SHIFT, SCI_CHARRIGHTEXTEND}, {SCK_RIGHT, SCI_ALT, SCI_WORDRIGHT}, - {SCK_RIGHT, SCI_CSHIFT, SCI_WORDRIGHTEXTEND}, - {SCK_RIGHT, SCI_ASHIFT, SCI_WORDRIGHTEXTEND}, + {SCK_RIGHT, SCI_META, SCI_WORDRIGHT}, + {SCK_RIGHT, SCI_SMETA, SCI_WORDRIGHTEXTEND}, + {SCK_RIGHT, SCI_ASHIFT, SCI_CHARRIGHTRECTEXTEND}, {'/', SCI_CTRL, SCI_WORDPARTLEFT}, {'/', SCI_CSHIFT, SCI_WORDPARTLEFTEXTEND}, {'\\', SCI_CTRL, SCI_WORDPARTRIGHT}, @@ -1482,9 +1490,13 @@ bool ScintillaCocoa::KeyboardInput(NSEvent* event) bool consumed = false; // Consumed as command? - // Signal command as control + alt. This leaves us without command + control and command + alt - // but that's what we get when we have a modifier key more than other platforms. - if (KeyDown(key, shift, control || command, alt || command, &consumed)) + // Signal Control as SCMOD_META + int modifierKeys = + (shift ? SCI_SHIFT : 0) | + (command ? SCI_CTRL : 0) | + (alt ? SCI_ALT : 0) | + (control ? SCI_META : 0); + if (KeyDownWithModifiers(key, modifierKeys, &consumed)) handled = true; if (consumed) handled = true; |