codemirror-rails 2.23 → 2.24
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +163 -88
- data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +1 -1
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +85 -202
- data/vendor/assets/javascripts/codemirror/modes/clike.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +3 -1
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +4 -3
- data/vendor/assets/javascripts/codemirror/modes/less.js +27 -13
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/php.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/pig.js +172 -0
- data/vendor/assets/javascripts/codemirror/modes/python.js +1 -0
- data/vendor/assets/javascripts/codemirror/modes/rpm-spec.css +5 -0
- data/vendor/assets/javascripts/codemirror/modes/rst.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/shell.js +103 -0
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +316 -0
- data/vendor/assets/javascripts/codemirror/modes/xml.js +63 -6
- data/vendor/assets/javascripts/codemirror/utils/foldcode.js +13 -8
- data/vendor/assets/javascripts/codemirror/utils/loadmode.js +50 -0
- data/vendor/assets/javascripts/codemirror/utils/overlay.js +1 -1
- data/vendor/assets/javascripts/codemirror/utils/search.js +2 -2
- data/vendor/assets/stylesheets/codemirror.css +2 -0
- data/vendor/assets/stylesheets/codemirror/modes/tiki.css +26 -0
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +82 -0
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +25 -0
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +1 -1
- metadata +12 -4
@@ -78,21 +78,41 @@
|
|
78
78
|
}
|
79
79
|
cm.setCursor(start);
|
80
80
|
}
|
81
|
+
function goLineStartText(cm) {
|
82
|
+
// Go to the start of the line where the text begins, or the end for whitespace-only lines
|
83
|
+
var cur = cm.getCursor(), firstNonWS = cm.getLine(cur.line).search(/\S/);
|
84
|
+
cm.setCursor(cur.line, firstNonWS == -1 ? line.length : firstNonWS, true);
|
85
|
+
}
|
81
86
|
|
82
87
|
var map = CodeMirror.keyMap.vim = {
|
83
88
|
"0": function(cm) {count.length > 0 ? pushCountDigit("0")(cm) : CodeMirror.commands.goLineStart(cm);},
|
89
|
+
// Pipe (|); TODO: should be *screen* chars, so need a util function to turn tabs into spaces?
|
90
|
+
"'|'": function(cm) {cm.setCursor(cm.getCursor().line, popCount() - 1, true);},
|
91
|
+
"'^'": function(cm) {popCount(); goLineStartText(cm);},
|
84
92
|
"A": function(cm) {popCount(); cm.setCursor(cm.getCursor().line, cm.getCursor().ch+1, true); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
85
93
|
"Shift-A": function(cm) {popCount(); CodeMirror.commands.goLineEnd(cm); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
86
94
|
"I": function(cm) {popCount(); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
87
|
-
"Shift-I": function(cm) {popCount();
|
88
|
-
"O": function(cm) {popCount(); CodeMirror.commands.goLineEnd(cm);
|
89
|
-
"Shift-O": function(cm) {popCount(); CodeMirror.commands.goLineStart(cm); cm.replaceSelection("\n", "start"); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
95
|
+
"Shift-I": function(cm) {popCount(); goLineStartText(cm); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
96
|
+
"O": function(cm) {popCount(); CodeMirror.commands.goLineEnd(cm); CodeMirror.commands.newlineAndIndent(cm); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
97
|
+
"Shift-O": function(cm) {popCount(); CodeMirror.commands.goLineStart(cm); cm.replaceSelection("\n", "start"); cm.indentLine(cm.getCursor().line); cm.setOption("keyMap", "vim-insert"); editCursor("vim-insert");},
|
90
98
|
"G": function(cm) {cm.setOption("keyMap", "vim-prefix-g");},
|
91
99
|
"D": function(cm) {cm.setOption("keyMap", "vim-prefix-d"); emptyBuffer();},
|
100
|
+
"Shift-D": function(cm) {
|
101
|
+
emptyBuffer();
|
102
|
+
mark["Shift-D"] = cm.getCursor(false).line;
|
103
|
+
cm.setCursor(cm.getCursor(true).line);
|
104
|
+
delTillMark(cm,"Shift-D"); mark = [];
|
105
|
+
},
|
92
106
|
"M": function(cm) {cm.setOption("keyMap", "vim-prefix-m"); mark = [];},
|
93
107
|
"Y": function(cm) {cm.setOption("keyMap", "vim-prefix-y"); emptyBuffer(); yank = 0;},
|
108
|
+
"Shift-Y": function(cm) {
|
109
|
+
emptyBuffer();
|
110
|
+
mark["Shift-D"] = cm.getCursor(false).line;
|
111
|
+
cm.setCursor(cm.getCursor(true).line);
|
112
|
+
yankTillMark(cm,"Shift-D"); mark = [];
|
113
|
+
},
|
94
114
|
"/": function(cm) {var f = CodeMirror.commands.find; f && f(cm); sdir = "f"},
|
95
|
-
"
|
115
|
+
"'?'": function(cm) {
|
96
116
|
var f = CodeMirror.commands.find;
|
97
117
|
if (f) { f(cm); CodeMirror.commands.findPrev(cm); sdir = "r"; }
|
98
118
|
},
|
@@ -105,240 +125,103 @@
|
|
105
125
|
if (fn) sdir != "r" ? CodeMirror.commands.findPrev(cm) : fn.findNext(cm);
|
106
126
|
},
|
107
127
|
"Shift-G": function(cm) {count == "" ? cm.setCursor(cm.lineCount()) : cm.setCursor(parseInt(count)-1); popCount(); CodeMirror.commands.goLineStart(cm);},
|
108
|
-
|
128
|
+
nofallthrough: true
|
109
129
|
};
|
110
130
|
// Add bindings for number keys
|
111
131
|
for (var i = 1; i < 10; ++i) map[i] = pushCountDigit(i);
|
112
132
|
// Add bindings that are influenced by number keys
|
113
|
-
iterObj({
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
133
|
+
iterObj({
|
134
|
+
"H": "goColumnLeft", "L": "goColumnRight", "J": "goLineDown",
|
135
|
+
"K": "goLineUp", "Left": "goColumnLeft", "Right": "goColumnRight",
|
136
|
+
"Down": "goLineDown", "Up": "goLineUp", "Backspace": "goCharLeft",
|
137
|
+
"Space": "goCharRight",
|
138
|
+
"B": function(cm) {moveToWord(cm, word, -1, "end");},
|
139
|
+
"E": function(cm) {moveToWord(cm, word, 1, "end");},
|
140
|
+
"W": function(cm) {moveToWord(cm, word, 1, "start");},
|
141
|
+
"Shift-B": function(cm) {moveToWord(cm, bigWord, -1, "end");},
|
142
|
+
"Shift-E": function(cm) {moveToWord(cm, bigWord, 1, "end");},
|
143
|
+
"Shift-W": function(cm) {moveToWord(cm, bigWord, 1, "start");},
|
144
|
+
"X": function(cm) {CodeMirror.commands.delCharRight(cm)},
|
145
|
+
"P": function(cm) {
|
146
|
+
var cur = cm.getCursor().line;
|
147
|
+
if (buf!= "") {
|
148
|
+
CodeMirror.commands.goLineEnd(cm);
|
149
|
+
cm.replaceSelection(buf, "end");
|
150
|
+
}
|
151
|
+
cm.setCursor(cur+1);
|
152
|
+
},
|
153
|
+
"Shift-X": function(cm) {CodeMirror.commands.delCharLeft(cm)},
|
154
|
+
"Shift-J": function(cm) {joinLineNext(cm)},
|
155
|
+
"'~'": function(cm) {
|
156
|
+
var cur = cm.getCursor(), cHar = cm.getRange({line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
|
157
|
+
cHar = cHar != cHar.toLowerCase() ? cHar.toLowerCase() : cHar.toUpperCase();
|
158
|
+
cm.replaceRange(cHar, {line: cur.line, ch: cur.ch}, {line: cur.line, ch: cur.ch+1});
|
159
|
+
cm.setCursor(cur.line, cur.ch+1);
|
160
|
+
},
|
161
|
+
"Ctrl-B": function(cm) {CodeMirror.commands.goPageUp(cm)},
|
162
|
+
"Ctrl-F": function(cm) {CodeMirror.commands.goPageDown(cm)},
|
163
|
+
"Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
|
164
|
+
"U": "undo", "Ctrl-R": "redo", "'$'": "goLineEnd"
|
165
|
+
}, function(key, cmd) { map[key] = countTimes(cmd); });
|
144
166
|
|
145
167
|
CodeMirror.keyMap["vim-prefix-g"] = {
|
146
168
|
"E": countTimes(function(cm) { moveToWord(cm, word, -1, "start");}),
|
147
169
|
"Shift-E": countTimes(function(cm) { moveToWord(cm, bigWord, -1, "start");}),
|
148
170
|
auto: "vim",
|
149
|
-
|
171
|
+
nofallthrough: true
|
150
172
|
};
|
151
173
|
|
152
174
|
CodeMirror.keyMap["vim-prefix-m"] = {
|
153
|
-
"A": function(cm) {mark["A"] = cm.getCursor().line;},
|
154
|
-
"Shift-A": function(cm) {mark["Shift-A"] = cm.getCursor().line;},
|
155
|
-
"B": function(cm) {mark["B"] = cm.getCursor().line;},
|
156
|
-
"Shift-B": function(cm) {mark["Shift-B"] = cm.getCursor().line;},
|
157
|
-
"C": function(cm) {mark["C"] = cm.getCursor().line;},
|
158
|
-
"Shift-C": function(cm) {mark["Shift-C"] = cm.getCursor().line;},
|
159
|
-
"D": function(cm) {mark["D"] = cm.getCursor().line;},
|
160
|
-
"Shift-D": function(cm) {mark["Shift-D"] = cm.getCursor().line;},
|
161
|
-
"E": function(cm) {mark["E"] = cm.getCursor().line;},
|
162
|
-
"Shift-E": function(cm) {mark["Shift-E"] = cm.getCursor().line;},
|
163
|
-
"F": function(cm) {mark["F"] = cm.getCursor().line;},
|
164
|
-
"Shift-F": function(cm) {mark["Shift-F"] = cm.getCursor().line;},
|
165
|
-
"G": function(cm) {mark["G"] = cm.getCursor().line;},
|
166
|
-
"Shift-G": function(cm) {mark["Shift-G"] = cm.getCursor().line;},
|
167
|
-
"H": function(cm) {mark["H"] = cm.getCursor().line;},
|
168
|
-
"Shift-H": function(cm) {mark["Shift-H"] = cm.getCursor().line;},
|
169
|
-
"I": function(cm) {mark["I"] = cm.getCursor().line;},
|
170
|
-
"Shift-I": function(cm) {mark["Shift-I"] = cm.getCursor().line;},
|
171
|
-
"J": function(cm) {mark["J"] = cm.getCursor().line;},
|
172
|
-
"Shift-J": function(cm) {mark["Shift-J"] = cm.getCursor().line;},
|
173
|
-
"K": function(cm) {mark["K"] = cm.getCursor().line;},
|
174
|
-
"Shift-K": function(cm) {mark["Shift-K"] = cm.getCursor().line;},
|
175
|
-
"L": function(cm) {mark["L"] = cm.getCursor().line;},
|
176
|
-
"Shift-L": function(cm) {mark["Shift-L"] = cm.getCursor().line;},
|
177
|
-
"M": function(cm) {mark["M"] = cm.getCursor().line;},
|
178
|
-
"Shift-M": function(cm) {mark["Shift-M"] = cm.getCursor().line;},
|
179
|
-
"N": function(cm) {mark["N"] = cm.getCursor().line;},
|
180
|
-
"Shift-N": function(cm) {mark["Shift-N"] = cm.getCursor().line;},
|
181
|
-
"O": function(cm) {mark["O"] = cm.getCursor().line;},
|
182
|
-
"Shift-O": function(cm) {mark["Shift-O"] = cm.getCursor().line;},
|
183
|
-
"P": function(cm) {mark["P"] = cm.getCursor().line;},
|
184
|
-
"Shift-P": function(cm) {mark["Shift-P"] = cm.getCursor().line;},
|
185
|
-
"Q": function(cm) {mark["Q"] = cm.getCursor().line;},
|
186
|
-
"Shift-Q": function(cm) {mark["Shift-Q"] = cm.getCursor().line;},
|
187
|
-
"R": function(cm) {mark["R"] = cm.getCursor().line;},
|
188
|
-
"Shift-R": function(cm) {mark["Shift-R"] = cm.getCursor().line;},
|
189
|
-
"S": function(cm) {mark["S"] = cm.getCursor().line;},
|
190
|
-
"Shift-S": function(cm) {mark["Shift-S"] = cm.getCursor().line;},
|
191
|
-
"T": function(cm) {mark["T"] = cm.getCursor().line;},
|
192
|
-
"Shift-T": function(cm) {mark["Shift-T"] = cm.getCursor().line;},
|
193
|
-
"U": function(cm) {mark["U"] = cm.getCursor().line;},
|
194
|
-
"Shift-U": function(cm) {mark["Shift-U"] = cm.getCursor().line;},
|
195
|
-
"V": function(cm) {mark["V"] = cm.getCursor().line;},
|
196
|
-
"Shift-V": function(cm) {mark["Shift-V"] = cm.getCursor().line;},
|
197
|
-
"W": function(cm) {mark["W"] = cm.getCursor().line;},
|
198
|
-
"Shift-W": function(cm) {mark["Shift-W"] = cm.getCursor().line;},
|
199
|
-
"X": function(cm) {mark["X"] = cm.getCursor().line;},
|
200
|
-
"Shift-X": function(cm) {mark["Shift-X"] = cm.getCursor().line;},
|
201
|
-
"Y": function(cm) {mark["Y"] = cm.getCursor().line;},
|
202
|
-
"Shift-Y": function(cm) {mark["Shift-Y"] = cm.getCursor().line;},
|
203
|
-
"Z": function(cm) {mark["Z"] = cm.getCursor().line;},
|
204
|
-
"Shift-Z": function(cm) {mark["Shift-Z"] = cm.getCursor().line;},
|
205
175
|
auto: "vim",
|
206
|
-
|
207
|
-
}
|
176
|
+
nofallthrough: true
|
177
|
+
};
|
208
178
|
|
209
179
|
CodeMirror.keyMap["vim-prefix-d"] = {
|
210
180
|
"D": countTimes(function(cm) { pushInBuffer("\n"+cm.getLine(cm.getCursor().line)); cm.removeLine(cm.getCursor().line); }),
|
211
181
|
"'": function(cm) {cm.setOption("keyMap", "vim-prefix-d'"); emptyBuffer();},
|
212
182
|
auto: "vim",
|
213
|
-
|
183
|
+
nofallthrough: true
|
214
184
|
};
|
215
185
|
|
216
186
|
CodeMirror.keyMap["vim-prefix-d'"] = {
|
217
|
-
"A": function(cm) {delTillMark(cm,"A");},
|
218
|
-
"Shift-A": function(cm) {delTillMark(cm,"Shift-A");},
|
219
|
-
"B": function(cm) {delTillMark(cm,"B");},
|
220
|
-
"Shift-B": function(cm) {delTillMark(cm,"Shift-B");},
|
221
|
-
"C": function(cm) {delTillMark(cm,"C");},
|
222
|
-
"Shift-C": function(cm) {delTillMark(cm,"Shift-C");},
|
223
|
-
"D": function(cm) {delTillMark(cm,"D");},
|
224
|
-
"Shift-D": function(cm) {delTillMark(cm,"Shift-D");},
|
225
|
-
"E": function(cm) {delTillMark(cm,"E");},
|
226
|
-
"Shift-E": function(cm) {delTillMark(cm,"Shift-E");},
|
227
|
-
"F": function(cm) {delTillMark(cm,"F");},
|
228
|
-
"Shift-F": function(cm) {delTillMark(cm,"Shift-F");},
|
229
|
-
"G": function(cm) {delTillMark(cm,"G");},
|
230
|
-
"Shift-G": function(cm) {delTillMark(cm,"Shift-G");},
|
231
|
-
"H": function(cm) {delTillMark(cm,"H");},
|
232
|
-
"Shift-H": function(cm) {delTillMark(cm,"Shift-H");},
|
233
|
-
"I": function(cm) {delTillMark(cm,"I");},
|
234
|
-
"Shift-I": function(cm) {delTillMark(cm,"Shift-I");},
|
235
|
-
"J": function(cm) {delTillMark(cm,"J");},
|
236
|
-
"Shift-J": function(cm) {delTillMark(cm,"Shift-J");},
|
237
|
-
"K": function(cm) {delTillMark(cm,"K");},
|
238
|
-
"Shift-K": function(cm) {delTillMark(cm,"Shift-K");},
|
239
|
-
"L": function(cm) {delTillMark(cm,"L");},
|
240
|
-
"Shift-L": function(cm) {delTillMark(cm,"Shift-L");},
|
241
|
-
"M": function(cm) {delTillMark(cm,"M");},
|
242
|
-
"Shift-M": function(cm) {delTillMark(cm,"Shift-M");},
|
243
|
-
"N": function(cm) {delTillMark(cm,"N");},
|
244
|
-
"Shift-N": function(cm) {delTillMark(cm,"Shift-N");},
|
245
|
-
"O": function(cm) {delTillMark(cm,"O");},
|
246
|
-
"Shift-O": function(cm) {delTillMark(cm,"Shift-O");},
|
247
|
-
"P": function(cm) {delTillMark(cm,"P");},
|
248
|
-
"Shift-P": function(cm) {delTillMark(cm,"Shift-P");},
|
249
|
-
"Q": function(cm) {delTillMark(cm,"Q");},
|
250
|
-
"Shift-Q": function(cm) {delTillMark(cm,"Shift-Q");},
|
251
|
-
"R": function(cm) {delTillMark(cm,"R");},
|
252
|
-
"Shift-R": function(cm) {delTillMark(cm,"Shift-R");},
|
253
|
-
"S": function(cm) {delTillMark(cm,"S");},
|
254
|
-
"Shift-S": function(cm) {delTillMark(cm,"Shift-S");},
|
255
|
-
"T": function(cm) {delTillMark(cm,"T");},
|
256
|
-
"Shift-T": function(cm) {delTillMark(cm,"Shift-T");},
|
257
|
-
"U": function(cm) {delTillMark(cm,"U");},
|
258
|
-
"Shift-U": function(cm) {delTillMark(cm,"Shift-U");},
|
259
|
-
"V": function(cm) {delTillMark(cm,"V");},
|
260
|
-
"Shift-V": function(cm) {delTillMark(cm,"Shift-V");},
|
261
|
-
"W": function(cm) {delTillMark(cm,"W");},
|
262
|
-
"Shift-W": function(cm) {delTillMark(cm,"Shift-W");},
|
263
|
-
"X": function(cm) {delTillMark(cm,"X");},
|
264
|
-
"Shift-X": function(cm) {delTillMark(cm,"Shift-X");},
|
265
|
-
"Y": function(cm) {delTillMark(cm,"Y");},
|
266
|
-
"Shift-Y": function(cm) {delTillMark(cm,"Shift-Y");},
|
267
|
-
"Z": function(cm) {delTillMark(cm,"Z");},
|
268
|
-
"Shift-Z": function(cm) {delTillMark(cm,"Shift-Z");},
|
269
187
|
auto: "vim",
|
270
|
-
|
188
|
+
nofallthrough: true
|
271
189
|
};
|
272
190
|
|
273
191
|
CodeMirror.keyMap["vim-prefix-y'"] = {
|
274
|
-
"A": function(cm) {yankTillMark(cm,"A");},
|
275
|
-
"Shift-A": function(cm) {yankTillMark(cm,"Shift-A");},
|
276
|
-
"B": function(cm) {yankTillMark(cm,"B");},
|
277
|
-
"Shift-B": function(cm) {yankTillMark(cm,"Shift-B");},
|
278
|
-
"C": function(cm) {yankTillMark(cm,"C");},
|
279
|
-
"Shift-C": function(cm) {yankTillMark(cm,"Shift-C");},
|
280
|
-
"D": function(cm) {yankTillMark(cm,"D");},
|
281
|
-
"Shift-D": function(cm) {yankTillMark(cm,"Shift-D");},
|
282
|
-
"E": function(cm) {yankTillMark(cm,"E");},
|
283
|
-
"Shift-E": function(cm) {yankTillMark(cm,"Shift-E");},
|
284
|
-
"F": function(cm) {yankTillMark(cm,"F");},
|
285
|
-
"Shift-F": function(cm) {yankTillMark(cm,"Shift-F");},
|
286
|
-
"G": function(cm) {yankTillMark(cm,"G");},
|
287
|
-
"Shift-G": function(cm) {yankTillMark(cm,"Shift-G");},
|
288
|
-
"H": function(cm) {yankTillMark(cm,"H");},
|
289
|
-
"Shift-H": function(cm) {yankTillMark(cm,"Shift-H");},
|
290
|
-
"I": function(cm) {yankTillMark(cm,"I");},
|
291
|
-
"Shift-I": function(cm) {yankTillMark(cm,"Shift-I");},
|
292
|
-
"J": function(cm) {yankTillMark(cm,"J");},
|
293
|
-
"Shift-J": function(cm) {yankTillMark(cm,"Shift-J");},
|
294
|
-
"K": function(cm) {yankTillMark(cm,"K");},
|
295
|
-
"Shift-K": function(cm) {yankTillMark(cm,"Shift-K");},
|
296
|
-
"L": function(cm) {yankTillMark(cm,"L");},
|
297
|
-
"Shift-L": function(cm) {yankTillMark(cm,"Shift-L");},
|
298
|
-
"M": function(cm) {yankTillMark(cm,"M");},
|
299
|
-
"Shift-M": function(cm) {yankTillMark(cm,"Shift-M");},
|
300
|
-
"N": function(cm) {yankTillMark(cm,"N");},
|
301
|
-
"Shift-N": function(cm) {yankTillMark(cm,"Shift-N");},
|
302
|
-
"O": function(cm) {yankTillMark(cm,"O");},
|
303
|
-
"Shift-O": function(cm) {yankTillMark(cm,"Shift-O");},
|
304
|
-
"P": function(cm) {yankTillMark(cm,"P");},
|
305
|
-
"Shift-P": function(cm) {yankTillMark(cm,"Shift-P");},
|
306
|
-
"Q": function(cm) {yankTillMark(cm,"Q");},
|
307
|
-
"Shift-Q": function(cm) {yankTillMark(cm,"Shift-Q");},
|
308
|
-
"R": function(cm) {yankTillMark(cm,"R");},
|
309
|
-
"Shift-R": function(cm) {yankTillMark(cm,"Shift-R");},
|
310
|
-
"S": function(cm) {yankTillMark(cm,"S");},
|
311
|
-
"Shift-S": function(cm) {yankTillMark(cm,"Shift-S");},
|
312
|
-
"T": function(cm) {yankTillMark(cm,"T");},
|
313
|
-
"Shift-T": function(cm) {yankTillMark(cm,"Shift-T");},
|
314
|
-
"U": function(cm) {yankTillMark(cm,"U");},
|
315
|
-
"Shift-U": function(cm) {yankTillMark(cm,"Shift-U");},
|
316
|
-
"V": function(cm) {yankTillMark(cm,"V");},
|
317
|
-
"Shift-V": function(cm) {yankTillMark(cm,"Shift-V");},
|
318
|
-
"W": function(cm) {yankTillMark(cm,"W");},
|
319
|
-
"Shift-W": function(cm) {yankTillMark(cm,"Shift-W");},
|
320
|
-
"X": function(cm) {yankTillMark(cm,"X");},
|
321
|
-
"Shift-X": function(cm) {yankTillMark(cm,"Shift-X");},
|
322
|
-
"Y": function(cm) {yankTillMark(cm,"Y");},
|
323
|
-
"Shift-Y": function(cm) {yankTillMark(cm,"Shift-Y");},
|
324
|
-
"Z": function(cm) {yankTillMark(cm,"Z");},
|
325
|
-
"Shift-Z": function(cm) {yankTillMark(cm,"Shift-Z");},
|
326
192
|
auto: "vim",
|
327
|
-
|
193
|
+
nofallthrough: true
|
328
194
|
};
|
329
195
|
|
196
|
+
// iterate through uppercase alphabet char codes
|
197
|
+
for (var i = 65; i < 65 + 26; i++) {
|
198
|
+
// apply for `letter` and 'Shift-' + `letter`
|
199
|
+
for (var m = String.fromCharCode(i); m.length < 8; m = "Shift-" + m) {
|
200
|
+
CodeMirror.keyMap["vim-prefix-m"][m] = function(cm) {
|
201
|
+
mark[m] = cm.getCursor().line;
|
202
|
+
};
|
203
|
+
CodeMirror.keyMap["vim-prefix-d'"][m] = function(cm) {
|
204
|
+
delTillMark(cm,m);
|
205
|
+
};
|
206
|
+
CodeMirror.keyMap["vim-prefix-y'"][m] = function(cm) {
|
207
|
+
yankTillMark(cm,m);
|
208
|
+
};
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
330
212
|
CodeMirror.keyMap["vim-prefix-y"] = {
|
331
213
|
"Y": countTimes(function(cm) { pushInBuffer("\n"+cm.getLine(cm.getCursor().line+yank)); yank++; }),
|
332
214
|
"'": function(cm) {cm.setOption("keyMap", "vim-prefix-y'"); emptyBuffer();},
|
333
215
|
auto: "vim",
|
334
|
-
|
216
|
+
nofallthrough: true
|
335
217
|
};
|
336
218
|
|
337
219
|
CodeMirror.keyMap["vim-insert"] = {
|
220
|
+
// TODO: override navigation keys so that Esc will cancel automatic indentation from o, O, i_<CR>
|
338
221
|
"Esc": function(cm) {
|
339
|
-
|
340
|
-
|
341
|
-
|
222
|
+
cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1, true);
|
223
|
+
cm.setOption("keyMap", "vim");
|
224
|
+
editCursor("vim");
|
342
225
|
},
|
343
226
|
"Ctrl-N": function(cm) {/* Code to bring up autocomplete hint */},
|
344
227
|
"Ctrl-P": function(cm) {/* Code to bring up autocomplete hint */},
|
@@ -61,7 +61,7 @@ CodeMirror.defineMode("htmlembedded", function(config, parserConfig) {
|
|
61
61
|
|
62
62
|
electricChars: "/{}:"
|
63
63
|
}
|
64
|
-
});
|
64
|
+
}, "htmlmixed");
|
65
65
|
|
66
66
|
CodeMirror.defineMIME("application/x-ejs", { name: "htmlembedded", scriptingModeSpec:"javascript"});
|
67
67
|
CodeMirror.defineMIME("application/x-aspx", { name: "htmlembedded", scriptingModeSpec:"text/x-csharp"});
|
@@ -73,11 +73,13 @@ CodeMirror.defineMode("htmlmixed", function(config, parserConfig) {
|
|
73
73
|
},
|
74
74
|
|
75
75
|
compareStates: function(a, b) {
|
76
|
+
if (a.mode != b.mode) return false;
|
77
|
+
if (a.localState) return CodeMirror.Pass;
|
76
78
|
return htmlMode.compareStates(a.htmlState, b.htmlState);
|
77
79
|
},
|
78
80
|
|
79
81
|
electricChars: "/{}:"
|
80
82
|
}
|
81
|
-
});
|
83
|
+
}, "xml", "javascript", "css");
|
82
84
|
|
83
85
|
CodeMirror.defineMIME("text/html", "htmlmixed");
|
@@ -243,7 +243,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
243
243
|
|
244
244
|
function maybeoperator(type, value) {
|
245
245
|
if (type == "operator" && /\+\+|--/.test(value)) return cont(maybeoperator);
|
246
|
-
if (type == "operator") return cont(expression);
|
246
|
+
if (type == "operator" || type == ":") return cont(expression);
|
247
247
|
if (type == ";") return;
|
248
248
|
if (type == "(") return cont(pushlex(")"), commasep(expression, ")"), poplex, maybeoperator);
|
249
249
|
if (type == ".") return cont(property, maybeoperator);
|
@@ -341,8 +341,9 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) {
|
|
341
341
|
|
342
342
|
indent: function(state, textAfter) {
|
343
343
|
if (state.tokenize != jsTokenBase) return 0;
|
344
|
-
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical
|
345
|
-
|
344
|
+
var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical;
|
345
|
+
if (lexical.type == "stat" && firstChar == "}") lexical = lexical.prev;
|
346
|
+
var type = lexical.type, closing = firstChar == type;
|
346
347
|
if (type == "vardef") return lexical.indented + 4;
|
347
348
|
else if (type == "form" && firstChar == "{") return lexical.indented;
|
348
349
|
else if (type == "stat" || type == "form") return lexical.indented + indentUnit;
|
@@ -41,7 +41,7 @@ CodeMirror.defineMode("css", function(config) {
|
|
41
41
|
return tokenSComment(stream, state);
|
42
42
|
}else{
|
43
43
|
stream.eatWhile(/[\a-zA-Z0-9\-_.\s]/);
|
44
|
-
if(/\/|\)
|
44
|
+
if(/\/|\)|#/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == ")")))return ret("string", "string");//let url(/images/logo.png) without quotes return as string
|
45
45
|
return ret("number", "unit");
|
46
46
|
}
|
47
47
|
}
|
@@ -105,21 +105,33 @@ CodeMirror.defineMode("css", function(config) {
|
|
105
105
|
stream.eatWhile(/[\w\-]/);
|
106
106
|
return ret(null, ch);
|
107
107
|
}
|
108
|
-
else if (ch == "&") {
|
109
|
-
stream.eatWhile(/[\w\-]/);
|
110
|
-
return ret(null, ch);
|
111
|
-
}
|
112
108
|
else {
|
113
|
-
stream.eatWhile(/[\w\\\-_
|
114
|
-
if(
|
115
|
-
stream.eatWhile(/[
|
116
|
-
|
117
|
-
}else if(
|
118
|
-
|
109
|
+
stream.eatWhile(/[\w\\\-_%.{]/);
|
110
|
+
if(stream.current().match(/http|https/) != null){
|
111
|
+
stream.eatWhile(/[\w\\\-_%.{:\/]/);
|
112
|
+
return ret("string", "string");
|
113
|
+
}else if(stream.peek() == "<" || stream.peek() == ">"){
|
114
|
+
return ret("tag", "tag");
|
115
|
+
}else if( stream.peek().match(/\(/) != null ){// lessc
|
116
|
+
return ret(null, ch);
|
117
|
+
}else if (stream.peek() == "/" && state.stack[state.stack.length-1] != undefined){ // url(dir/center/image.png)
|
118
|
+
return ret("string", "string");
|
119
|
+
}else if( stream.current().match(/\-\d|\-.\d/) ){ // lesscss match e.g.: -5px -0.4 etc... only colorize the minus sign
|
120
|
+
//stream.backUp(stream.current().length-1); //commment out these 2 comment if you want the minus sign to be parsed as null -500px
|
121
|
+
//return ret(null, ch);
|
122
|
+
return ret("number", "unit");
|
119
123
|
}else if( inTagsArray(stream.current()) ){ // lesscss match html tags
|
120
124
|
return ret("tag", "tag");
|
121
|
-
}else if(
|
125
|
+
}else if( /\/|[\s\)]/.test(stream.peek() || stream.eol() || (stream.eatSpace() && stream.peek() == "/")) && stream.current().indexOf(".") !== -1){
|
126
|
+
if(stream.current().substring(stream.current().length-1,stream.current().length) == "{"){
|
127
|
+
stream.backUp(1);
|
128
|
+
return ret("tag", "tag");
|
129
|
+
}//end if
|
130
|
+
if( (stream.eatSpace() && stream.peek().match(/[{<>.a-zA-Z]/) != null) || stream.eol() )return ret("tag", "tag");//e.g. button.icon-plus
|
122
131
|
return ret("string", "string");//let url(/images/logo.png) without quotes return as string
|
132
|
+
}else if( stream.eol() ){
|
133
|
+
if(stream.current().substring(stream.current().length-1,stream.current().length) == "{")stream.backUp(1);
|
134
|
+
return ret("tag", "tag");
|
123
135
|
}else{
|
124
136
|
return ret("variable", "variable");
|
125
137
|
}
|
@@ -215,4 +227,6 @@ CodeMirror.defineMode("css", function(config) {
|
|
215
227
|
};
|
216
228
|
});
|
217
229
|
|
218
|
-
CodeMirror.defineMIME("text/
|
230
|
+
CodeMirror.defineMIME("text/x-less", "less");
|
231
|
+
if (!CodeMirror.mimeModes.hasOwnProperty("text/css"))
|
232
|
+
CodeMirror.defineMIME("text/css", "less");
|