codemirror-rails 4.1 → 4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/codemirror/rails/version.rb +2 -2
- data/vendor/assets/javascripts/codemirror.js +133 -58
- data/vendor/assets/javascripts/codemirror/addons/comment/comment.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/comment/continuecomment.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/display/rulers.js +16 -6
- data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +28 -3
- data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/matchbrackets.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/matchtags.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/trailingspace.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/comment-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +36 -8
- data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/markdown-fold.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +7 -2
- data/vendor/assets/javascripts/codemirror/addons/hint/python-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +74 -36
- data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/coffeescript-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/css-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/lint/yaml-lint.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/loadmode.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/multiplex.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +12 -3
- data/vendor/assets/javascripts/codemirror/addons/runmode/colorize.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode-standalone.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +4 -1
- data/vendor/assets/javascripts/codemirror/addons/scroll/scrollpastend.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +6 -2
- data/vendor/assets/javascripts/codemirror/addons/search/search.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/search/searchcursor.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +23 -16
- data/vendor/assets/javascripts/codemirror/addons/tern/worker.js +3 -0
- data/vendor/assets/javascripts/codemirror/addons/wrap/hardwrap.js +3 -0
- data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +4 -7
- data/vendor/assets/javascripts/codemirror/keymaps/sublime.js +11 -8
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +92 -33
- data/vendor/assets/javascripts/codemirror/modes/apl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/asterisk.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/clike.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/clojure.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/cobol.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/css.js +13 -14
- data/vendor/assets/javascripts/codemirror/modes/cypher.js +146 -0
- data/vendor/assets/javascripts/codemirror/modes/d.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/diff.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/django.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/dtd.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/dylan.js +15 -0
- data/vendor/assets/javascripts/codemirror/modes/ecl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/eiffel.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/erlang.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/fortran.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/gas.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/gfm.js +9 -1
- data/vendor/assets/javascripts/codemirror/modes/gherkin.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/go.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/groovy.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haskell.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/haxe.js +5 -1
- data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/http.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/jade.js +569 -81
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +5 -0
- data/vendor/assets/javascripts/codemirror/modes/jinja2.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/julia.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/livescript.js +17 -17
- data/vendor/assets/javascripts/codemirror/modes/lua.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/markdown.js +5 -3
- data/vendor/assets/javascripts/codemirror/modes/mirc.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/mllike.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/nginx.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/ntriples.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/octave.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/pascal.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/pegjs.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/perl.js +5 -0
- data/vendor/assets/javascripts/codemirror/modes/php.js +5 -2
- data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/properties.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/puppet.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/python.js +284 -328
- data/vendor/assets/javascripts/codemirror/modes/q.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/r.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rpm.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rst.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/ruby.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/rust.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/scheme.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/shell.js +9 -2
- data/vendor/assets/javascripts/codemirror/modes/sieve.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/smartymixed.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/solr.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sparql.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/sql.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/stex.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tcl.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/tiki.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/toml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/turtle.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/vb.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/vbscript.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/velocity.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/verilog.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/xml.js +4 -1
- data/vendor/assets/javascripts/codemirror/modes/xquery.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/yaml.js +3 -0
- data/vendor/assets/javascripts/codemirror/modes/z80.js +3 -0
- data/vendor/assets/stylesheets/codemirror/addons/tern/tern.css +1 -0
- data/vendor/assets/stylesheets/codemirror/themes/neo.css +40 -0
- metadata +4 -2
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
(function(mod) {
|
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
3
6
|
mod(require("../../lib/codemirror"), require("../../mode/sql/sql"));
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
// Utility function that allows modes to be combined. The mode given
|
|
2
5
|
// as the base argument takes care of most of the normal mode
|
|
3
6
|
// functionality, but a second (typically simple) mode is used, which
|
|
4
7
|
// can override the style of text. Both modes get to parse all of the
|
|
5
8
|
// text, but when both assign a non-null style to a piece of code, the
|
|
6
|
-
// overlay wins, unless the combine argument was true
|
|
7
|
-
// the styles are
|
|
9
|
+
// overlay wins, unless the combine argument was true and not overridden,
|
|
10
|
+
// or state.overlay.combineTokens was true, in which case the styles are
|
|
11
|
+
// combined.
|
|
8
12
|
|
|
9
13
|
(function(mod) {
|
|
10
14
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
@@ -54,8 +58,13 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
|
|
|
54
58
|
}
|
|
55
59
|
stream.pos = Math.min(state.basePos, state.overlayPos);
|
|
56
60
|
|
|
61
|
+
// state.overlay.combineTokens always takes precedence over combine,
|
|
62
|
+
// unless set to null
|
|
57
63
|
if (state.overlayCur == null) return state.baseCur;
|
|
58
|
-
if (state.baseCur != null &&
|
|
64
|
+
else if (state.baseCur != null &&
|
|
65
|
+
state.overlay.combineTokens ||
|
|
66
|
+
combine && state.overlay.combineTokens == null)
|
|
67
|
+
return state.baseCur + " " + state.overlayCur;
|
|
59
68
|
else return state.overlayCur;
|
|
60
69
|
},
|
|
61
70
|
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
(function(mod) {
|
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
3
6
|
mod(require("../../lib/codemirror"), require("./runmode"));
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
window.CodeMirror = {};
|
|
2
5
|
|
|
3
6
|
(function() {
|
|
@@ -139,7 +142,7 @@ CodeMirror.runMode = function (string, modespec, callback, options) {
|
|
|
139
142
|
for (var i = 0, e = lines.length; i < e; ++i) {
|
|
140
143
|
if (i) callback("\n");
|
|
141
144
|
var stream = new CodeMirror.StringStream(lines[i]);
|
|
142
|
-
if (!stream.string && mode.blankLine) mode.blankLine();
|
|
145
|
+
if (!stream.string && mode.blankLine) mode.blankLine(state);
|
|
143
146
|
while (!stream.eol()) {
|
|
144
147
|
var style = mode.token(stream, state);
|
|
145
148
|
callback(stream.current(), style, i, stream.start, state);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
(function(mod) {
|
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
3
6
|
mod(require("../../lib/codemirror"));
|
|
@@ -57,7 +60,7 @@ CodeMirror.runMode = function(string, modespec, callback, options) {
|
|
|
57
60
|
for (var i = 0, e = lines.length; i < e; ++i) {
|
|
58
61
|
if (i) callback("\n");
|
|
59
62
|
var stream = new CodeMirror.StringStream(lines[i]);
|
|
60
|
-
if (!stream.string && mode.blankLine) mode.blankLine();
|
|
63
|
+
if (!stream.string && mode.blankLine) mode.blankLine(state);
|
|
61
64
|
while (!stream.eol()) {
|
|
62
65
|
var style = mode.token(stream, state);
|
|
63
66
|
callback(stream.current(), style, i, stream.start, state);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
/* Just enough of CodeMirror to run runMode under node.js */
|
|
2
5
|
|
|
3
6
|
// declare global: StringStream
|
|
@@ -107,7 +110,7 @@ exports.runMode = function(string, modespec, callback, options) {
|
|
|
107
110
|
for (var i = 0, e = lines.length; i < e; ++i) {
|
|
108
111
|
if (i) callback("\n");
|
|
109
112
|
var stream = new exports.StringStream(lines[i]);
|
|
110
|
-
if (!stream.string && mode.blankLine) mode.blankLine();
|
|
113
|
+
if (!stream.string && mode.blankLine) mode.blankLine(state);
|
|
111
114
|
while (!stream.eol()) {
|
|
112
115
|
var style = mode.token(stream, state);
|
|
113
116
|
callback(stream.current(), style, i, stream.start, state);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
// Highlighting text that matches the selection
|
|
2
5
|
//
|
|
3
6
|
// Defines an option highlightSelectionMatches, which, when enabled,
|
|
@@ -76,8 +79,9 @@
|
|
|
76
79
|
cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style));
|
|
77
80
|
return;
|
|
78
81
|
}
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
var from = cm.getCursor("from"), to = cm.getCursor("to");
|
|
83
|
+
if (from.line != to.line) return;
|
|
84
|
+
var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, "");
|
|
81
85
|
if (selection.length >= state.minChars)
|
|
82
86
|
cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style));
|
|
83
87
|
});
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
// Glue code between CodeMirror and Tern.
|
|
2
5
|
//
|
|
3
6
|
// Create a CodeMirror.TernServer to wrap an actual Tern server,
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
// indicate that a file is not available.
|
|
15
18
|
// * fileFilter: A function(value, docName, doc) that will be applied
|
|
16
19
|
// to documents before passing them on to Tern.
|
|
17
|
-
// * switchToDoc: A function(name) that should, when providing a
|
|
20
|
+
// * switchToDoc: A function(name, doc) that should, when providing a
|
|
18
21
|
// multi-file view, switch the view or focus to the named file.
|
|
19
22
|
// * showError: A function(editor, message) that can be used to
|
|
20
23
|
// override the way errors are displayed.
|
|
@@ -72,6 +75,9 @@
|
|
|
72
75
|
this.cachedArgHints = null;
|
|
73
76
|
this.activeArgHints = null;
|
|
74
77
|
this.jumpStack = [];
|
|
78
|
+
|
|
79
|
+
this.getHint = function(cm, c) { return hint(self, cm, c); };
|
|
80
|
+
this.getHint.async = true;
|
|
75
81
|
};
|
|
76
82
|
|
|
77
83
|
CodeMirror.TernServer.prototype = {
|
|
@@ -82,27 +88,24 @@
|
|
|
82
88
|
return this.docs[name] = data;
|
|
83
89
|
},
|
|
84
90
|
|
|
85
|
-
delDoc: function(
|
|
86
|
-
var found = this
|
|
91
|
+
delDoc: function(id) {
|
|
92
|
+
var found = resolveDoc(this, id);
|
|
87
93
|
if (!found) return;
|
|
88
94
|
CodeMirror.off(found.doc, "change", this.trackChange);
|
|
89
|
-
delete this.docs[name];
|
|
90
|
-
this.server.delFile(name);
|
|
95
|
+
delete this.docs[found.name];
|
|
96
|
+
this.server.delFile(found.name);
|
|
91
97
|
},
|
|
92
98
|
|
|
93
|
-
hideDoc: function(
|
|
99
|
+
hideDoc: function(id) {
|
|
94
100
|
closeArgHints(this);
|
|
95
|
-
var found = this
|
|
101
|
+
var found = resolveDoc(this, id);
|
|
96
102
|
if (found && found.changed) sendDoc(this, found);
|
|
97
103
|
},
|
|
98
104
|
|
|
99
105
|
complete: function(cm) {
|
|
100
|
-
|
|
101
|
-
CodeMirror.showHint(cm, function(cm, c) { return hint(self, cm, c); }, {async: true});
|
|
106
|
+
cm.showHint({hint: this.getHint});
|
|
102
107
|
},
|
|
103
108
|
|
|
104
|
-
getHint: function(cm, c) { return hint(this, cm, c); },
|
|
105
|
-
|
|
106
109
|
showType: function(cm, pos) { showType(this, cm, pos); },
|
|
107
110
|
|
|
108
111
|
updateArgHints: function(cm) { updateArgHints(this, cm); },
|
|
@@ -154,6 +157,12 @@
|
|
|
154
157
|
return ts.addDoc(name, doc);
|
|
155
158
|
}
|
|
156
159
|
|
|
160
|
+
function resolveDoc(ts, id) {
|
|
161
|
+
if (typeof id == "string") return ts.docs[id];
|
|
162
|
+
if (id instanceof CodeMirror) id = id.getDoc();
|
|
163
|
+
if (id instanceof CodeMirror.Doc) return findDoc(ts, id);
|
|
164
|
+
}
|
|
165
|
+
|
|
157
166
|
function trackChange(ts, doc, change) {
|
|
158
167
|
var data = findDoc(ts, doc);
|
|
159
168
|
|
|
@@ -381,10 +390,10 @@
|
|
|
381
390
|
}
|
|
382
391
|
|
|
383
392
|
function moveTo(ts, curDoc, doc, start, end) {
|
|
384
|
-
doc.doc.setSelection(
|
|
393
|
+
doc.doc.setSelection(start, end);
|
|
385
394
|
if (curDoc != doc && ts.options.switchToDoc) {
|
|
386
395
|
closeArgHints(ts);
|
|
387
|
-
ts.options.switchToDoc(doc.name);
|
|
396
|
+
ts.options.switchToDoc(doc.name, doc.doc);
|
|
388
397
|
}
|
|
389
398
|
}
|
|
390
399
|
|
|
@@ -429,7 +438,7 @@
|
|
|
429
438
|
|
|
430
439
|
function rename(ts, cm) {
|
|
431
440
|
var token = cm.getTokenAt(cm.getCursor());
|
|
432
|
-
if (!/\w/.test(token.string)) showError(ts, cm, "Not at a variable");
|
|
441
|
+
if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable");
|
|
433
442
|
dialog(cm, "New name for " + token.string, function(newName) {
|
|
434
443
|
ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) {
|
|
435
444
|
if (error) return showError(ts, cm, error);
|
|
@@ -439,8 +448,6 @@
|
|
|
439
448
|
}
|
|
440
449
|
|
|
441
450
|
function selectName(ts, cm) {
|
|
442
|
-
var cur = cm.getCursor(), token = cm.getTokenAt(cur);
|
|
443
|
-
if (!/\w/.test(token.string)) showError(ts, cm, "Not at a variable");
|
|
444
451
|
var name = findDoc(ts, cm.doc).name;
|
|
445
452
|
ts.request(cm, {type: "refs"}, function(error, data) {
|
|
446
453
|
if (error) return showError(ts, cm, error);
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
(function(mod) {
|
|
2
5
|
if (typeof exports == "object" && typeof module == "object") // CommonJS
|
|
3
6
|
mod(require("../lib/codemirror"));
|
|
@@ -324,13 +327,7 @@
|
|
|
324
327
|
},
|
|
325
328
|
"Ctrl-O": repeated(function(cm) { cm.replaceSelection("\n", "start"); }),
|
|
326
329
|
"Ctrl-T": repeated(function(cm) {
|
|
327
|
-
|
|
328
|
-
if (pos.ch < cm.getLine(pos.line).length) pos = Pos(pos.line, pos.ch + 1);
|
|
329
|
-
var from = cm.findPosH(pos, -2, "char");
|
|
330
|
-
var range = cm.getRange(from, pos);
|
|
331
|
-
if (range.length != 2) return;
|
|
332
|
-
cm.setSelection(from, pos);
|
|
333
|
-
cm.replaceSelection(range.charAt(1) + range.charAt(0), null, "+transpose");
|
|
330
|
+
cm.execCommand("transposeChars");
|
|
334
331
|
}),
|
|
335
332
|
|
|
336
333
|
"Alt-C": repeated(function(cm) {
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
// A rough approximation of Sublime Text's keybindings
|
|
2
5
|
// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js
|
|
3
6
|
|
|
@@ -184,9 +187,12 @@
|
|
|
184
187
|
};
|
|
185
188
|
|
|
186
189
|
cmds[map["Shift-" + ctrl + "Up"] = "swapLineUp"] = function(cm) {
|
|
187
|
-
var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1;
|
|
190
|
+
var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = [];
|
|
188
191
|
for (var i = 0; i < ranges.length; i++) {
|
|
189
192
|
var range = ranges[i], from = range.from().line - 1, to = range.to().line;
|
|
193
|
+
newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch),
|
|
194
|
+
head: Pos(range.head.line - 1, range.head.ch)});
|
|
195
|
+
if (range.to().ch == 0 && !range.empty()) --to;
|
|
190
196
|
if (from > at) linesToMove.push(from, to);
|
|
191
197
|
else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
|
|
192
198
|
at = to;
|
|
@@ -196,16 +202,12 @@
|
|
|
196
202
|
var from = linesToMove[i], to = linesToMove[i + 1];
|
|
197
203
|
var line = cm.getLine(from);
|
|
198
204
|
cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine");
|
|
199
|
-
if (to > cm.lastLine())
|
|
205
|
+
if (to > cm.lastLine())
|
|
200
206
|
cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");
|
|
201
|
-
|
|
202
|
-
var head = last.head.line == to ? Pos(to - 1) : last.head;
|
|
203
|
-
var anchor = last.anchor.line == to ? Pos(to - 1) : last.anchor;
|
|
204
|
-
cm.setSelections(sels.slice(0, sels.length - 1).concat([{head: head, anchor: anchor}]));
|
|
205
|
-
} else {
|
|
207
|
+
else
|
|
206
208
|
cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine");
|
|
207
|
-
}
|
|
208
209
|
}
|
|
210
|
+
cm.setSelections(newSels);
|
|
209
211
|
cm.scrollIntoView();
|
|
210
212
|
});
|
|
211
213
|
};
|
|
@@ -214,6 +216,7 @@
|
|
|
214
216
|
var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;
|
|
215
217
|
for (var i = ranges.length - 1; i >= 0; i--) {
|
|
216
218
|
var range = ranges[i], from = range.to().line + 1, to = range.from().line;
|
|
219
|
+
if (range.to().ch == 0 && !range.empty()) from--;
|
|
217
220
|
if (from < at) linesToMove.push(from, to);
|
|
218
221
|
else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
|
|
219
222
|
at = to;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
|
2
|
+
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Supported keybindings:
|
|
3
6
|
*
|
|
@@ -271,6 +274,7 @@
|
|
|
271
274
|
actionArgs: { insertAt: 'charAfter' }},
|
|
272
275
|
{ keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true,
|
|
273
276
|
actionArgs: { insertAt: 'eol' }},
|
|
277
|
+
{ keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },
|
|
274
278
|
{ keys: ['i'], type: 'action', action: 'enterInsertMode', isEdit: true,
|
|
275
279
|
actionArgs: { insertAt: 'inplace' }},
|
|
276
280
|
{ keys: ['I'], type: 'action', action: 'enterInsertMode', isEdit: true,
|
|
@@ -297,6 +301,8 @@
|
|
|
297
301
|
{ keys: ['R'], type: 'action', action: 'enterInsertMode', isEdit: true,
|
|
298
302
|
actionArgs: { replace: true }},
|
|
299
303
|
{ keys: ['u'], type: 'action', action: 'undo' },
|
|
304
|
+
{ keys: ['u'], type: 'action', action: 'changeCase', actionArgs: {toLower: true}, context: 'visual', isEdit: true },
|
|
305
|
+
{ keys: ['U'],type: 'action', action: 'changeCase', actionArgs: {toLower: false}, context: 'visual', isEdit: true },
|
|
300
306
|
{ keys: ['<C-r>'], type: 'action', action: 'redo' },
|
|
301
307
|
{ keys: ['m', 'character'], type: 'action', action: 'setMark' },
|
|
302
308
|
{ keys: ['"', 'character'], type: 'action', action: 'setRegister' },
|
|
@@ -682,13 +688,13 @@
|
|
|
682
688
|
if (macroModeState.isRecording) {
|
|
683
689
|
if (key == 'q') {
|
|
684
690
|
macroModeState.exitMacroRecordMode();
|
|
685
|
-
|
|
691
|
+
clearInputState(cm);
|
|
686
692
|
return;
|
|
687
693
|
}
|
|
688
694
|
}
|
|
689
695
|
if (key == '<Esc>') {
|
|
690
696
|
// Clear input state and get back to normal mode.
|
|
691
|
-
|
|
697
|
+
clearInputState(cm);
|
|
692
698
|
if (vim.visualMode) {
|
|
693
699
|
exitVisualMode(cm);
|
|
694
700
|
}
|
|
@@ -766,6 +772,11 @@
|
|
|
766
772
|
return repeat;
|
|
767
773
|
};
|
|
768
774
|
|
|
775
|
+
function clearInputState(cm, reason) {
|
|
776
|
+
cm.state.vim.inputState = new InputState();
|
|
777
|
+
CodeMirror.signal(cm, 'vim-command-done', reason);
|
|
778
|
+
}
|
|
779
|
+
|
|
769
780
|
/*
|
|
770
781
|
* Register stores information about copy and paste registers. Besides
|
|
771
782
|
* text, a register must store whether it is linewise (i.e., when it is
|
|
@@ -1018,7 +1029,7 @@
|
|
|
1018
1029
|
return;
|
|
1019
1030
|
} else {
|
|
1020
1031
|
// 2 different operators in a row doesn't make sense.
|
|
1021
|
-
|
|
1032
|
+
clearInputState(cm);
|
|
1022
1033
|
}
|
|
1023
1034
|
}
|
|
1024
1035
|
inputState.operator = command.operator;
|
|
@@ -1063,7 +1074,7 @@
|
|
|
1063
1074
|
actionArgs.repeat = repeat || 1;
|
|
1064
1075
|
actionArgs.repeatIsExplicit = repeatIsExplicit;
|
|
1065
1076
|
actionArgs.registerName = inputState.registerName;
|
|
1066
|
-
|
|
1077
|
+
clearInputState(cm);
|
|
1067
1078
|
vim.lastMotion = null;
|
|
1068
1079
|
if (command.isEdit) {
|
|
1069
1080
|
this.recordLastEdit(vim, inputState, command);
|
|
@@ -1244,7 +1255,7 @@
|
|
|
1244
1255
|
inputState.selectedCharacter;
|
|
1245
1256
|
}
|
|
1246
1257
|
motionArgs.repeat = repeat;
|
|
1247
|
-
|
|
1258
|
+
clearInputState(cm);
|
|
1248
1259
|
if (motion) {
|
|
1249
1260
|
var motionResult = motions[motion](cm, motionArgs, vim);
|
|
1250
1261
|
vim.lastMotion = motions[motion];
|
|
@@ -1550,10 +1561,7 @@
|
|
|
1550
1561
|
// will move the cursor to where it should be in the end.
|
|
1551
1562
|
var curStart = cm.getCursor();
|
|
1552
1563
|
var repeat = motionArgs.repeat;
|
|
1553
|
-
cm.
|
|
1554
|
-
var curEnd = cm.getCursor();
|
|
1555
|
-
cm.setCursor(curStart);
|
|
1556
|
-
return curEnd;
|
|
1564
|
+
return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');
|
|
1557
1565
|
},
|
|
1558
1566
|
moveByParagraph: function(cm, motionArgs) {
|
|
1559
1567
|
var line = cm.getCursor().line;
|
|
@@ -1645,15 +1653,14 @@
|
|
|
1645
1653
|
do {
|
|
1646
1654
|
symbol = lineText.charAt(ch++);
|
|
1647
1655
|
if (symbol && isMatchableSymbol(symbol)) {
|
|
1648
|
-
var ignoreStyle = ["string", "comment"];
|
|
1649
1656
|
var style = cm.getTokenTypeAt(Pos(line, ch));
|
|
1650
|
-
if (
|
|
1657
|
+
if (style !== "string" && style !== "comment") {
|
|
1651
1658
|
break;
|
|
1652
1659
|
}
|
|
1653
1660
|
}
|
|
1654
1661
|
} while (symbol);
|
|
1655
1662
|
if (symbol) {
|
|
1656
|
-
var matched = cm.findMatchingBracket(Pos(line, ch
|
|
1663
|
+
var matched = cm.findMatchingBracket(Pos(line, ch));
|
|
1657
1664
|
return matched.to;
|
|
1658
1665
|
} else {
|
|
1659
1666
|
return cursor;
|
|
@@ -1916,6 +1923,12 @@
|
|
|
1916
1923
|
cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));
|
|
1917
1924
|
} else if (insertAt == 'firstNonBlank') {
|
|
1918
1925
|
cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm));
|
|
1926
|
+
} else if (insertAt == 'endOfSelectedArea') {
|
|
1927
|
+
var selectionEnd = cm.getCursor('head');
|
|
1928
|
+
var selectionStart = cm.getCursor('anchor');
|
|
1929
|
+
selectionEnd = cursorIsBefore(selectionStart, selectionEnd) ? Pos(selectionEnd.line, selectionEnd.ch+1) : (selectionEnd.line < selectionStart.line ? Pos(selectionStart.line, 0) : selectionEnd);
|
|
1930
|
+
cm.setCursor(selectionEnd);
|
|
1931
|
+
exitVisualMode(cm);
|
|
1919
1932
|
}
|
|
1920
1933
|
cm.setOption('keyMap', 'vim-insert');
|
|
1921
1934
|
cm.setOption('disableInput', false);
|
|
@@ -2053,7 +2066,7 @@
|
|
|
2053
2066
|
}
|
|
2054
2067
|
this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);
|
|
2055
2068
|
},
|
|
2056
|
-
paste: function(cm, actionArgs) {
|
|
2069
|
+
paste: function(cm, actionArgs, vim) {
|
|
2057
2070
|
var cur = copyCursor(cm.getCursor());
|
|
2058
2071
|
var register = vimGlobalState.registerController.getRegister(
|
|
2059
2072
|
actionArgs.registerName);
|
|
@@ -2094,7 +2107,9 @@
|
|
|
2094
2107
|
}
|
|
2095
2108
|
var linewise = register.linewise;
|
|
2096
2109
|
if (linewise) {
|
|
2097
|
-
if
|
|
2110
|
+
if(vim.visualMode) {
|
|
2111
|
+
text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n';
|
|
2112
|
+
} else if (actionArgs.after) {
|
|
2098
2113
|
// Move the newline at the end to the start instead, and paste just
|
|
2099
2114
|
// before the newline character of the line we are on right now.
|
|
2100
2115
|
text = '\n' + text.slice(0, text.length - 1);
|
|
@@ -2105,24 +2120,35 @@
|
|
|
2105
2120
|
} else {
|
|
2106
2121
|
cur.ch += actionArgs.after ? 1 : 0;
|
|
2107
2122
|
}
|
|
2108
|
-
cm.replaceRange(text, cur);
|
|
2109
|
-
// Now fine tune the cursor to where we want it.
|
|
2110
2123
|
var curPosFinal;
|
|
2111
2124
|
var idx;
|
|
2112
|
-
if (
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
idx = cm.indexFromPos(cur);
|
|
2122
|
-
curPosFinal = cm.posFromIndex(idx + text.length - 1);
|
|
2125
|
+
if (vim.visualMode) {
|
|
2126
|
+
var selectedArea = getSelectedAreaRange(cm, vim);
|
|
2127
|
+
var selectionStart = selectedArea[0];
|
|
2128
|
+
var selectionEnd = selectedArea[1];
|
|
2129
|
+
// push the previously selected text to unnamed register
|
|
2130
|
+
vimGlobalState.registerController.unnamedRegister.setText(cm.getRange(selectionStart, selectionEnd));
|
|
2131
|
+
cm.replaceRange(text, selectionStart, selectionEnd);
|
|
2132
|
+
curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);
|
|
2133
|
+
if(linewise)curPosFinal.ch=0;
|
|
2123
2134
|
} else {
|
|
2124
|
-
|
|
2125
|
-
|
|
2135
|
+
cm.replaceRange(text, cur);
|
|
2136
|
+
// Now fine tune the cursor to where we want it.
|
|
2137
|
+
if (linewise && actionArgs.after) {
|
|
2138
|
+
curPosFinal = Pos(
|
|
2139
|
+
cur.line + 1,
|
|
2140
|
+
findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));
|
|
2141
|
+
} else if (linewise && !actionArgs.after) {
|
|
2142
|
+
curPosFinal = Pos(
|
|
2143
|
+
cur.line,
|
|
2144
|
+
findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));
|
|
2145
|
+
} else if (!linewise && actionArgs.after) {
|
|
2146
|
+
idx = cm.indexFromPos(cur);
|
|
2147
|
+
curPosFinal = cm.posFromIndex(idx + text.length - 1);
|
|
2148
|
+
} else {
|
|
2149
|
+
idx = cm.indexFromPos(cur);
|
|
2150
|
+
curPosFinal = cm.posFromIndex(idx + text.length);
|
|
2151
|
+
}
|
|
2126
2152
|
}
|
|
2127
2153
|
cm.setCursor(curPosFinal);
|
|
2128
2154
|
},
|
|
@@ -2216,6 +2242,15 @@
|
|
|
2216
2242
|
repeat = vim.lastEditInputState.repeatOverride || repeat;
|
|
2217
2243
|
}
|
|
2218
2244
|
repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);
|
|
2245
|
+
},
|
|
2246
|
+
changeCase: function(cm, actionArgs, vim) {
|
|
2247
|
+
var selectedAreaRange = getSelectedAreaRange(cm, vim);
|
|
2248
|
+
var selectionStart = selectedAreaRange[0];
|
|
2249
|
+
var selectionEnd = selectedAreaRange[1];
|
|
2250
|
+
var toLower = actionArgs.toLower;
|
|
2251
|
+
var text = cm.getRange(selectionStart, selectionEnd);
|
|
2252
|
+
cm.replaceRange(toLower ? text.toLowerCase() : text.toUpperCase(), selectionStart, selectionEnd);
|
|
2253
|
+
cm.setCursor(selectionStart);
|
|
2219
2254
|
}
|
|
2220
2255
|
};
|
|
2221
2256
|
|
|
@@ -2298,6 +2333,29 @@
|
|
|
2298
2333
|
function escapeRegex(s) {
|
|
2299
2334
|
return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1');
|
|
2300
2335
|
}
|
|
2336
|
+
function getSelectedAreaRange(cm, vim) {
|
|
2337
|
+
var selectionStart = cm.getCursor('anchor');
|
|
2338
|
+
var selectionEnd = cm.getCursor('head');
|
|
2339
|
+
var lastSelection = vim.lastSelection;
|
|
2340
|
+
if (!vim.visualMode) {
|
|
2341
|
+
var line = lastSelection.curEnd.line - lastSelection.curStart.line;
|
|
2342
|
+
var ch = line ? lastSelection.curEnd.ch : lastSelection.curEnd.ch - lastSelection.curStart.ch;
|
|
2343
|
+
selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};
|
|
2344
|
+
if (lastSelection.visualLine) {
|
|
2345
|
+
return [{line: selectionStart.line, ch: 0}, {line: selectionEnd.line, ch: lineLength(cm, selectionEnd.line)}];
|
|
2346
|
+
}
|
|
2347
|
+
} else {
|
|
2348
|
+
if (cursorIsBefore(selectionEnd, selectionStart)) {
|
|
2349
|
+
var tmp = selectionStart;
|
|
2350
|
+
selectionStart = selectionEnd;
|
|
2351
|
+
selectionEnd = tmp;
|
|
2352
|
+
} else {
|
|
2353
|
+
selectionEnd = cm.clipPos(Pos(selectionEnd.line, selectionEnd.ch+1));
|
|
2354
|
+
}
|
|
2355
|
+
exitVisualMode(cm);
|
|
2356
|
+
}
|
|
2357
|
+
return [selectionStart, selectionEnd];
|
|
2358
|
+
}
|
|
2301
2359
|
|
|
2302
2360
|
function exitVisualMode(cm) {
|
|
2303
2361
|
cm.off('mousedown', exitVisualMode);
|
|
@@ -2908,15 +2966,15 @@
|
|
|
2908
2966
|
// Translates a search string from ex (vim) syntax into javascript form.
|
|
2909
2967
|
function translateRegex(str) {
|
|
2910
2968
|
// When these match, add a '\' if unescaped or remove one if escaped.
|
|
2911
|
-
var specials =
|
|
2969
|
+
var specials = '|(){';
|
|
2912
2970
|
// Remove, but never add, a '\' for these.
|
|
2913
|
-
var unescape =
|
|
2971
|
+
var unescape = '}';
|
|
2914
2972
|
var escapeNextChar = false;
|
|
2915
2973
|
var out = [];
|
|
2916
2974
|
for (var i = -1; i < str.length; i++) {
|
|
2917
2975
|
var c = str.charAt(i) || '';
|
|
2918
2976
|
var n = str.charAt(i+1) || '';
|
|
2919
|
-
var specialComesNext = (specials.indexOf(n) != -1);
|
|
2977
|
+
var specialComesNext = (n && specials.indexOf(n) != -1);
|
|
2920
2978
|
if (escapeNextChar) {
|
|
2921
2979
|
if (c !== '\\' || !specialComesNext) {
|
|
2922
2980
|
out.push(c);
|
|
@@ -2926,7 +2984,7 @@
|
|
|
2926
2984
|
if (c === '\\') {
|
|
2927
2985
|
escapeNextChar = true;
|
|
2928
2986
|
// Treat the unescape list as special for removing, but not adding '\'.
|
|
2929
|
-
if (unescape.indexOf(n) != -1) {
|
|
2987
|
+
if (n && unescape.indexOf(n) != -1) {
|
|
2930
2988
|
specialComesNext = true;
|
|
2931
2989
|
}
|
|
2932
2990
|
// Not passing this test means removing a '\'.
|
|
@@ -3901,6 +3959,7 @@
|
|
|
3901
3959
|
// Closure to bind CodeMirror, key, modifier.
|
|
3902
3960
|
function keyMapper(vimKey) {
|
|
3903
3961
|
return function(cm) {
|
|
3962
|
+
CodeMirror.signal(cm, 'vim-keypress', vimKey);
|
|
3904
3963
|
CodeMirror.Vim.handleKey(cm, vimKey);
|
|
3905
3964
|
};
|
|
3906
3965
|
}
|