]>
git.saurik.com Git - wxWidgets.git/blob - src/stc/scintilla/src/KeyMap.cxx
1 // Scintilla source code edit control
3 ** Defines a mapping between keystrokes and commands.
5 // Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
10 #include "Scintilla.h"
15 using namespace Scintilla
;
18 KeyMap::KeyMap() : kmap(0), len(0), alloc(0) {
19 for (int i
= 0; MapDefault
[i
].key
; i
++) {
20 AssignCmdKey(MapDefault
[i
].key
,
21 MapDefault
[i
].modifiers
,
30 void KeyMap::Clear() {
37 void KeyMap::AssignCmdKey(int key
, int modifiers
, unsigned int msg
) {
38 if ((len
+1) >= alloc
) {
39 KeyToCommand
*ktcNew
= new KeyToCommand
[alloc
+ 5];
42 for (int k
= 0; k
< len
; k
++)
48 for (int keyIndex
= 0; keyIndex
< len
; keyIndex
++) {
49 if ((key
== kmap
[keyIndex
].key
) && (modifiers
== kmap
[keyIndex
].modifiers
)) {
50 kmap
[keyIndex
].msg
= msg
;
55 kmap
[len
].modifiers
= modifiers
;
60 unsigned int KeyMap::Find(int key
, int modifiers
) {
61 for (int i
= 0; i
< len
; i
++) {
62 if ((key
== kmap
[i
].key
) && (modifiers
== kmap
[i
].modifiers
)) {
75 // Define a modifier that is exactly Ctrl key on all platforms
76 // Most uses of Ctrl map to Cmd on OS X but some can't so use SCI_[S]CTRL_META
78 #define SCI_CTRL_META SCI_META
79 #define SCI_SCTRL_META (SCI_META | SCI_SHIFT)
81 #define SCI_CTRL_META SCI_CTRL
82 #define SCI_SCTRL_META (SCI_CTRL | SCI_SHIFT)
85 const KeyToCommand
KeyMap::MapDefault
[] = {
88 {SCK_DOWN
, SCI_CTRL
, SCI_DOCUMENTEND
},
89 {SCK_DOWN
, SCI_CSHIFT
, SCI_DOCUMENTENDEXTEND
},
90 {SCK_UP
, SCI_CTRL
, SCI_DOCUMENTSTART
},
91 {SCK_UP
, SCI_CSHIFT
, SCI_DOCUMENTSTARTEXTEND
},
92 {SCK_LEFT
, SCI_CTRL
, SCI_VCHOME
},
93 {SCK_LEFT
, SCI_CSHIFT
, SCI_VCHOMEEXTEND
},
94 {SCK_RIGHT
, SCI_CTRL
, SCI_LINEEND
},
95 {SCK_RIGHT
, SCI_CSHIFT
, SCI_LINEENDEXTEND
},
98 {SCK_DOWN
, SCI_NORM
, SCI_LINEDOWN
},
99 {SCK_DOWN
, SCI_SHIFT
, SCI_LINEDOWNEXTEND
},
100 {SCK_DOWN
, SCI_CTRL_META
, SCI_LINESCROLLDOWN
},
101 {SCK_DOWN
, SCI_ASHIFT
, SCI_LINEDOWNRECTEXTEND
},
102 {SCK_UP
, SCI_NORM
, SCI_LINEUP
},
103 {SCK_UP
, SCI_SHIFT
, SCI_LINEUPEXTEND
},
104 {SCK_UP
, SCI_CTRL_META
, SCI_LINESCROLLUP
},
105 {SCK_UP
, SCI_ASHIFT
, SCI_LINEUPRECTEXTEND
},
106 {'[', SCI_CTRL
, SCI_PARAUP
},
107 {'[', SCI_CSHIFT
, SCI_PARAUPEXTEND
},
108 {']', SCI_CTRL
, SCI_PARADOWN
},
109 {']', SCI_CSHIFT
, SCI_PARADOWNEXTEND
},
110 {SCK_LEFT
, SCI_NORM
, SCI_CHARLEFT
},
111 {SCK_LEFT
, SCI_SHIFT
, SCI_CHARLEFTEXTEND
},
112 {SCK_LEFT
, SCI_CTRL_META
, SCI_WORDLEFT
},
113 {SCK_LEFT
, SCI_SCTRL_META
, SCI_WORDLEFTEXTEND
},
114 {SCK_LEFT
, SCI_ASHIFT
, SCI_CHARLEFTRECTEXTEND
},
115 {SCK_RIGHT
, SCI_NORM
, SCI_CHARRIGHT
},
116 {SCK_RIGHT
, SCI_SHIFT
, SCI_CHARRIGHTEXTEND
},
117 {SCK_RIGHT
, SCI_CTRL_META
, SCI_WORDRIGHT
},
118 {SCK_RIGHT
, SCI_SCTRL_META
, SCI_WORDRIGHTEXTEND
},
119 {SCK_RIGHT
, SCI_ASHIFT
, SCI_CHARRIGHTRECTEXTEND
},
120 {'/', SCI_CTRL
, SCI_WORDPARTLEFT
},
121 {'/', SCI_CSHIFT
, SCI_WORDPARTLEFTEXTEND
},
122 {'\\', SCI_CTRL
, SCI_WORDPARTRIGHT
},
123 {'\\', SCI_CSHIFT
, SCI_WORDPARTRIGHTEXTEND
},
124 {SCK_HOME
, SCI_NORM
, SCI_VCHOME
},
125 {SCK_HOME
, SCI_SHIFT
, SCI_VCHOMEEXTEND
},
126 {SCK_HOME
, SCI_CTRL
, SCI_DOCUMENTSTART
},
127 {SCK_HOME
, SCI_CSHIFT
, SCI_DOCUMENTSTARTEXTEND
},
128 {SCK_HOME
, SCI_ALT
, SCI_HOMEDISPLAY
},
129 {SCK_HOME
, SCI_ASHIFT
, SCI_VCHOMERECTEXTEND
},
130 {SCK_END
, SCI_NORM
, SCI_LINEEND
},
131 {SCK_END
, SCI_SHIFT
, SCI_LINEENDEXTEND
},
132 {SCK_END
, SCI_CTRL
, SCI_DOCUMENTEND
},
133 {SCK_END
, SCI_CSHIFT
, SCI_DOCUMENTENDEXTEND
},
134 {SCK_END
, SCI_ALT
, SCI_LINEENDDISPLAY
},
135 {SCK_END
, SCI_ASHIFT
, SCI_LINEENDRECTEXTEND
},
136 {SCK_PRIOR
, SCI_NORM
, SCI_PAGEUP
},
137 {SCK_PRIOR
, SCI_SHIFT
, SCI_PAGEUPEXTEND
},
138 {SCK_PRIOR
, SCI_ASHIFT
, SCI_PAGEUPRECTEXTEND
},
139 {SCK_NEXT
, SCI_NORM
, SCI_PAGEDOWN
},
140 {SCK_NEXT
, SCI_SHIFT
, SCI_PAGEDOWNEXTEND
},
141 {SCK_NEXT
, SCI_ASHIFT
, SCI_PAGEDOWNRECTEXTEND
},
142 {SCK_DELETE
, SCI_NORM
, SCI_CLEAR
},
143 {SCK_DELETE
, SCI_SHIFT
, SCI_CUT
},
144 {SCK_DELETE
, SCI_CTRL
, SCI_DELWORDRIGHT
},
145 {SCK_DELETE
, SCI_CSHIFT
, SCI_DELLINERIGHT
},
146 {SCK_INSERT
, SCI_NORM
, SCI_EDITTOGGLEOVERTYPE
},
147 {SCK_INSERT
, SCI_SHIFT
, SCI_PASTE
},
148 {SCK_INSERT
, SCI_CTRL
, SCI_COPY
},
149 {SCK_ESCAPE
, SCI_NORM
, SCI_CANCEL
},
150 {SCK_BACK
, SCI_NORM
, SCI_DELETEBACK
},
151 {SCK_BACK
, SCI_SHIFT
, SCI_DELETEBACK
},
152 {SCK_BACK
, SCI_CTRL
, SCI_DELWORDLEFT
},
153 {SCK_BACK
, SCI_ALT
, SCI_UNDO
},
154 {SCK_BACK
, SCI_CSHIFT
, SCI_DELLINELEFT
},
155 {'Z', SCI_CTRL
, SCI_UNDO
},
157 {'Z', SCI_CSHIFT
, SCI_REDO
},
159 {'Y', SCI_CTRL
, SCI_REDO
},
161 {'X', SCI_CTRL
, SCI_CUT
},
162 {'C', SCI_CTRL
, SCI_COPY
},
163 {'V', SCI_CTRL
, SCI_PASTE
},
164 {'A', SCI_CTRL
, SCI_SELECTALL
},
165 {SCK_TAB
, SCI_NORM
, SCI_TAB
},
166 {SCK_TAB
, SCI_SHIFT
, SCI_BACKTAB
},
167 {SCK_RETURN
, SCI_NORM
, SCI_NEWLINE
},
168 {SCK_RETURN
, SCI_SHIFT
, SCI_NEWLINE
},
169 {SCK_ADD
, SCI_CTRL
, SCI_ZOOMIN
},
170 {SCK_SUBTRACT
, SCI_CTRL
, SCI_ZOOMOUT
},
171 {SCK_DIVIDE
, SCI_CTRL
, SCI_SETZOOM
},
172 {'L', SCI_CTRL
, SCI_LINECUT
},
173 {'L', SCI_CSHIFT
, SCI_LINEDELETE
},
174 {'T', SCI_CSHIFT
, SCI_LINECOPY
},
175 {'T', SCI_CTRL
, SCI_LINETRANSPOSE
},
176 {'D', SCI_CTRL
, SCI_SELECTIONDUPLICATE
},
177 {'U', SCI_CTRL
, SCI_LOWERCASE
},
178 {'U', SCI_CSHIFT
, SCI_UPPERCASE
},