ace-rails-ap 4.1.5 → 4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitmodules +1 -1
- data/lib/ace/rails/version.rb +1 -1
- data/vendor/assets/javascripts/ace/ace.js +3960 -2205
- data/vendor/assets/javascripts/ace/ext-beautify.js +279 -290
- data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +6 -3
- data/vendor/assets/javascripts/ace/ext-emmet.js +14 -11
- data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -3
- data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +24 -6
- data/vendor/assets/javascripts/ace/ext-language_tools.js +118 -81
- data/vendor/assets/javascripts/ace/ext-linking.js +7 -4
- data/vendor/assets/javascripts/ace/ext-modelist.js +34 -10
- data/vendor/assets/javascripts/ace/ext-options.js +755 -0
- data/vendor/assets/javascripts/ace/ext-rtl.js +124 -0
- data/vendor/assets/javascripts/ace/ext-searchbox.js +45 -40
- data/vendor/assets/javascripts/ace/ext-settings_menu.js +478 -365
- data/vendor/assets/javascripts/ace/ext-spellcheck.js +7 -4
- data/vendor/assets/javascripts/ace/ext-split.js +7 -46
- data/vendor/assets/javascripts/ace/ext-static_highlight.js +90 -22
- data/vendor/assets/javascripts/ace/ext-statusbar.js +7 -4
- data/vendor/assets/javascripts/ace/ext-textarea.js +21 -18
- data/vendor/assets/javascripts/ace/ext-themelist.js +8 -5
- data/vendor/assets/javascripts/ace/ext-whitespace.js +9 -6
- data/vendor/assets/javascripts/ace/keybinding-emacs.js +27 -39
- data/vendor/assets/javascripts/ace/keybinding-sublime.js +425 -0
- data/vendor/assets/javascripts/ace/keybinding-vim.js +293 -226
- data/vendor/assets/javascripts/ace/mode-abap.js +10 -3
- data/vendor/assets/javascripts/ace/mode-abc.js +11 -4
- data/vendor/assets/javascripts/ace/mode-actionscript.js +12 -5
- data/vendor/assets/javascripts/ace/mode-ada.js +54 -4
- data/vendor/assets/javascripts/ace/mode-apache_conf.js +12 -5
- data/vendor/assets/javascripts/ace/mode-apex.js +457 -0
- data/vendor/assets/javascripts/ace/mode-applescript.js +11 -4
- data/vendor/assets/javascripts/ace/mode-asciidoc.js +9 -2
- data/vendor/assets/javascripts/ace/mode-asl.js +421 -0
- data/vendor/assets/javascripts/ace/mode-assembly_x86.js +11 -4
- data/vendor/assets/javascripts/ace/mode-autohotkey.js +14 -7
- data/vendor/assets/javascripts/ace/mode-batchfile.js +12 -5
- data/vendor/assets/javascripts/ace/mode-bro.js +13 -6
- data/vendor/assets/javascripts/ace/mode-c9search.js +9 -3
- data/vendor/assets/javascripts/ace/mode-c_cpp.js +22 -7
- data/vendor/assets/javascripts/ace/mode-cirru.js +9 -2
- data/vendor/assets/javascripts/ace/mode-clojure.js +8 -1
- data/vendor/assets/javascripts/ace/mode-cobol.js +8 -1
- data/vendor/assets/javascripts/ace/mode-coffee.js +11 -4
- data/vendor/assets/javascripts/ace/mode-coldfusion.js +160 -134
- data/vendor/assets/javascripts/ace/mode-csharp.js +13 -6
- data/vendor/assets/javascripts/ace/mode-csound_document.js +3988 -0
- data/vendor/assets/javascripts/ace/mode-csound_orchestra.js +2924 -0
- data/vendor/assets/javascripts/ace/mode-csound_score.js +453 -0
- data/vendor/assets/javascripts/ace/mode-csp.js +59 -0
- data/vendor/assets/javascripts/ace/mode-css.js +47 -27
- data/vendor/assets/javascripts/ace/mode-curly.js +159 -133
- data/vendor/assets/javascripts/ace/mode-d.js +11 -4
- data/vendor/assets/javascripts/ace/mode-dart.js +44 -20
- data/vendor/assets/javascripts/ace/mode-diff.js +10 -3
- data/vendor/assets/javascripts/ace/mode-django.js +160 -134
- data/vendor/assets/javascripts/ace/mode-dockerfile.js +11 -4
- data/vendor/assets/javascripts/ace/mode-dot.js +11 -4
- data/vendor/assets/javascripts/ace/mode-drools.js +45 -5
- data/vendor/assets/javascripts/ace/mode-edifact.js +165 -0
- data/vendor/assets/javascripts/ace/mode-eiffel.js +8 -1
- data/vendor/assets/javascripts/ace/mode-ejs.js +160 -134
- data/vendor/assets/javascripts/ace/mode-elixir.js +11 -4
- data/vendor/assets/javascripts/ace/mode-elm.js +10 -3
- data/vendor/assets/javascripts/ace/mode-erlang.js +12 -5
- data/vendor/assets/javascripts/ace/mode-forth.js +12 -5
- data/vendor/assets/javascripts/ace/mode-fortran.js +10 -3
- data/vendor/assets/javascripts/ace/mode-fsharp.js +316 -0
- data/vendor/assets/javascripts/ace/mode-fsl.js +258 -0
- data/vendor/assets/javascripts/ace/mode-ftl.js +23 -12
- data/vendor/assets/javascripts/ace/mode-gcode.js +8 -1
- data/vendor/assets/javascripts/ace/mode-gherkin.js +10 -3
- data/vendor/assets/javascripts/ace/mode-gitignore.js +8 -1
- data/vendor/assets/javascripts/ace/mode-glsl.js +23 -8
- data/vendor/assets/javascripts/ace/mode-gobstones.js +13 -5
- data/vendor/assets/javascripts/ace/mode-golang.js +11 -4
- data/vendor/assets/javascripts/ace/mode-graphqlschema.js +10 -3
- data/vendor/assets/javascripts/ace/mode-groovy.js +13 -5
- data/vendor/assets/javascripts/ace/mode-haml.js +23 -12
- data/vendor/assets/javascripts/ace/mode-handlebars.js +159 -133
- data/vendor/assets/javascripts/ace/mode-haskell.js +13 -6
- data/vendor/assets/javascripts/ace/mode-haskell_cabal.js +8 -1
- data/vendor/assets/javascripts/ace/mode-haxe.js +11 -4
- data/vendor/assets/javascripts/ace/mode-hjson.js +13 -6
- data/vendor/assets/javascripts/ace/mode-html.js +159 -133
- data/vendor/assets/javascripts/ace/mode-html_elixir.js +162 -136
- data/vendor/assets/javascripts/ace/mode-html_ruby.js +160 -134
- data/vendor/assets/javascripts/ace/mode-ini.js +8 -1
- data/vendor/assets/javascripts/ace/mode-io.js +12 -5
- data/vendor/assets/javascripts/ace/mode-jack.js +10 -3
- data/vendor/assets/javascripts/ace/mode-jade.js +271 -375
- data/vendor/assets/javascripts/ace/mode-java.js +108 -7
- data/vendor/assets/javascripts/ace/mode-javascript.js +13 -5
- data/vendor/assets/javascripts/ace/mode-json.js +10 -3
- data/vendor/assets/javascripts/ace/mode-jsoniq.js +24 -12
- data/vendor/assets/javascripts/ace/mode-jsp.js +59 -15
- data/vendor/assets/javascripts/ace/mode-jssm.js +325 -0
- data/vendor/assets/javascripts/ace/mode-jsx.js +11 -4
- data/vendor/assets/javascripts/ace/mode-julia.js +12 -5
- data/vendor/assets/javascripts/ace/mode-kotlin.js +16 -7
- data/vendor/assets/javascripts/ace/mode-latex.js +87 -15
- data/vendor/assets/javascripts/ace/mode-less.js +47 -27
- data/vendor/assets/javascripts/ace/mode-liquid.js +2026 -472
- data/vendor/assets/javascripts/ace/mode-lisp.js +9 -2
- data/vendor/assets/javascripts/ace/mode-livescript.js +10 -2
- data/vendor/assets/javascripts/ace/mode-logiql.js +10 -3
- data/vendor/assets/javascripts/ace/mode-logtalk.js +352 -0
- data/vendor/assets/javascripts/ace/mode-lsl.js +10 -3
- data/vendor/assets/javascripts/ace/mode-lua.js +9 -2
- data/vendor/assets/javascripts/ace/mode-luapage.js +160 -134
- data/vendor/assets/javascripts/ace/mode-lucene.js +36 -20
- data/vendor/assets/javascripts/ace/mode-makefile.js +10 -3
- data/vendor/assets/javascripts/ace/mode-markdown.js +523 -200
- data/vendor/assets/javascripts/ace/mode-mask.js +100 -83
- data/vendor/assets/javascripts/ace/mode-matlab.js +8 -1
- data/vendor/assets/javascripts/ace/mode-maze.js +10 -3
- data/vendor/assets/javascripts/ace/mode-mel.js +11 -4
- data/vendor/assets/javascripts/ace/mode-mixal.js +122 -0
- data/vendor/assets/javascripts/ace/mode-mushcode.js +9 -2
- data/vendor/assets/javascripts/ace/mode-mysql.js +11 -4
- data/vendor/assets/javascripts/ace/mode-nix.js +22 -7
- data/vendor/assets/javascripts/ace/mode-nsis.js +15 -8
- data/vendor/assets/javascripts/ace/mode-objectivec.js +23 -8
- data/vendor/assets/javascripts/ace/mode-ocaml.js +8 -1
- data/vendor/assets/javascripts/ace/mode-pascal.js +9 -2
- data/vendor/assets/javascripts/ace/mode-perl.js +10 -3
- data/vendor/assets/javascripts/ace/mode-perl6.js +593 -0
- data/vendor/assets/javascripts/ace/mode-pgsql.js +314 -71
- data/vendor/assets/javascripts/ace/mode-php.js +1037 -994
- data/vendor/assets/javascripts/ace/mode-php_laravel_blade.js +13100 -0
- data/vendor/assets/javascripts/ace/mode-pig.js +13 -6
- data/vendor/assets/javascripts/ace/mode-plain_text.js +8 -1
- data/vendor/assets/javascripts/ace/mode-powershell.js +10 -3
- data/vendor/assets/javascripts/ace/mode-praat.js +17 -7
- data/vendor/assets/javascripts/ace/mode-prolog.js +12 -5
- data/vendor/assets/javascripts/ace/mode-properties.js +8 -1
- data/vendor/assets/javascripts/ace/mode-protobuf.js +22 -7
- data/vendor/assets/javascripts/ace/mode-puppet.js +369 -0
- data/vendor/assets/javascripts/ace/mode-python.js +305 -63
- data/vendor/assets/javascripts/ace/mode-r.js +14 -4
- data/vendor/assets/javascripts/ace/mode-razor.js +162 -136
- data/vendor/assets/javascripts/ace/mode-rdoc.js +41 -3
- data/vendor/assets/javascripts/ace/mode-red.js +450 -0
- data/vendor/assets/javascripts/ace/mode-redshift.js +360 -0
- data/vendor/assets/javascripts/ace/mode-rhtml.js +159 -133
- data/vendor/assets/javascripts/ace/mode-rst.js +8 -1
- data/vendor/assets/javascripts/ace/mode-ruby.js +9 -2
- data/vendor/assets/javascripts/ace/mode-rust.js +16 -7
- data/vendor/assets/javascripts/ace/mode-sass.js +211 -116
- data/vendor/assets/javascripts/ace/mode-scad.js +11 -4
- data/vendor/assets/javascripts/ace/mode-scala.js +13 -5
- data/vendor/assets/javascripts/ace/mode-scheme.js +9 -2
- data/vendor/assets/javascripts/ace/mode-scss.js +412 -125
- data/vendor/assets/javascripts/ace/mode-sh.js +11 -4
- data/vendor/assets/javascripts/ace/mode-sjs.js +15 -7
- data/vendor/assets/javascripts/ace/mode-slim.js +4641 -0
- data/vendor/assets/javascripts/ace/mode-smarty.js +161 -135
- data/vendor/assets/javascripts/ace/mode-snippets.js +23 -16
- data/vendor/assets/javascripts/ace/mode-soy_template.js +161 -135
- data/vendor/assets/javascripts/ace/mode-space.js +8 -1
- data/vendor/assets/javascripts/ace/mode-sparql.js +13 -6
- data/vendor/assets/javascripts/ace/mode-sql.js +9 -2
- data/vendor/assets/javascripts/ace/mode-sqlserver.js +11 -4
- data/vendor/assets/javascripts/ace/mode-stylus.js +20 -10
- data/vendor/assets/javascripts/ace/mode-svg.js +26 -13
- data/vendor/assets/javascripts/ace/mode-swift.js +15 -8
- data/vendor/assets/javascripts/ace/mode-tcl.js +10 -3
- data/vendor/assets/javascripts/ace/mode-terraform.js +397 -0
- data/vendor/assets/javascripts/ace/mode-tex.js +8 -1
- data/vendor/assets/javascripts/ace/mode-text.js +8 -0
- data/vendor/assets/javascripts/ace/mode-textile.js +8 -1
- data/vendor/assets/javascripts/ace/mode-toml.js +9 -2
- data/vendor/assets/javascripts/ace/mode-tsx.js +27 -31
- data/vendor/assets/javascripts/ace/mode-turtle.js +13 -6
- data/vendor/assets/javascripts/ace/mode-twig.js +160 -134
- data/vendor/assets/javascripts/ace/mode-typescript.js +27 -31
- data/vendor/assets/javascripts/ace/mode-vala.js +13 -6
- data/vendor/assets/javascripts/ace/mode-vbscript.js +9 -2
- data/vendor/assets/javascripts/ace/mode-velocity.js +159 -133
- data/vendor/assets/javascripts/ace/mode-verilog.js +19 -5
- data/vendor/assets/javascripts/ace/mode-vhdl.js +8 -1
- data/vendor/assets/javascripts/ace/mode-visualforce.js +2637 -0
- data/vendor/assets/javascripts/ace/mode-wollok.js +15 -8
- data/vendor/assets/javascripts/ace/mode-xml.js +21 -9
- data/vendor/assets/javascripts/ace/mode-xquery.js +24 -12
- data/vendor/assets/javascripts/ace/mode-yaml.js +15 -5
- data/vendor/assets/javascripts/ace/theme-ambiance.js +8 -6
- data/vendor/assets/javascripts/ace/theme-chaos.js +8 -1
- data/vendor/assets/javascripts/ace/theme-chrome.js +8 -1
- data/vendor/assets/javascripts/ace/theme-clouds.js +8 -1
- data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +8 -1
- data/vendor/assets/javascripts/ace/theme-cobalt.js +8 -1
- data/vendor/assets/javascripts/ace/theme-crimson_editor.js +8 -1
- data/vendor/assets/javascripts/ace/theme-dawn.js +8 -1
- data/vendor/assets/javascripts/ace/theme-dracula.js +135 -0
- data/vendor/assets/javascripts/ace/theme-dreamweaver.js +8 -1
- data/vendor/assets/javascripts/ace/theme-eclipse.js +8 -1
- data/vendor/assets/javascripts/ace/theme-github.js +8 -1
- data/vendor/assets/javascripts/ace/theme-gob.js +8 -1
- data/vendor/assets/javascripts/ace/theme-gruvbox.js +8 -1
- data/vendor/assets/javascripts/ace/theme-idle_fingers.js +8 -1
- data/vendor/assets/javascripts/ace/theme-iplastic.js +8 -1
- data/vendor/assets/javascripts/ace/theme-katzenmilch.js +8 -1
- data/vendor/assets/javascripts/ace/theme-kr_theme.js +8 -1
- data/vendor/assets/javascripts/ace/theme-kuroir.js +8 -1
- data/vendor/assets/javascripts/ace/theme-merbivore.js +8 -1
- data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +8 -1
- data/vendor/assets/javascripts/ace/theme-mono_industrial.js +8 -1
- data/vendor/assets/javascripts/ace/theme-monokai.js +8 -1
- data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +8 -1
- data/vendor/assets/javascripts/ace/theme-solarized_dark.js +8 -1
- data/vendor/assets/javascripts/ace/theme-solarized_light.js +9 -2
- data/vendor/assets/javascripts/ace/theme-sqlserver.js +8 -1
- data/vendor/assets/javascripts/ace/theme-terminal.js +8 -1
- data/vendor/assets/javascripts/ace/theme-textmate.js +9 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow.js +8 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +8 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +8 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +8 -1
- data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +8 -1
- data/vendor/assets/javascripts/ace/theme-twilight.js +8 -1
- data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +8 -1
- data/vendor/assets/javascripts/ace/theme-xcode.js +8 -1
- data/vendor/assets/javascripts/ace/worker-coffee.js +40 -41
- data/vendor/assets/javascripts/ace/worker-css.js +44 -37
- data/vendor/assets/javascripts/ace/worker-html.js +40 -37
- data/vendor/assets/javascripts/ace/worker-javascript.js +42 -39
- data/vendor/assets/javascripts/ace/worker-json.js +41 -36
- data/vendor/assets/javascripts/ace/worker-lua.js +41 -37
- data/vendor/assets/javascripts/ace/worker-php.js +40 -37
- data/vendor/assets/javascripts/ace/worker-xml.js +105 -103
- data/vendor/assets/javascripts/ace/worker-xquery.js +39 -36
- metadata +27 -4
@@ -61,11 +61,10 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
61
61
|
newlineAndIndent: function(cm) { cm.ace.insert("\n"); }
|
62
62
|
};
|
63
63
|
CodeMirror.keyMap = {};
|
64
|
-
CodeMirror.addClass = CodeMirror.rmClass =
|
65
|
-
CodeMirror.e_stop =
|
64
|
+
CodeMirror.addClass = CodeMirror.rmClass = function() {};
|
65
|
+
CodeMirror.e_stop = CodeMirror.e_preventDefault = event.stopEvent;
|
66
66
|
CodeMirror.keyName = function(e) {
|
67
|
-
|
68
|
-
var key = (KEYS[e.keyCode] || "");
|
67
|
+
var key = (KEYS[e.keyCode] || e.key || "");
|
69
68
|
if (key.length == 1) key = key.toUpperCase();
|
70
69
|
key = event.getModifierString(e).replace(/(^|-)\w/g, function(m) {
|
71
70
|
return m.toUpperCase();
|
@@ -122,7 +121,6 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
122
121
|
var curOp = this.curOp = this.curOp || {};
|
123
122
|
if (!curOp.changeHandlers)
|
124
123
|
curOp.changeHandlers = this._eventRegistry["change"] && this._eventRegistry["change"].slice();
|
125
|
-
if (this.virtualSelectionMode()) return;
|
126
124
|
if (!curOp.lastChange) {
|
127
125
|
curOp.lastChange = curOp.change = change;
|
128
126
|
} else {
|
@@ -157,6 +155,8 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
157
155
|
this.curOp.force = force;
|
158
156
|
var result = fn();
|
159
157
|
if (this.ace.curOp && this.ace.curOp.command.name == "vim") {
|
158
|
+
if (this.state.dialog)
|
159
|
+
this.ace.curOp.command.scrollIntoView = false;
|
160
160
|
this.ace.endOperation();
|
161
161
|
if (!curOp.cursorActivity && !curOp.lastChange && prevOp)
|
162
162
|
this.ace.prevOp = prevOp;
|
@@ -280,7 +280,7 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
280
280
|
if (point.bias == 1) {
|
281
281
|
cmp = 1;
|
282
282
|
} else {
|
283
|
-
point.bias
|
283
|
+
point.bias = -1;
|
284
284
|
continue;
|
285
285
|
}
|
286
286
|
}
|
@@ -459,7 +459,7 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
459
459
|
return this.ace.textInput.getElement();
|
460
460
|
};
|
461
461
|
this.getWrapperElement = function() {
|
462
|
-
return this.ace.
|
462
|
+
return this.ace.container;
|
463
463
|
};
|
464
464
|
var optMap = {
|
465
465
|
indentWithTabs: "useSoftTabs",
|
@@ -565,7 +565,7 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
565
565
|
return toCmPos(this.ace.session.doc.indexToPosition(index));
|
566
566
|
};
|
567
567
|
this.focus = function(index) {
|
568
|
-
return this.ace.focus();
|
568
|
+
return this.ace.textInput.focus();
|
569
569
|
};
|
570
570
|
this.blur = function(index) {
|
571
571
|
return this.ace.blur();
|
@@ -575,10 +575,11 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
|
|
575
575
|
};
|
576
576
|
this.scanForBracket = function(pos, dir, _, options) {
|
577
577
|
var re = options.bracketRegex.source;
|
578
|
+
var tokenRe = /paren|text|operator|tag/;
|
578
579
|
if (dir == 1) {
|
579
|
-
var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos),
|
580
|
+
var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), tokenRe);
|
580
581
|
} else {
|
581
|
-
var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1},
|
582
|
+
var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), {row: pos.line, column: pos.ch + 1}, tokenRe);
|
582
583
|
}
|
583
584
|
return m && {pos: toCmPos(m)};
|
584
585
|
};
|
@@ -666,28 +667,29 @@ CodeMirror.defineExtension = function(name, fn) {
|
|
666
667
|
CodeMirror.prototype[name] = fn;
|
667
668
|
};
|
668
669
|
dom.importCssString(".normal-mode .ace_cursor{\
|
669
|
-
|
670
|
-
|
671
|
-
opacity: 0.5;\
|
670
|
+
border: none;\
|
671
|
+
background-color: rgba(255,0,0,0.5);\
|
672
672
|
}\
|
673
673
|
.normal-mode .ace_hidden-cursors .ace_cursor{\
|
674
674
|
background-color: transparent;\
|
675
|
+
border: 1px solid red;\
|
676
|
+
opacity: 0.7\
|
675
677
|
}\
|
676
678
|
.ace_dialog {\
|
677
679
|
position: absolute;\
|
678
680
|
left: 0; right: 0;\
|
679
|
-
background:
|
681
|
+
background: inherit;\
|
680
682
|
z-index: 15;\
|
681
683
|
padding: .1em .8em;\
|
682
684
|
overflow: hidden;\
|
683
|
-
color:
|
685
|
+
color: inherit;\
|
684
686
|
}\
|
685
687
|
.ace_dialog-top {\
|
686
|
-
border-bottom: 1px solid #
|
688
|
+
border-bottom: 1px solid #444;\
|
687
689
|
top: 0;\
|
688
690
|
}\
|
689
691
|
.ace_dialog-bottom {\
|
690
|
-
border-top: 1px solid #
|
692
|
+
border-top: 1px solid #444;\
|
691
693
|
bottom: 0;\
|
692
694
|
}\
|
693
695
|
.ace_dialog input {\
|
@@ -730,11 +732,19 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
730
732
|
|
731
733
|
var dialog = dialogDiv(this, template, options.bottom);
|
732
734
|
var closed = false, me = this;
|
735
|
+
this.state.dialog = dialog;
|
733
736
|
function close(newVal) {
|
734
737
|
if (typeof newVal == 'string') {
|
735
738
|
inp.value = newVal;
|
736
739
|
} else {
|
737
740
|
if (closed) return;
|
741
|
+
|
742
|
+
if (newVal && newVal.type == "blur") {
|
743
|
+
if (document.activeElement === inp)
|
744
|
+
return;
|
745
|
+
}
|
746
|
+
|
747
|
+
me.state.dialog = null;
|
738
748
|
closed = true;
|
739
749
|
dialog.parentNode.removeChild(dialog);
|
740
750
|
me.focus();
|
@@ -747,7 +757,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
747
757
|
if (inp) {
|
748
758
|
if (options.value) {
|
749
759
|
inp.value = options.value;
|
750
|
-
if (options.
|
760
|
+
if (options.selectValueOnOpen !== false) inp.select();
|
751
761
|
}
|
752
762
|
|
753
763
|
if (options.onInput)
|
@@ -757,12 +767,12 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
757
767
|
|
758
768
|
CodeMirror.on(inp, "keydown", function(e) {
|
759
769
|
if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }
|
770
|
+
if (e.keyCode == 13) callback(inp.value);
|
760
771
|
if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {
|
761
772
|
inp.blur();
|
762
773
|
CodeMirror.e_stop(e);
|
763
774
|
close();
|
764
775
|
}
|
765
|
-
if (e.keyCode == 13) callback(inp.value);
|
766
776
|
});
|
767
777
|
|
768
778
|
if (options.closeOnBlur !== false) CodeMirror.on(inp, "blur", close);
|
@@ -834,6 +844,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
834
844
|
{ keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },
|
835
845
|
{ keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },
|
836
846
|
{ keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },
|
847
|
+
{ keys: '<Ins>', type: 'action', action: 'toggleOverwrite', context: 'insert' },
|
837
848
|
{ keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},
|
838
849
|
{ keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},
|
839
850
|
{ keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},
|
@@ -945,6 +956,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
945
956
|
{ keys: '.', type: 'action', action: 'repeatLastEdit' },
|
946
957
|
{ keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},
|
947
958
|
{ keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},
|
959
|
+
{ keys: '<C-t>', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },
|
960
|
+
{ keys: '<C-d>', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },
|
948
961
|
{ keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },
|
949
962
|
{ keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},
|
950
963
|
{ keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},
|
@@ -972,6 +985,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
972
985
|
{ name: 'sort', shortName: 'sor' },
|
973
986
|
{ name: 'substitute', shortName: 's', possiblyAsync: true },
|
974
987
|
{ name: 'nohlsearch', shortName: 'noh' },
|
988
|
+
{ name: 'yank', shortName: 'y' },
|
975
989
|
{ name: 'delmarks', shortName: 'delm' },
|
976
990
|
{ name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },
|
977
991
|
{ name: 'global', shortName: 'g' }
|
@@ -1001,7 +1015,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1001
1015
|
CodeMirror.rmClass(cm.getWrapperElement(), "cm-fat-cursor");
|
1002
1016
|
|
1003
1017
|
if (!next || next.attach != attachVimMap)
|
1004
|
-
leaveVimMode(cm
|
1018
|
+
leaveVimMode(cm);
|
1005
1019
|
}
|
1006
1020
|
function attachVimMap(cm, prev) {
|
1007
1021
|
if (this == CodeMirror.keyMap.vim)
|
@@ -1019,6 +1033,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1019
1033
|
|
1020
1034
|
function cmKey(key, cm) {
|
1021
1035
|
if (!cm) { return undefined; }
|
1036
|
+
if (this[key]) { return this[key]; }
|
1022
1037
|
var vimKey = cmKeyToVimKey(key);
|
1023
1038
|
if (!vimKey) {
|
1024
1039
|
return false;
|
@@ -1031,7 +1046,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1031
1046
|
}
|
1032
1047
|
|
1033
1048
|
var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'};
|
1034
|
-
var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del'};
|
1049
|
+
var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'};
|
1035
1050
|
function cmKeyToVimKey(key) {
|
1036
1051
|
if (key.charAt(0) == '\'') {
|
1037
1052
|
return key.charAt(1);
|
@@ -1144,11 +1159,11 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1144
1159
|
cfg = cfg || {};
|
1145
1160
|
var scope = cfg.scope;
|
1146
1161
|
if (!option) {
|
1147
|
-
|
1162
|
+
return new Error('Unknown option: ' + name);
|
1148
1163
|
}
|
1149
1164
|
if (option.type == 'boolean') {
|
1150
1165
|
if (value && value !== true) {
|
1151
|
-
|
1166
|
+
return new Error('Invalid argument: ' + name + '=' + value);
|
1152
1167
|
} else if (value !== false) {
|
1153
1168
|
value = true;
|
1154
1169
|
}
|
@@ -1175,7 +1190,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1175
1190
|
cfg = cfg || {};
|
1176
1191
|
var scope = cfg.scope;
|
1177
1192
|
if (!option) {
|
1178
|
-
|
1193
|
+
return new Error('Unknown option: ' + name);
|
1179
1194
|
}
|
1180
1195
|
if (option.callback) {
|
1181
1196
|
var local = cm && option.callback(undefined, cm);
|
@@ -1344,10 +1359,10 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1344
1359
|
lastSubstituteReplacePart: undefined,
|
1345
1360
|
jumpList: createCircularJumpList(),
|
1346
1361
|
macroModeState: new MacroModeState,
|
1347
|
-
|
1362
|
+
lastCharacterSearch: {increment:0, forward:true, selectedCharacter:''},
|
1348
1363
|
registerController: new RegisterController({}),
|
1349
|
-
searchHistoryController: new HistoryController(
|
1350
|
-
exCommandHistoryController : new HistoryController(
|
1364
|
+
searchHistoryController: new HistoryController(),
|
1365
|
+
exCommandHistoryController : new HistoryController()
|
1351
1366
|
};
|
1352
1367
|
for (var optionName in options) {
|
1353
1368
|
var option = options[optionName];
|
@@ -1608,7 +1623,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1608
1623
|
}
|
1609
1624
|
};
|
1610
1625
|
function defineRegister(name, register) {
|
1611
|
-
var registers = vimGlobalState.registerController.registers
|
1626
|
+
var registers = vimGlobalState.registerController.registers;
|
1612
1627
|
if (!name || name.length != 1) {
|
1613
1628
|
throw Error('Register name must be 1 character');
|
1614
1629
|
}
|
@@ -1624,9 +1639,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1624
1639
|
}
|
1625
1640
|
RegisterController.prototype = {
|
1626
1641
|
pushText: function(registerName, operator, text, linewise, blockwise) {
|
1627
|
-
if (linewise && text.charAt(0) == '\n') {
|
1628
|
-
text = text.slice(1) + '\n';
|
1629
|
-
}
|
1630
1642
|
if (linewise && text.charAt(text.length - 1) !== '\n'){
|
1631
1643
|
text += '\n';
|
1632
1644
|
}
|
@@ -1679,7 +1691,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1679
1691
|
};
|
1680
1692
|
function HistoryController() {
|
1681
1693
|
this.historyBuffer = [];
|
1682
|
-
this.iterator;
|
1694
|
+
this.iterator = 0;
|
1683
1695
|
this.initialPrefix = null;
|
1684
1696
|
}
|
1685
1697
|
HistoryController.prototype = {
|
@@ -1851,7 +1863,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1851
1863
|
});
|
1852
1864
|
}
|
1853
1865
|
function onPromptClose(query) {
|
1854
|
-
cm.scrollTo(originalScrollPos.left, originalScrollPos.top);
|
1855
1866
|
handleQuery(query, true /** ignoreCase */, true /** smartCase */);
|
1856
1867
|
var macroModeState = vimGlobalState.macroModeState;
|
1857
1868
|
if (macroModeState.isRecording) {
|
@@ -1859,11 +1870,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1859
1870
|
}
|
1860
1871
|
}
|
1861
1872
|
function onPromptKeyUp(e, query, close) {
|
1862
|
-
var keyName = CodeMirror.keyName(e), up;
|
1873
|
+
var keyName = CodeMirror.keyName(e), up, offset;
|
1863
1874
|
if (keyName == 'Up' || keyName == 'Down') {
|
1864
1875
|
up = keyName == 'Up' ? true : false;
|
1876
|
+
offset = e.target ? e.target.selectionEnd : 0;
|
1865
1877
|
query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';
|
1866
1878
|
close(query);
|
1879
|
+
if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);
|
1867
1880
|
} else {
|
1868
1881
|
if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')
|
1869
1882
|
vimGlobalState.searchHistoryController.reset();
|
@@ -1894,6 +1907,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1894
1907
|
clearInputState(cm);
|
1895
1908
|
close();
|
1896
1909
|
cm.focus();
|
1910
|
+
} else if (keyName == 'Up' || keyName == 'Down') {
|
1911
|
+
CodeMirror.e_stop(e);
|
1897
1912
|
} else if (keyName == 'Ctrl-U') {
|
1898
1913
|
CodeMirror.e_stop(e);
|
1899
1914
|
close('');
|
@@ -1950,7 +1965,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1950
1965
|
exCommandDispatcher.processCommand(cm, input);
|
1951
1966
|
}
|
1952
1967
|
function onPromptKeyDown(e, input, close) {
|
1953
|
-
var keyName = CodeMirror.keyName(e), up;
|
1968
|
+
var keyName = CodeMirror.keyName(e), up, offset;
|
1954
1969
|
if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||
|
1955
1970
|
(keyName == 'Backspace' && input == '')) {
|
1956
1971
|
vimGlobalState.exCommandHistoryController.pushInput(input);
|
@@ -1961,9 +1976,12 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1961
1976
|
cm.focus();
|
1962
1977
|
}
|
1963
1978
|
if (keyName == 'Up' || keyName == 'Down') {
|
1979
|
+
CodeMirror.e_stop(e);
|
1964
1980
|
up = keyName == 'Up' ? true : false;
|
1981
|
+
offset = e.target ? e.target.selectionEnd : 0;
|
1965
1982
|
input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';
|
1966
1983
|
close(input);
|
1984
|
+
if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);
|
1967
1985
|
} else if (keyName == 'Ctrl-U') {
|
1968
1986
|
CodeMirror.e_stop(e);
|
1969
1987
|
close('');
|
@@ -1977,7 +1995,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
1977
1995
|
} else {
|
1978
1996
|
if (vim.visualMode) {
|
1979
1997
|
showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>',
|
1980
|
-
onKeyDown: onPromptKeyDown});
|
1998
|
+
onKeyDown: onPromptKeyDown, selectValueOnOpen: false});
|
1981
1999
|
} else {
|
1982
2000
|
showPrompt(cm, { onClose: onPromptClose, prefix: ':',
|
1983
2001
|
onKeyDown: onPromptKeyDown});
|
@@ -2197,9 +2215,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2197
2215
|
return findNext(cm, prev/** prev */, query, motionArgs.repeat);
|
2198
2216
|
},
|
2199
2217
|
goToMark: function(cm, _head, motionArgs, vim) {
|
2200
|
-
var
|
2201
|
-
if (
|
2202
|
-
var pos = mark.find();
|
2218
|
+
var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);
|
2219
|
+
if (pos) {
|
2203
2220
|
return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;
|
2204
2221
|
}
|
2205
2222
|
return null;
|
@@ -2274,9 +2291,10 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2274
2291
|
var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;
|
2275
2292
|
var first = cm.firstLine();
|
2276
2293
|
var last = cm.lastLine();
|
2277
|
-
if (
|
2278
|
-
|
2279
|
-
|
2294
|
+
if (line < first && cur.line == first){
|
2295
|
+
return this.moveToStartOfLine(cm, head, motionArgs, vim);
|
2296
|
+
}else if (line > last && cur.line == last){
|
2297
|
+
return this.moveToEol(cm, head, motionArgs, vim);
|
2280
2298
|
}
|
2281
2299
|
var fold = cm.ace.session.getFoldLine(line);
|
2282
2300
|
if (fold) {
|
@@ -2429,8 +2447,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2429
2447
|
textObjectManipulation: function(cm, head, motionArgs, vim) {
|
2430
2448
|
var mirroredPairs = {'(': ')', ')': '(',
|
2431
2449
|
'{': '}', '}': '{',
|
2432
|
-
'[': ']', ']': '['
|
2433
|
-
|
2450
|
+
'[': ']', ']': '[',
|
2451
|
+
'<': '>', '>': '<'};
|
2452
|
+
var selfPaired = {'\'': true, '"': true, '`': true};
|
2434
2453
|
|
2435
2454
|
var character = motionArgs.selectedCharacter;
|
2436
2455
|
if (character == 'b') {
|
@@ -2473,7 +2492,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2473
2492
|
},
|
2474
2493
|
|
2475
2494
|
repeatLastCharacterSearch: function(cm, head, motionArgs) {
|
2476
|
-
var lastSearch = vimGlobalState.
|
2495
|
+
var lastSearch = vimGlobalState.lastCharacterSearch;
|
2477
2496
|
var repeat = motionArgs.repeat;
|
2478
2497
|
var forward = motionArgs.forward === lastSearch.forward;
|
2479
2498
|
var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);
|
@@ -2574,7 +2593,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2574
2593
|
vimGlobalState.registerController.pushText(
|
2575
2594
|
args.registerName, 'delete', text,
|
2576
2595
|
args.linewise, vim.visualBlock);
|
2577
|
-
|
2596
|
+
var includeLineBreak = vim.insertMode
|
2597
|
+
return clipCursorToContent(cm, finalHead, includeLineBreak);
|
2578
2598
|
},
|
2579
2599
|
indent: function(cm, args, ranges) {
|
2580
2600
|
var vim = cm.state.vim;
|
@@ -2721,7 +2741,20 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2721
2741
|
enterMacroRecordMode: function(cm, actionArgs) {
|
2722
2742
|
var macroModeState = vimGlobalState.macroModeState;
|
2723
2743
|
var registerName = actionArgs.selectedCharacter;
|
2724
|
-
|
2744
|
+
if (vimGlobalState.registerController.isValidRegister(registerName)) {
|
2745
|
+
macroModeState.enterMacroRecordMode(cm, registerName);
|
2746
|
+
}
|
2747
|
+
},
|
2748
|
+
toggleOverwrite: function(cm) {
|
2749
|
+
if (!cm.state.overwrite) {
|
2750
|
+
cm.toggleOverwrite(true);
|
2751
|
+
cm.setOption('keyMap', 'vim-replace');
|
2752
|
+
CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"});
|
2753
|
+
} else {
|
2754
|
+
cm.toggleOverwrite(false);
|
2755
|
+
cm.setOption('keyMap', 'vim-insert');
|
2756
|
+
CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"});
|
2757
|
+
}
|
2725
2758
|
},
|
2726
2759
|
enterInsertMode: function(cm, actionArgs, vim) {
|
2727
2760
|
if (cm.getOption('readOnly')) { return; }
|
@@ -2768,13 +2801,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
2768
2801
|
return;
|
2769
2802
|
}
|
2770
2803
|
}
|
2771
|
-
cm.setOption('keyMap', 'vim-insert');
|
2772
2804
|
cm.setOption('disableInput', false);
|
2773
2805
|
if (actionArgs && actionArgs.replace) {
|
2774
2806
|
cm.toggleOverwrite(true);
|
2775
2807
|
cm.setOption('keyMap', 'vim-replace');
|
2776
2808
|
CodeMirror.signal(cm, "vim-mode-change", {mode: "replace"});
|
2777
2809
|
} else {
|
2810
|
+
cm.toggleOverwrite(false);
|
2778
2811
|
cm.setOption('keyMap', 'vim-insert');
|
2779
2812
|
CodeMirror.signal(cm, "vim-mode-change", {mode: "insert"});
|
2780
2813
|
}
|
@@ -3088,25 +3121,32 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3088
3121
|
incrementNumberToken: function(cm, actionArgs) {
|
3089
3122
|
var cur = cm.getCursor();
|
3090
3123
|
var lineStr = cm.getLine(cur.line);
|
3091
|
-
var re =
|
3124
|
+
var re = /(-?)(?:(0x)([\da-f]+)|(0b|0|)(\d+))/gi;
|
3092
3125
|
var match;
|
3093
3126
|
var start;
|
3094
3127
|
var end;
|
3095
3128
|
var numberStr;
|
3096
|
-
var token;
|
3097
3129
|
while ((match = re.exec(lineStr)) !== null) {
|
3098
|
-
token = match[0];
|
3099
3130
|
start = match.index;
|
3100
|
-
end = start +
|
3131
|
+
end = start + match[0].length;
|
3101
3132
|
if (cur.ch < end)break;
|
3102
3133
|
}
|
3103
3134
|
if (!actionArgs.backtrack && (end <= cur.ch))return;
|
3104
|
-
if (
|
3135
|
+
if (match) {
|
3136
|
+
var baseStr = match[2] || match[4]
|
3137
|
+
var digits = match[3] || match[5]
|
3105
3138
|
var increment = actionArgs.increase ? 1 : -1;
|
3106
|
-
var
|
3139
|
+
var base = {'0b': 2, '0': 8, '': 10, '0x': 16}[baseStr.toLowerCase()];
|
3140
|
+
var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat);
|
3141
|
+
numberStr = number.toString(base);
|
3142
|
+
var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : ''
|
3143
|
+
if (numberStr.charAt(0) === '-') {
|
3144
|
+
numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1);
|
3145
|
+
} else {
|
3146
|
+
numberStr = baseStr + zeroPadding + numberStr;
|
3147
|
+
}
|
3107
3148
|
var from = Pos(cur.line, start);
|
3108
3149
|
var to = Pos(cur.line, end);
|
3109
|
-
numberStr = number.toString();
|
3110
3150
|
cm.replaceRange(numberStr, from, to);
|
3111
3151
|
} else {
|
3112
3152
|
return;
|
@@ -3124,6 +3164,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3124
3164
|
}
|
3125
3165
|
repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);
|
3126
3166
|
},
|
3167
|
+
indent: function(cm, actionArgs) {
|
3168
|
+
cm.indentLine(cm.getCursor().line, actionArgs.indentRight);
|
3169
|
+
},
|
3127
3170
|
exitInsertMode: exitInsertMode
|
3128
3171
|
};
|
3129
3172
|
|
@@ -3188,7 +3231,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3188
3231
|
}
|
3189
3232
|
}
|
3190
3233
|
function lastChar(keys) {
|
3191
|
-
var match = /^.*(<[
|
3234
|
+
var match = /^.*(<[^>]+>)$/.exec(keys);
|
3192
3235
|
var selectedCharacter = match ? match[1] : keys.slice(-1);
|
3193
3236
|
if (selectedCharacter.length > 1){
|
3194
3237
|
switch(selectedCharacter){
|
@@ -3199,6 +3242,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3199
3242
|
selectedCharacter=' ';
|
3200
3243
|
break;
|
3201
3244
|
default:
|
3245
|
+
selectedCharacter='';
|
3202
3246
|
break;
|
3203
3247
|
}
|
3204
3248
|
}
|
@@ -3292,7 +3336,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3292
3336
|
var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};
|
3293
3337
|
selections.push(range);
|
3294
3338
|
}
|
3295
|
-
primIndex = head.line == lastLine ? selections.length - 1 : 0;
|
3296
3339
|
cm.setSelections(selections);
|
3297
3340
|
selectionEnd.ch = headCh;
|
3298
3341
|
base.ch = baseCh;
|
@@ -3554,9 +3597,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3554
3597
|
}
|
3555
3598
|
|
3556
3599
|
function recordLastCharacterSearch(increment, args) {
|
3557
|
-
vimGlobalState.
|
3558
|
-
vimGlobalState.
|
3559
|
-
vimGlobalState.
|
3600
|
+
vimGlobalState.lastCharacterSearch.increment = increment;
|
3601
|
+
vimGlobalState.lastCharacterSearch.forward = args.forward;
|
3602
|
+
vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;
|
3560
3603
|
}
|
3561
3604
|
|
3562
3605
|
var symbolToMode = {
|
@@ -3730,7 +3773,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3730
3773
|
line = cm.getLine(lineNum);
|
3731
3774
|
pos = (dir > 0) ? 0 : line.length;
|
3732
3775
|
}
|
3733
|
-
throw new Error('The impossible happened.');
|
3734
3776
|
}
|
3735
3777
|
function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {
|
3736
3778
|
var curStart = copyCursor(cur);
|
@@ -3878,11 +3920,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3878
3920
|
var bracketRegexp = ({
|
3879
3921
|
'(': /[()]/, ')': /[()]/,
|
3880
3922
|
'[': /[[\]]/, ']': /[[\]]/,
|
3881
|
-
'{': /[{}]/, '}': /[{}]
|
3923
|
+
'{': /[{}]/, '}': /[{}]/,
|
3924
|
+
'<': /[<>]/, '>': /[<>]/})[symb];
|
3882
3925
|
var openSym = ({
|
3883
3926
|
'(': '(', ')': '(',
|
3884
3927
|
'[': '[', ']': '[',
|
3885
|
-
'{': '{', '}': '{'
|
3928
|
+
'{': '{', '}': '{',
|
3929
|
+
'<': '<', '>': '<'})[symb];
|
3886
3930
|
var curChar = cm.getLine(cur.line).charAt(cur.ch);
|
3887
3931
|
var offset = curChar === openSym ? 1 : 0;
|
3888
3932
|
|
@@ -3988,14 +4032,28 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
3988
4032
|
if (cm.openDialog) {
|
3989
4033
|
cm.openDialog(template, onClose, { bottom: true, value: options.value,
|
3990
4034
|
onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,
|
3991
|
-
selectValueOnOpen: false
|
4035
|
+
selectValueOnOpen: false, onClose: function() {
|
4036
|
+
if (cm.state.vim) {
|
4037
|
+
cm.state.vim.status = "";
|
4038
|
+
cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);
|
4039
|
+
}
|
4040
|
+
}});
|
3992
4041
|
}
|
3993
4042
|
else {
|
3994
4043
|
onClose(prompt(shortText, ''));
|
3995
4044
|
}
|
3996
4045
|
}
|
4046
|
+
|
3997
4047
|
function splitBySlash(argString) {
|
3998
|
-
|
4048
|
+
return splitBySeparator(argString, '/');
|
4049
|
+
}
|
4050
|
+
|
4051
|
+
function findUnescapedSlashes(argString) {
|
4052
|
+
return findUnescapedSeparators(argString, '/');
|
4053
|
+
}
|
4054
|
+
|
4055
|
+
function splitBySeparator(argString, separator) {
|
4056
|
+
var slashes = findUnescapedSeparators(argString, separator) || [];
|
3999
4057
|
if (!slashes.length) return [];
|
4000
4058
|
var tokens = [];
|
4001
4059
|
if (slashes[0] !== 0) return;
|
@@ -4006,12 +4064,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4006
4064
|
return tokens;
|
4007
4065
|
}
|
4008
4066
|
|
4009
|
-
function
|
4067
|
+
function findUnescapedSeparators(str, separator) {
|
4068
|
+
if (!separator)
|
4069
|
+
separator = '/';
|
4070
|
+
|
4010
4071
|
var escapeNextChar = false;
|
4011
4072
|
var slashes = [];
|
4012
4073
|
for (var i = 0; i < str.length; i++) {
|
4013
4074
|
var c = str.charAt(i);
|
4014
|
-
if (!escapeNextChar && c ==
|
4075
|
+
if (!escapeNextChar && c == separator) {
|
4015
4076
|
slashes.push(i);
|
4016
4077
|
}
|
4017
4078
|
escapeNextChar = !escapeNextChar && (c == '\\');
|
@@ -4143,17 +4204,10 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4143
4204
|
}
|
4144
4205
|
}
|
4145
4206
|
function makePrompt(prefix, desc) {
|
4146
|
-
var raw = ''
|
4147
|
-
|
4148
|
-
|
4149
|
-
|
4150
|
-
raw += '<input type="text"/> ' +
|
4151
|
-
'<span style="color: #888">';
|
4152
|
-
if (desc) {
|
4153
|
-
raw += '<span style="color: #888">';
|
4154
|
-
raw += desc;
|
4155
|
-
raw += '</span>';
|
4156
|
-
}
|
4207
|
+
var raw = '<span style="font-family: monospace; white-space: pre">' +
|
4208
|
+
(prefix || "") + '<input type="text" autocorrect="off" autocapitalize="none" autocomplete="off"></span>';
|
4209
|
+
if (desc)
|
4210
|
+
raw += ' <span style="color: #888">' + desc + '</span>';
|
4157
4211
|
return raw;
|
4158
4212
|
}
|
4159
4213
|
var searchPromptDesc = '(Javascript regexp)';
|
@@ -4293,6 +4347,12 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4293
4347
|
}
|
4294
4348
|
}
|
4295
4349
|
|
4350
|
+
function getMarkPos(cm, vim, markName) {
|
4351
|
+
|
4352
|
+
var mark = vim.marks[markName];
|
4353
|
+
return mark && mark.find();
|
4354
|
+
}
|
4355
|
+
|
4296
4356
|
var ExCommandDispatcher = function() {
|
4297
4357
|
this.buildCommandMap_();
|
4298
4358
|
};
|
@@ -4387,20 +4447,35 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4387
4447
|
}
|
4388
4448
|
switch (inputStream.next()) {
|
4389
4449
|
case '.':
|
4390
|
-
return cm.getCursor().line;
|
4450
|
+
return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);
|
4391
4451
|
case '$':
|
4392
|
-
return cm.lastLine();
|
4452
|
+
return this.parseLineSpecOffset_(inputStream, cm.lastLine());
|
4393
4453
|
case '\'':
|
4394
|
-
var
|
4395
|
-
|
4396
|
-
|
4397
|
-
|
4398
|
-
|
4454
|
+
var markName = inputStream.next();
|
4455
|
+
var markPos = getMarkPos(cm, cm.state.vim, markName);
|
4456
|
+
if (!markPos) throw new Error('Mark not set');
|
4457
|
+
return this.parseLineSpecOffset_(inputStream, markPos.line);
|
4458
|
+
case '-':
|
4459
|
+
case '+':
|
4460
|
+
inputStream.backUp(1);
|
4461
|
+
return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);
|
4399
4462
|
default:
|
4400
4463
|
inputStream.backUp(1);
|
4401
4464
|
return undefined;
|
4402
4465
|
}
|
4403
4466
|
},
|
4467
|
+
parseLineSpecOffset_: function(inputStream, line) {
|
4468
|
+
var offsetMatch = inputStream.match(/^([+-])?(\d+)/);
|
4469
|
+
if (offsetMatch) {
|
4470
|
+
var offset = parseInt(offsetMatch[2], 10);
|
4471
|
+
if (offsetMatch[1] == "-") {
|
4472
|
+
line -= offset;
|
4473
|
+
} else {
|
4474
|
+
line += offset;
|
4475
|
+
}
|
4476
|
+
}
|
4477
|
+
return line;
|
4478
|
+
},
|
4404
4479
|
parseCommandArgs_: function(inputStream, params, command) {
|
4405
4480
|
if (inputStream.eol()) {
|
4406
4481
|
return;
|
@@ -4456,16 +4531,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4456
4531
|
var mapping = {
|
4457
4532
|
keys: lhs,
|
4458
4533
|
type: 'keyToEx',
|
4459
|
-
exArgs: { input: rhs.substring(1) }
|
4460
|
-
|
4534
|
+
exArgs: { input: rhs.substring(1) }
|
4535
|
+
};
|
4461
4536
|
if (ctx) { mapping.context = ctx; }
|
4462
4537
|
defaultKeymap.unshift(mapping);
|
4463
4538
|
} else {
|
4464
4539
|
var mapping = {
|
4465
4540
|
keys: lhs,
|
4466
4541
|
type: 'keyToKey',
|
4467
|
-
toKeys: rhs
|
4468
|
-
user: true
|
4542
|
+
toKeys: rhs
|
4469
4543
|
};
|
4470
4544
|
if (ctx) { mapping.context = ctx; }
|
4471
4545
|
defaultKeymap.unshift(mapping);
|
@@ -4484,8 +4558,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4484
4558
|
var keys = lhs;
|
4485
4559
|
for (var i = 0; i < defaultKeymap.length; i++) {
|
4486
4560
|
if (keys == defaultKeymap[i].keys
|
4487
|
-
&& defaultKeymap[i].context === ctx
|
4488
|
-
&& defaultKeymap[i].user) {
|
4561
|
+
&& defaultKeymap[i].context === ctx) {
|
4489
4562
|
defaultKeymap.splice(i, 1);
|
4490
4563
|
return;
|
4491
4564
|
}
|
@@ -4563,13 +4636,18 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4563
4636
|
}
|
4564
4637
|
if (!optionIsBoolean && value === undefined || forceGet) {
|
4565
4638
|
var oldValue = getOption(optionName, cm, setCfg);
|
4566
|
-
if (oldValue
|
4639
|
+
if (oldValue instanceof Error) {
|
4640
|
+
showConfirm(cm, oldValue.message);
|
4641
|
+
} else if (oldValue === true || oldValue === false) {
|
4567
4642
|
showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);
|
4568
4643
|
} else {
|
4569
4644
|
showConfirm(cm, ' ' + optionName + '=' + oldValue);
|
4570
4645
|
}
|
4571
4646
|
} else {
|
4572
|
-
setOption(optionName, value, cm, setCfg);
|
4647
|
+
var setOptionReturn = setOption(optionName, value, cm, setCfg);
|
4648
|
+
if (setOptionReturn instanceof Error) {
|
4649
|
+
showConfirm(cm, setOptionReturn.message);
|
4650
|
+
}
|
4573
4651
|
}
|
4574
4652
|
},
|
4575
4653
|
setlocal: function (cm, params) {
|
@@ -4606,25 +4684,27 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4606
4684
|
showConfirm(cm, regInfo);
|
4607
4685
|
},
|
4608
4686
|
sort: function(cm, params) {
|
4609
|
-
var reverse, ignoreCase, unique, number;
|
4687
|
+
var reverse, ignoreCase, unique, number, pattern;
|
4610
4688
|
function parseArgs() {
|
4611
4689
|
if (params.argString) {
|
4612
4690
|
var args = new CodeMirror.StringStream(params.argString);
|
4613
4691
|
if (args.eat('!')) { reverse = true; }
|
4614
4692
|
if (args.eol()) { return; }
|
4615
4693
|
if (!args.eatSpace()) { return 'Invalid arguments'; }
|
4616
|
-
var opts = args.match(/[
|
4617
|
-
if (opts) {
|
4618
|
-
|
4619
|
-
ignoreCase = opts.indexOf('i') != -1;
|
4620
|
-
unique = opts.indexOf('u') != -1;
|
4621
|
-
var decimal = opts.indexOf('d') != -1 && 1;
|
4622
|
-
var hex = opts.indexOf('x') != -1 && 1;
|
4623
|
-
var octal = opts.indexOf('o') != -1 && 1;
|
4694
|
+
var opts = args.match(/([dinuox]+)?\s*(\/.+\/)?\s*/);
|
4695
|
+
if (!opts && !args.eol()) { return 'Invalid arguments'; }
|
4696
|
+
if (opts[1]) {
|
4697
|
+
ignoreCase = opts[1].indexOf('i') != -1;
|
4698
|
+
unique = opts[1].indexOf('u') != -1;
|
4699
|
+
var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;
|
4700
|
+
var hex = opts[1].indexOf('x') != -1 && 1;
|
4701
|
+
var octal = opts[1].indexOf('o') != -1 && 1;
|
4624
4702
|
if (decimal + hex + octal > 1) { return 'Invalid arguments'; }
|
4625
4703
|
number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';
|
4626
4704
|
}
|
4627
|
-
if (
|
4705
|
+
if (opts[2]) {
|
4706
|
+
pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');
|
4707
|
+
}
|
4628
4708
|
}
|
4629
4709
|
}
|
4630
4710
|
var err = parseArgs();
|
@@ -4638,14 +4718,18 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4638
4718
|
var curStart = Pos(lineStart, 0);
|
4639
4719
|
var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));
|
4640
4720
|
var text = cm.getRange(curStart, curEnd).split('\n');
|
4641
|
-
var numberRegex =
|
4721
|
+
var numberRegex = pattern ? pattern :
|
4722
|
+
(number == 'decimal') ? /(-?)([\d]+)/ :
|
4642
4723
|
(number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :
|
4643
4724
|
(number == 'octal') ? /([0-7]+)/ : null;
|
4644
4725
|
var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;
|
4645
4726
|
var numPart = [], textPart = [];
|
4646
|
-
if (number) {
|
4727
|
+
if (number || pattern) {
|
4647
4728
|
for (var i = 0; i < text.length; i++) {
|
4648
|
-
|
4729
|
+
var matchPart = pattern ? text[i].match(pattern) : null;
|
4730
|
+
if (matchPart && matchPart[0] != '') {
|
4731
|
+
numPart.push(matchPart);
|
4732
|
+
} else if (!pattern && numberRegex.exec(text[i])) {
|
4649
4733
|
numPart.push(text[i]);
|
4650
4734
|
} else {
|
4651
4735
|
textPart.push(text[i]);
|
@@ -4664,8 +4748,17 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4664
4748
|
bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);
|
4665
4749
|
return anum - bnum;
|
4666
4750
|
}
|
4667
|
-
|
4668
|
-
|
4751
|
+
function comparePatternFn(a, b) {
|
4752
|
+
if (reverse) { var tmp; tmp = a; a = b; b = tmp; }
|
4753
|
+
if (ignoreCase) { a[0] = a[0].toLowerCase(); b[0] = b[0].toLowerCase(); }
|
4754
|
+
return (a[0] < b[0]) ? -1 : 1;
|
4755
|
+
}
|
4756
|
+
numPart.sort(pattern ? comparePatternFn : compareFn);
|
4757
|
+
if (pattern) {
|
4758
|
+
for (var i = 0; i < numPart.length; i++) {
|
4759
|
+
numPart[i] = numPart[i].input;
|
4760
|
+
}
|
4761
|
+
} else if (!number) { textPart.sort(compareFn); }
|
4669
4762
|
text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);
|
4670
4763
|
if (unique) { // Remove duplicate lines
|
4671
4764
|
var textOld = text;
|
@@ -4734,13 +4827,17 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4734
4827
|
'any other getSearchCursor implementation.');
|
4735
4828
|
}
|
4736
4829
|
var argString = params.argString;
|
4737
|
-
var tokens = argString ?
|
4830
|
+
var tokens = argString ? splitBySeparator(argString, argString[0]) : [];
|
4738
4831
|
var regexPart, replacePart = '', trailing, flagsPart, count;
|
4739
4832
|
var confirm = false; // Whether to confirm each replace.
|
4740
4833
|
var global = false; // True to replace all instances on a line, false to replace only 1.
|
4741
4834
|
if (tokens.length) {
|
4742
4835
|
regexPart = tokens[0];
|
4743
4836
|
replacePart = tokens[1];
|
4837
|
+
if (regexPart && regexPart[regexPart.length - 1] === '$') {
|
4838
|
+
regexPart = regexPart.slice(0, regexPart.length - 1) + '\\n';
|
4839
|
+
replacePart = replacePart ? replacePart + '\n' : '\n';
|
4840
|
+
}
|
4744
4841
|
if (replacePart !== undefined) {
|
4745
4842
|
if (getOption('pcre')) {
|
4746
4843
|
replacePart = unescapeRegexReplace(replacePart);
|
@@ -4769,7 +4866,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4769
4866
|
global = true;
|
4770
4867
|
flagsPart.replace('g', '');
|
4771
4868
|
}
|
4772
|
-
regexPart = regexPart + '/' + flagsPart;
|
4869
|
+
regexPart = regexPart.replace(/\//g, "\\/") + '/' + flagsPart;
|
4773
4870
|
}
|
4774
4871
|
}
|
4775
4872
|
if (regexPart) {
|
@@ -4806,13 +4903,20 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4806
4903
|
write: function(cm) {
|
4807
4904
|
if (CodeMirror.commands.save) {
|
4808
4905
|
CodeMirror.commands.save(cm);
|
4809
|
-
} else {
|
4906
|
+
} else if (cm.save) {
|
4810
4907
|
cm.save();
|
4811
4908
|
}
|
4812
4909
|
},
|
4813
4910
|
nohlsearch: function(cm) {
|
4814
4911
|
clearSearchHighlight(cm);
|
4815
4912
|
},
|
4913
|
+
yank: function (cm) {
|
4914
|
+
var cur = copyCursor(cm.getCursor());
|
4915
|
+
var line = cur.line;
|
4916
|
+
var lineText = cm.getLine(line);
|
4917
|
+
vimGlobalState.registerController.pushText(
|
4918
|
+
'0', 'yank', lineText, true, true);
|
4919
|
+
},
|
4816
4920
|
delmarks: function(cm, params) {
|
4817
4921
|
if (!params.argString || !trim(params.argString)) {
|
4818
4922
|
showConfirm(cm, 'Argument required');
|
@@ -4961,21 +5065,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4961
5065
|
var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');
|
4962
5066
|
var isPlaying = macroModeState.isPlaying;
|
4963
5067
|
var lastChange = macroModeState.lastInsertModeChanges;
|
4964
|
-
var text = [];
|
4965
5068
|
if (!isPlaying) {
|
4966
|
-
var selLength = lastChange.inVisualBlock ? vim.lastSelection.visualBlock.height : 1;
|
4967
|
-
var changes = lastChange.changes;
|
4968
|
-
var text = [];
|
4969
|
-
var i = 0;
|
4970
|
-
while (i < changes.length) {
|
4971
|
-
text.push(changes[i]);
|
4972
|
-
if (changes[i] instanceof InsertModeKey) {
|
4973
|
-
i++;
|
4974
|
-
} else {
|
4975
|
-
i+= selLength;
|
4976
|
-
}
|
4977
|
-
}
|
4978
|
-
lastChange.changes = text;
|
4979
5069
|
cm.off('change', onChange);
|
4980
5070
|
CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);
|
4981
5071
|
}
|
@@ -4989,8 +5079,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
4989
5079
|
cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);
|
4990
5080
|
cm.setOption('keyMap', 'vim');
|
4991
5081
|
cm.setOption('disableInput', true);
|
4992
|
-
|
4993
|
-
lastChange.overwrite = cm.state.overwrite;
|
4994
5082
|
cm.toggleOverwrite(false); // exit replace mode if we were in it.
|
4995
5083
|
insertModeChangeRegister.setText(lastChange.changes.join(''));
|
4996
5084
|
CodeMirror.signal(cm, "vim-mode-change", {mode: "normal"});
|
@@ -5094,20 +5182,29 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5094
5182
|
register.pushSearchQuery(query);
|
5095
5183
|
}
|
5096
5184
|
}
|
5097
|
-
function onChange(
|
5185
|
+
function onChange(cm, changeObj) {
|
5098
5186
|
var macroModeState = vimGlobalState.macroModeState;
|
5099
5187
|
var lastChange = macroModeState.lastInsertModeChanges;
|
5100
5188
|
if (!macroModeState.isPlaying) {
|
5101
5189
|
while(changeObj) {
|
5102
5190
|
lastChange.expectCursorActivityForChange = true;
|
5103
|
-
if (
|
5191
|
+
if (lastChange.ignoreCount > 1) {
|
5192
|
+
lastChange.ignoreCount--;
|
5193
|
+
} else if (changeObj.origin == '+input' || changeObj.origin == 'paste'
|
5104
5194
|
|| changeObj.origin === undefined /* only in testing */) {
|
5195
|
+
var selectionCount = cm.listSelections().length;
|
5196
|
+
if (selectionCount > 1)
|
5197
|
+
lastChange.ignoreCount = selectionCount;
|
5105
5198
|
var text = changeObj.text.join('\n');
|
5106
5199
|
if (lastChange.maybeReset) {
|
5107
5200
|
lastChange.changes = [];
|
5108
5201
|
lastChange.maybeReset = false;
|
5109
5202
|
}
|
5110
|
-
|
5203
|
+
if (cm.state.overwrite && !/\n/.test(text)) {
|
5204
|
+
lastChange.changes.push([text]);
|
5205
|
+
} else {
|
5206
|
+
lastChange.changes.push(text);
|
5207
|
+
}
|
5111
5208
|
}
|
5112
5209
|
changeObj = changeObj.next;
|
5113
5210
|
}
|
@@ -5201,7 +5298,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5201
5298
|
if (macroModeState.lastInsertModeChanges.changes.length > 0) {
|
5202
5299
|
repeat = !vim.lastEditActionCommand ? 1 : repeat;
|
5203
5300
|
var changeObject = macroModeState.lastInsertModeChanges;
|
5204
|
-
repeatInsertModeChanges(cm, changeObject.changes, repeat
|
5301
|
+
repeatInsertModeChanges(cm, changeObject.changes, repeat);
|
5205
5302
|
}
|
5206
5303
|
}
|
5207
5304
|
vim.inputState = vim.lastEditInputState;
|
@@ -5223,7 +5320,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5223
5320
|
macroModeState.isPlaying = false;
|
5224
5321
|
}
|
5225
5322
|
|
5226
|
-
function repeatInsertModeChanges(cm, changes, repeat
|
5323
|
+
function repeatInsertModeChanges(cm, changes, repeat) {
|
5227
5324
|
function keyHandler(binding) {
|
5228
5325
|
if (typeof binding == 'string') {
|
5229
5326
|
CodeMirror.commands[binding](cm);
|
@@ -5250,13 +5347,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5250
5347
|
var change = changes[j];
|
5251
5348
|
if (change instanceof InsertModeKey) {
|
5252
5349
|
CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);
|
5253
|
-
} else {
|
5350
|
+
} else if (typeof change == "string") {
|
5254
5351
|
var cur = cm.getCursor();
|
5255
|
-
|
5256
|
-
|
5257
|
-
|
5258
|
-
|
5259
|
-
cm.replaceRange(change,
|
5352
|
+
cm.replaceRange(change, cur, cur);
|
5353
|
+
} else {
|
5354
|
+
var start = cm.getCursor();
|
5355
|
+
var end = offsetCursor(start, 0, change[0].length);
|
5356
|
+
cm.replaceRange(change[0], start, end);
|
5260
5357
|
}
|
5261
5358
|
}
|
5262
5359
|
}
|
@@ -5282,7 +5379,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5282
5379
|
var name = '';
|
5283
5380
|
if (e.ctrlKey) { name += 'C-'; }
|
5284
5381
|
if (e.altKey) { name += 'A-'; }
|
5285
|
-
if (e.shiftKey) { name += 'S-'; }
|
5382
|
+
if ((name || key.length > 1) && e.shiftKey) { name += 'S-'; }
|
5286
5383
|
|
5287
5384
|
name += key;
|
5288
5385
|
if (name.length > 1) { name = '<' + name + '>'; }
|
@@ -5351,13 +5448,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5351
5448
|
cm.curOp.cursorActivity = false;
|
5352
5449
|
}, true);
|
5353
5450
|
}
|
5451
|
+
if (isHandled && !vim.visualMode && !vim.insert)
|
5452
|
+
handleExternalSelection(cm, vim);
|
5354
5453
|
return isHandled;
|
5355
5454
|
}
|
5356
5455
|
exports.CodeMirror = CodeMirror;
|
5357
5456
|
var getVim = Vim.maybeInitVimState_;
|
5358
5457
|
exports.handler = {
|
5359
5458
|
$id: "ace/keyboard/vim",
|
5360
|
-
drawCursor: function(
|
5459
|
+
drawCursor: function(element, pixelPos, config, sel, session) {
|
5361
5460
|
var vim = this.state.vim || {};
|
5362
5461
|
var w = config.characterWidth;
|
5363
5462
|
var h = config.lineHeight;
|
@@ -5374,17 +5473,41 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5374
5473
|
h = h / 2;
|
5375
5474
|
top += h;
|
5376
5475
|
}
|
5377
|
-
|
5378
|
-
style
|
5379
|
-
style
|
5380
|
-
style.height = h + "px";
|
5476
|
+
dom.translate(element, left, top);
|
5477
|
+
dom.setStyle(element.style, "width", w + "px");
|
5478
|
+
dom.setStyle(element.style, "height", h + "px");
|
5381
5479
|
},
|
5382
5480
|
handleKeyboard: function(data, hashId, key, keyCode, e) {
|
5383
5481
|
var editor = data.editor;
|
5384
5482
|
var cm = editor.state.cm;
|
5385
5483
|
var vim = getVim(cm);
|
5386
5484
|
if (keyCode == -1) return;
|
5387
|
-
|
5485
|
+
if (!vim.insertMode) {
|
5486
|
+
if (hashId == -1) {
|
5487
|
+
if (key.charCodeAt(0) > 0xFF) {
|
5488
|
+
if (data.inputKey) {
|
5489
|
+
key = data.inputKey;
|
5490
|
+
if (key && data.inputHash == 4)
|
5491
|
+
key = key.toUpperCase();
|
5492
|
+
}
|
5493
|
+
}
|
5494
|
+
data.inputChar = key;
|
5495
|
+
}
|
5496
|
+
else if (hashId == 4 || hashId == 0) {
|
5497
|
+
if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {
|
5498
|
+
key = data.inputChar;
|
5499
|
+
hashId = -1
|
5500
|
+
}
|
5501
|
+
else {
|
5502
|
+
data.inputChar = null;
|
5503
|
+
data.inputKey = key;
|
5504
|
+
data.inputHash = hashId;
|
5505
|
+
}
|
5506
|
+
}
|
5507
|
+
else {
|
5508
|
+
data.inputChar = data.inputKey = null;
|
5509
|
+
}
|
5510
|
+
}
|
5388
5511
|
if (key == "c" && hashId == 1) { // key == "ctrl-c"
|
5389
5512
|
if (!useragent.isMac && editor.getCopyText()) {
|
5390
5513
|
editor.once("copy", function() {
|
@@ -5392,11 +5515,12 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5392
5515
|
});
|
5393
5516
|
return {command: "null", passEvent: true};
|
5394
5517
|
}
|
5395
|
-
}
|
5396
|
-
|
5397
|
-
|
5398
|
-
|
5399
|
-
|
5518
|
+
}
|
5519
|
+
|
5520
|
+
if (key == "esc" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {
|
5521
|
+
var searchState = getSearchState(cm);
|
5522
|
+
var overlay = searchState.getOverlay();
|
5523
|
+
if (overlay) cm.removeOverlay(overlay);
|
5400
5524
|
}
|
5401
5525
|
|
5402
5526
|
if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {
|
@@ -5435,12 +5559,18 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5435
5559
|
});
|
5436
5560
|
cm.on("vim-mode-change", function() {
|
5437
5561
|
if (cm.virtualSelectionMode()) return;
|
5438
|
-
|
5562
|
+
updateInputMode();
|
5439
5563
|
cm._signal("changeStatus");
|
5440
5564
|
});
|
5441
|
-
|
5565
|
+
function updateInputMode() {
|
5566
|
+
var isIntsert = getVim(cm).insertMode;
|
5567
|
+
cm.ace.renderer.setStyle("normal-mode", !isIntsert);
|
5568
|
+
editor.textInput.setCommandMode(!isIntsert);
|
5569
|
+
editor.renderer.$keepTextAreaAtCursor = isIntsert;
|
5570
|
+
editor.renderer.$blockCursor = !isIntsert;
|
5571
|
+
}
|
5572
|
+
updateInputMode();
|
5442
5573
|
editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);
|
5443
|
-
this.updateMacCompositionHandlers(editor, true);
|
5444
5574
|
},
|
5445
5575
|
detach: function(editor) {
|
5446
5576
|
var cm = editor.state.cm;
|
@@ -5450,7 +5580,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5450
5580
|
editor.$vimModeHandler = null;
|
5451
5581
|
editor.renderer.$cursorLayer.drawCursor = null;
|
5452
5582
|
editor.renderer.setStyle("normal-mode", false);
|
5453
|
-
|
5583
|
+
editor.textInput.setCommandMode(false);
|
5584
|
+
editor.renderer.$keepTextAreaAtCursor = true;
|
5454
5585
|
},
|
5455
5586
|
getStatusText: function(editor) {
|
5456
5587
|
var cm = editor.state.cm;
|
@@ -5468,77 +5599,6 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5468
5599
|
if (vim.status)
|
5469
5600
|
status += (status ? " " : "") + vim.status;
|
5470
5601
|
return status;
|
5471
|
-
},
|
5472
|
-
handleMacRepeat: function(data, hashId, key) {
|
5473
|
-
if (hashId == -1) {
|
5474
|
-
data.inputChar = key;
|
5475
|
-
data.lastEvent = "input";
|
5476
|
-
} else if (data.inputChar && data.$lastHash == hashId && data.$lastKey == key) {
|
5477
|
-
if (data.lastEvent == "input") {
|
5478
|
-
data.lastEvent = "input1";
|
5479
|
-
} else if (data.lastEvent == "input1") {
|
5480
|
-
return true;
|
5481
|
-
}
|
5482
|
-
} else {
|
5483
|
-
data.$lastHash = hashId;
|
5484
|
-
data.$lastKey = key;
|
5485
|
-
data.lastEvent = "keypress";
|
5486
|
-
}
|
5487
|
-
},
|
5488
|
-
updateMacCompositionHandlers: function(editor, enable) {
|
5489
|
-
var onCompositionUpdateOverride = function(text) {
|
5490
|
-
var cm = editor.state.cm;
|
5491
|
-
var vim = getVim(cm);
|
5492
|
-
if (!vim.insertMode) {
|
5493
|
-
var el = this.textInput.getElement();
|
5494
|
-
el.blur();
|
5495
|
-
el.focus();
|
5496
|
-
el.value = text;
|
5497
|
-
} else {
|
5498
|
-
this.onCompositionUpdateOrig(text);
|
5499
|
-
}
|
5500
|
-
};
|
5501
|
-
var onCompositionStartOverride = function(text) {
|
5502
|
-
var cm = editor.state.cm;
|
5503
|
-
var vim = getVim(cm);
|
5504
|
-
if (!vim.insertMode) {
|
5505
|
-
this.onCompositionStartOrig(text);
|
5506
|
-
}
|
5507
|
-
};
|
5508
|
-
if (enable) {
|
5509
|
-
if (!editor.onCompositionUpdateOrig) {
|
5510
|
-
editor.onCompositionUpdateOrig = editor.onCompositionUpdate;
|
5511
|
-
editor.onCompositionUpdate = onCompositionUpdateOverride;
|
5512
|
-
editor.onCompositionStartOrig = editor.onCompositionStart;
|
5513
|
-
editor.onCompositionStart = onCompositionStartOverride;
|
5514
|
-
}
|
5515
|
-
} else {
|
5516
|
-
if (editor.onCompositionUpdateOrig) {
|
5517
|
-
editor.onCompositionUpdate = editor.onCompositionUpdateOrig;
|
5518
|
-
editor.onCompositionUpdateOrig = null;
|
5519
|
-
editor.onCompositionStart = editor.onCompositionStartOrig;
|
5520
|
-
editor.onCompositionStartOrig = null;
|
5521
|
-
}
|
5522
|
-
}
|
5523
|
-
}
|
5524
|
-
};
|
5525
|
-
var renderVirtualNumbers = {
|
5526
|
-
getText: function(session, row) {
|
5527
|
-
return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + "";
|
5528
|
-
},
|
5529
|
-
getWidth: function(session, lastLineNumber, config) {
|
5530
|
-
return session.getLength().toString().length * config.characterWidth;
|
5531
|
-
},
|
5532
|
-
update: function(e, editor) {
|
5533
|
-
editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);
|
5534
|
-
},
|
5535
|
-
attach: function(editor) {
|
5536
|
-
editor.renderer.$gutterLayer.$renderer = this;
|
5537
|
-
editor.on("changeSelection", this.update);
|
5538
|
-
},
|
5539
|
-
detach: function(editor) {
|
5540
|
-
editor.renderer.$gutterLayer.$renderer = null;
|
5541
|
-
editor.off("changeSelection", this.update);
|
5542
5602
|
}
|
5543
5603
|
};
|
5544
5604
|
Vim.defineOption({
|
@@ -5595,4 +5655,11 @@ dom.importCssString(".normal-mode .ace_cursor{\
|
|
5595
5655
|
exports.Vim = Vim;
|
5596
5656
|
|
5597
5657
|
Vim.map("Y", "yy", "normal");
|
5598
|
-
});
|
5658
|
+
}); (function() {
|
5659
|
+
window.require(["ace/keyboard/vim"], function(m) {
|
5660
|
+
if (typeof module == "object" && typeof exports == "object" && module) {
|
5661
|
+
module.exports = m;
|
5662
|
+
}
|
5663
|
+
});
|
5664
|
+
})();
|
5665
|
+
|