ber-security.graylog.graylog-plugin-correlation-count.6.0.0.source-code.d09463c099fb2c44719380623a5c68fb.js.map Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of graylog-plugin-correlation-count Show documentation
Show all versions of graylog-plugin-correlation-count Show documentation
Graylog ${project.artifactId} plugin.
{"version":3,"sources":["webpack://CorrelationCount/d09463c099fb2c44719380623a5c68fb.js"],"sourcesContent":["ace.define(\"ace/ext/hardwrap\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/editor\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nfunction hardWrap(editor, options) {\n var max = options.column || editor.getOption(\"printMarginColumn\");\n var allowMerge = options.allowMerge != false;\n var row = Math.min(options.startRow, options.endRow);\n var endRow = Math.max(options.startRow, options.endRow);\n var session = editor.session;\n while (row <= endRow) {\n var line = session.getLine(row);\n if (line.length > max) {\n var space = findSpace(line, max, 5);\n if (space) {\n var indentation = /^\\s*/.exec(line)[0];\n session.replace(new Range(row, space.start, row, space.end), \"\\n\" + indentation);\n }\n endRow++;\n }\n else if (allowMerge && /\\S/.test(line) && row != endRow) {\n var nextLine = session.getLine(row + 1);\n if (nextLine && /\\S/.test(nextLine)) {\n var trimmedLine = line.replace(/\\s+$/, \"\");\n var trimmedNextLine = nextLine.replace(/^\\s+/, \"\");\n var mergedLine = trimmedLine + \" \" + trimmedNextLine;\n var space = findSpace(mergedLine, max, 5);\n if (space && space.start > trimmedLine.length || mergedLine.length < max) {\n var replaceRange = new Range(row, trimmedLine.length, row + 1, nextLine.length - trimmedNextLine.length);\n session.replace(replaceRange, \" \");\n row--;\n endRow--;\n }\n else if (trimmedLine.length < line.length) {\n session.remove(new Range(row, trimmedLine.length, row, line.length));\n }\n }\n }\n row++;\n }\n function findSpace(line, max, min) {\n if (line.length < max)\n return;\n var before = line.slice(0, max);\n var after = line.slice(max);\n var spaceAfter = /^(?:(\\s+)|(\\S+)(\\s+))/.exec(after);\n var spaceBefore = /(?:(\\s+)|(\\s+)(\\S+))$/.exec(before);\n var start = 0;\n var end = 0;\n if (spaceBefore && !spaceBefore[2]) {\n start = max - spaceBefore[1].length;\n end = max;\n }\n if (spaceAfter && !spaceAfter[2]) {\n if (!start)\n start = max;\n end = max + spaceAfter[1].length;\n }\n if (start) {\n return {\n start: start,\n end: end\n };\n }\n if (spaceBefore && spaceBefore[2] && spaceBefore.index > min) {\n return {\n start: spaceBefore.index,\n end: spaceBefore.index + spaceBefore[2].length\n };\n }\n if (spaceAfter && spaceAfter[2]) {\n start = max + spaceAfter[2].length;\n return {\n start: start,\n end: start + spaceAfter[3].length\n };\n }\n }\n}\nfunction wrapAfterInput(e) {\n if (e.command.name == \"insertstring\" && /\\S/.test(e.args)) {\n var editor = e.editor;\n var cursor = editor.selection.cursor;\n if (cursor.column <= editor.renderer.$printMarginColumn)\n return;\n var lastDelta = editor.session.$undoManager.$lastDelta;\n hardWrap(editor, {\n startRow: cursor.row, endRow: cursor.row,\n allowMerge: false\n });\n if (lastDelta != editor.session.$undoManager.$lastDelta)\n editor.session.markUndoGroup();\n }\n}\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n hardWrap: {\n set: function (val) {\n if (val) {\n this.commands.on(\"afterExec\", wrapAfterInput);\n }\n else {\n this.commands.off(\"afterExec\", wrapAfterInput);\n }\n },\n value: false\n }\n});\nexports.hardWrap = hardWrap;\n\n});\n\nace.define(\"ace/keyboard/vim\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/keys\",\"ace/lib/event\",\"ace/search\",\"ace/lib/useragent\",\"ace/search_highlight\",\"ace/commands/multi_select_commands\",\"ace/mode/text\",\"ace/ext/hardwrap\",\"ace/multi_select\"], function(require, exports, module){// CodeMirror, copyright (c) by Marijn Haverbeke and others\n'use strict';\nfunction log() {\n var d = \"\";\n function format(p) {\n if (typeof p != \"object\")\n return p + \"\";\n if (\"line\" in p) {\n return p.line + \":\" + p.ch;\n }\n if (\"anchor\" in p) {\n return format(p.anchor) + \"->\" + format(p.head);\n }\n if (Array.isArray(p))\n return \"[\" + p.map(function (x) {\n return format(x);\n }) + \"]\";\n return JSON.stringify(p);\n }\n for (var i = 0; i < arguments.length; i++) {\n var p = arguments[i];\n var f = format(p);\n d += f + \" \";\n }\n console.log(d);\n}\nvar Range = require(\"../range\").Range;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar domLib = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar KEYS = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar Search = require(\"../search\").Search;\nvar useragent = require(\"../lib/useragent\");\nvar SearchHighlight = require(\"../search_highlight\").SearchHighlight;\nvar multiSelectCommands = require(\"../commands/multi_select_commands\");\nvar TextModeTokenRe = require(\"../mode/text\").Mode.prototype.tokenRe;\nvar hardWrap = require(\"../ext/hardwrap\").hardWrap;\nrequire(\"../multi_select\");\nvar CodeMirror = function (ace) {\n this.ace = ace;\n this.state = {};\n this.marks = {};\n this.options = {};\n this.$uid = 0;\n this.onChange = this.onChange.bind(this);\n this.onSelectionChange = this.onSelectionChange.bind(this);\n this.onBeforeEndOperation = this.onBeforeEndOperation.bind(this);\n this.ace.on('change', this.onChange);\n this.ace.on('changeSelection', this.onSelectionChange);\n this.ace.on('beforeEndOperation', this.onBeforeEndOperation);\n};\nCodeMirror.Pos = function (line, ch) {\n if (!(this instanceof Pos))\n return new Pos(line, ch);\n this.line = line;\n this.ch = ch;\n};\nCodeMirror.defineOption = function (name, val, setter) { };\nCodeMirror.commands = {\n redo: function (cm) { cm.ace.redo(); },\n undo: function (cm) { cm.ace.undo(); },\n newlineAndIndent: function (cm) { cm.ace.insert(\"\\n\"); },\n goLineLeft: function (cm) { cm.ace.selection.moveCursorLineStart(); },\n goLineRight: function (cm) { cm.ace.selection.moveCursorLineEnd(); }\n};\nCodeMirror.keyMap = {};\nCodeMirror.addClass = CodeMirror.rmClass = function () { };\nCodeMirror.e_stop = CodeMirror.e_preventDefault = event.stopEvent;\nCodeMirror.keyName = function (e) {\n var key = (KEYS[e.keyCode] || e.key || \"\");\n if (key.length == 1)\n key = key.toUpperCase();\n key = event.getModifierString(e).replace(/(^|-)\\w/g, function (m) {\n return m.toUpperCase();\n }) + key;\n return key;\n};\nCodeMirror.keyMap['default'] = function (key) {\n return function (cm) {\n var cmd = cm.ace.commands.commandKeyBinding[key.toLowerCase()];\n return cmd && cm.ace.execCommand(cmd) !== false;\n };\n};\nCodeMirror.lookupKey = function lookupKey(key, map, handle) {\n if (!map)\n map = \"default\";\n if (typeof map == \"string\")\n map = CodeMirror.keyMap[map] || CodeMirror.keyMap['default'];\n var found = typeof map == \"function\" ? map(key) : map[key];\n if (found === false)\n return \"nothing\";\n if (found === \"...\")\n return \"multi\";\n if (found != null && handle(found))\n return \"handled\";\n if (map.fallthrough) {\n if (!Array.isArray(map.fallthrough))\n return lookupKey(key, map.fallthrough, handle);\n for (var i = 0; i < map.fallthrough.length; i++) {\n var result = lookupKey(key, map.fallthrough[i], handle);\n if (result)\n return result;\n }\n }\n};\nCodeMirror.findMatchingTag = function (cm, head) {\n return cm.findMatchingTag(head);\n};\nCodeMirror.findEnclosingTag = function (cm, head) {\n};\nCodeMirror.signal = function (o, name, e) { return o._signal(name, e); };\nCodeMirror.on = event.addListener;\nCodeMirror.off = event.removeListener;\nCodeMirror.isWordChar = function (ch) {\n if (ch < \"\\x7f\")\n return /^\\w$/.test(ch);\n TextModeTokenRe.lastIndex = 0;\n return TextModeTokenRe.test(ch);\n};\n(function () {\n oop.implement(CodeMirror.prototype, EventEmitter);\n this.destroy = function () {\n this.ace.off('change', this.onChange);\n this.ace.off('changeSelection', this.onSelectionChange);\n this.ace.off('beforeEndOperation', this.onBeforeEndOperation);\n this.removeOverlay();\n };\n this.virtualSelectionMode = function () {\n return this.ace.inVirtualSelectionMode && this.ace.selection.index;\n };\n this.onChange = function (delta) {\n if (this.$lineHandleChanges) {\n this.$lineHandleChanges.push(delta);\n }\n var change = { text: delta.action[0] == 'i' ? delta.lines : [] };\n var curOp = this.curOp = this.curOp || {};\n if (!curOp.changeHandlers)\n curOp.changeHandlers = this._eventRegistry[\"change\"] && this._eventRegistry[\"change\"].slice();\n if (!curOp.lastChange) {\n curOp.lastChange = curOp.change = change;\n }\n else {\n curOp.lastChange.next = curOp.lastChange = change;\n }\n this.$updateMarkers(delta);\n };\n this.onSelectionChange = function () {\n var curOp = this.curOp = this.curOp || {};\n if (!curOp.cursorActivityHandlers)\n curOp.cursorActivityHandlers = this._eventRegistry[\"cursorActivity\"] && this._eventRegistry[\"cursorActivity\"].slice();\n this.curOp.cursorActivity = true;\n if (this.ace.inMultiSelectMode) {\n this.ace.keyBinding.removeKeyboardHandler(multiSelectCommands.keyboardHandler);\n }\n };\n this.operation = function (fn, force) {\n if (!force && this.curOp || force && this.curOp && this.curOp.force) {\n return fn();\n }\n if (force || !this.ace.curOp) {\n if (this.curOp)\n this.onBeforeEndOperation();\n }\n if (!this.ace.curOp) {\n var prevOp = this.ace.prevOp;\n this.ace.startOperation({\n command: { name: \"vim\", scrollIntoView: \"cursor\" }\n });\n }\n var curOp = this.curOp = this.curOp || {};\n this.curOp.force = force;\n var result = fn();\n if (this.ace.curOp && this.ace.curOp.command.name == \"vim\") {\n if (this.state.dialog)\n this.ace.curOp.command.scrollIntoView = this.ace.curOp.vimDialogScroll;\n this.ace.endOperation();\n if (!curOp.cursorActivity && !curOp.lastChange && prevOp)\n this.ace.prevOp = prevOp;\n }\n if (force || !this.ace.curOp) {\n if (this.curOp)\n this.onBeforeEndOperation();\n }\n return result;\n };\n this.onBeforeEndOperation = function () {\n var op = this.curOp;\n if (op) {\n if (op.change) {\n this.signal(\"change\", op.change, op);\n }\n if (op && op.cursorActivity) {\n this.signal(\"cursorActivity\", null, op);\n }\n this.curOp = null;\n }\n };\n this.signal = function (eventName, e, handlers) {\n var listeners = handlers ? handlers[eventName + \"Handlers\"]\n : (this._eventRegistry || {})[eventName];\n if (!listeners)\n return;\n listeners = listeners.slice();\n for (var i = 0; i < listeners.length; i++)\n listeners[i](this, e);\n };\n this.firstLine = function () { return 0; };\n this.lastLine = function () { return this.ace.session.getLength() - 1; };\n this.lineCount = function () { return this.ace.session.getLength(); };\n this.setCursor = function (line, ch) {\n if (typeof line === 'object') {\n ch = line.ch;\n line = line.line;\n }\n var shouldScroll = !this.curOp && !this.ace.inVirtualSelectionMode;\n if (!this.ace.inVirtualSelectionMode)\n this.ace.exitMultiSelectMode();\n this.ace.session.unfold({ row: line, column: ch });\n this.ace.selection.moveTo(line, ch);\n if (shouldScroll) {\n this.ace.renderer.scrollCursorIntoView();\n this.ace.endOperation();\n }\n };\n this.getCursor = function (p) {\n var sel = this.ace.selection;\n var pos = p == 'anchor' ? (sel.isEmpty() ? sel.lead : sel.anchor) :\n p == 'head' || !p ? sel.lead : sel.getRange()[p];\n return toCmPos(pos);\n };\n this.listSelections = function (p) {\n var ranges = this.ace.multiSelect.rangeList.ranges;\n if (!ranges.length || this.ace.inVirtualSelectionMode)\n return [{ anchor: this.getCursor('anchor'), head: this.getCursor('head') }];\n return ranges.map(function (r) {\n return {\n anchor: this.clipPos(toCmPos(r.cursor == r.end ? r.start : r.end)),\n head: this.clipPos(toCmPos(r.cursor))\n };\n }, this);\n };\n this.setSelections = function (p, primIndex) {\n var sel = this.ace.multiSelect;\n var ranges = p.map(function (x) {\n var anchor = toAcePos(x.anchor);\n var head = toAcePos(x.head);\n var r = Range.comparePoints(anchor, head) < 0\n ? new Range.fromPoints(anchor, head)\n : new Range.fromPoints(head, anchor);\n r.cursor = Range.comparePoints(r.start, head) ? r.end : r.start;\n return r;\n });\n if (this.ace.inVirtualSelectionMode) {\n this.ace.selection.fromOrientedRange(ranges[0]);\n return;\n }\n if (!primIndex) {\n ranges = ranges.reverse();\n }\n else if (ranges[primIndex]) {\n ranges.push(ranges.splice(primIndex, 1)[0]);\n }\n sel.toSingleRange(ranges[0].clone());\n var session = this.ace.session;\n for (var i = 0; i < ranges.length; i++) {\n var range = session.$clipRangeToDocument(ranges[i]); // todo why ace doesn't do this?\n sel.addRange(range);\n }\n };\n this.setSelection = function (a, h, options) {\n var sel = this.ace.selection;\n sel.moveTo(a.line, a.ch);\n sel.selectTo(h.line, h.ch);\n if (options && options.origin == '*mouse') {\n this.onBeforeEndOperation();\n }\n };\n this.somethingSelected = function (p) {\n return !this.ace.selection.isEmpty();\n };\n this.clipPos = function (p) {\n var pos = this.ace.session.$clipPositionToDocument(p.line, p.ch);\n return toCmPos(pos);\n };\n this.foldCode = function (pos) {\n this.ace.session.$toggleFoldWidget(pos.line, {});\n };\n this.markText = function (cursor) {\n return { clear: function () { }, find: function () { } };\n };\n this.$updateMarkers = function (delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = Range.comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (!point.$insertRight) {\n cmp = 1;\n }\n else if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias = -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : Range.comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n };\n var Marker = function (cm, id, row, column) {\n this.cm = cm;\n this.id = id;\n this.row = row;\n this.column = column;\n cm.marks[this.id] = this;\n };\n Marker.prototype.clear = function () { delete this.cm.marks[this.id]; };\n Marker.prototype.find = function () { return toCmPos(this); };\n this.setBookmark = function (cursor, options) {\n var bm = new Marker(this, this.$uid++, cursor.line, cursor.ch);\n if (!options || !options.insertLeft)\n bm.$insertRight = true;\n this.marks[bm.id] = bm;\n return bm;\n };\n this.moveH = function (increment, unit) {\n if (unit == 'char') {\n var sel = this.ace.selection;\n sel.clearSelection();\n sel.moveCursorBy(0, increment);\n }\n };\n this.findPosV = function (start, amount, unit, goalColumn) {\n if (unit == 'page') {\n var renderer = this.ace.renderer;\n var config = renderer.layerConfig;\n amount = amount * Math.floor(config.height / config.lineHeight);\n unit = 'line';\n }\n if (unit == 'line') {\n var screenPos = this.ace.session.documentToScreenPosition(start.line, start.ch);\n if (goalColumn != null)\n screenPos.column = goalColumn;\n screenPos.row += amount;\n screenPos.row = Math.min(Math.max(0, screenPos.row), this.ace.session.getScreenLength() - 1);\n var pos = this.ace.session.screenToDocumentPosition(screenPos.row, screenPos.column);\n return toCmPos(pos);\n }\n else {\n debugger;\n }\n };\n this.charCoords = function (pos, mode) {\n if (mode == 'div' || !mode) {\n var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n return { left: sc.column, top: sc.row };\n }\n if (mode == 'local') {\n var renderer = this.ace.renderer;\n var sc = this.ace.session.documentToScreenPosition(pos.line, pos.ch);\n var lh = renderer.layerConfig.lineHeight;\n var cw = renderer.layerConfig.characterWidth;\n var top = lh * sc.row;\n return { left: sc.column * cw, top: top, bottom: top + lh };\n }\n };\n this.coordsChar = function (pos, mode) {\n var renderer = this.ace.renderer;\n if (mode == 'local') {\n var row = Math.max(0, Math.floor(pos.top / renderer.lineHeight));\n var col = Math.max(0, Math.floor(pos.left / renderer.characterWidth));\n var ch = renderer.session.screenToDocumentPosition(row, col);\n return toCmPos(ch);\n }\n else if (mode == 'div') {\n throw \"not implemented\";\n }\n };\n this.getSearchCursor = function (query, pos, caseFold) {\n var caseSensitive = false;\n var isRegexp = false;\n if (query instanceof RegExp && !query.global) {\n caseSensitive = !query.ignoreCase;\n query = query.source;\n isRegexp = true;\n }\n if (query == \"\\\\n\") {\n query = \"\\n\";\n isRegexp = false;\n }\n var search = new Search();\n if (pos.ch == undefined)\n pos.ch = Number.MAX_VALUE;\n var acePos = { row: pos.line, column: pos.ch };\n var cm = this;\n var last = null;\n return {\n findNext: function () { return this.find(false); },\n findPrevious: function () { return this.find(true); },\n find: function (back) {\n search.setOptions({\n needle: query,\n caseSensitive: caseSensitive,\n wrap: false,\n backwards: back,\n regExp: isRegexp,\n start: last || acePos\n });\n var range = search.find(cm.ace.session);\n last = range;\n return last && [!last.isEmpty()];\n },\n from: function () { return last && toCmPos(last.start); },\n to: function () { return last && toCmPos(last.end); },\n replace: function (text) {\n if (last) {\n last.end = cm.ace.session.doc.replace(last, text);\n }\n }\n };\n };\n this.scrollTo = function (x, y) {\n var renderer = this.ace.renderer;\n var config = renderer.layerConfig;\n var maxHeight = config.maxHeight;\n maxHeight -= (renderer.$size.scrollerHeight - renderer.lineHeight) * renderer.$scrollPastEnd;\n if (y != null)\n this.ace.session.setScrollTop(Math.max(0, Math.min(y, maxHeight)));\n if (x != null)\n this.ace.session.setScrollLeft(Math.max(0, Math.min(x, config.width)));\n };\n this.scrollInfo = function () { return 0; };\n this.scrollIntoView = function (pos, margin) {\n if (pos) {\n var renderer = this.ace.renderer;\n var viewMargin = { \"top\": 0, \"bottom\": margin };\n renderer.scrollCursorIntoView(toAcePos(pos), (renderer.lineHeight * 2) / renderer.$size.scrollerHeight, viewMargin);\n }\n };\n this.getLine = function (row) { return this.ace.session.getLine(row); };\n this.getRange = function (s, e) {\n return this.ace.session.getTextRange(new Range(s.line, s.ch, e.line, e.ch));\n };\n this.replaceRange = function (text, s, e) {\n if (!e)\n e = s;\n var range = new Range(s.line, s.ch, e.line, e.ch);\n this.ace.session.$clipRangeToDocument(range);\n return this.ace.session.replace(range, text);\n };\n this.replaceSelection =\n this.replaceSelections = function (p) {\n var strings = Array.isArray(p) && p;\n var sel = this.ace.selection;\n if (this.ace.inVirtualSelectionMode) {\n this.ace.session.replace(sel.getRange(), strings ? p[0] || \"\" : p);\n return;\n }\n sel.inVirtualSelectionMode = true;\n var ranges = sel.rangeList.ranges;\n if (!ranges.length)\n ranges = [this.ace.multiSelect.getRange()];\n for (var i = ranges.length; i--;)\n this.ace.session.replace(ranges[i], strings ? p[i] || \"\" : p);\n sel.inVirtualSelectionMode = false;\n };\n this.getSelection = function () {\n return this.ace.getSelectedText();\n };\n this.getSelections = function () {\n return this.listSelections().map(function (x) {\n return this.getRange(x.anchor, x.head);\n }, this);\n };\n this.getInputField = function () {\n return this.ace.textInput.getElement();\n };\n this.getWrapperElement = function () {\n return this.ace.container;\n };\n var optMap = {\n indentWithTabs: \"useSoftTabs\",\n indentUnit: \"tabSize\",\n tabSize: \"tabSize\",\n firstLineNumber: \"firstLineNumber\",\n readOnly: \"readOnly\"\n };\n this.setOption = function (name, val) {\n this.state[name] = val;\n switch (name) {\n case 'indentWithTabs':\n name = optMap[name];\n val = !val;\n break;\n case 'keyMap':\n this.state.$keyMap = val;\n return;\n break;\n default:\n name = optMap[name];\n }\n if (name)\n this.ace.setOption(name, val);\n };\n this.getOption = function (name) {\n var val;\n var aceOpt = optMap[name];\n if (aceOpt)\n val = this.ace.getOption(aceOpt);\n switch (name) {\n case 'indentWithTabs':\n name = optMap[name];\n return !val;\n case 'keyMap':\n return this.state.$keyMap || 'vim';\n }\n return aceOpt ? val : this.state[name];\n };\n this.toggleOverwrite = function (on) {\n this.state.overwrite = on;\n return this.ace.setOverwrite(on);\n };\n this.addOverlay = function (o) {\n if (!this.$searchHighlight || !this.$searchHighlight.session) {\n var highlight = new SearchHighlight(null, \"ace_highlight-marker\", \"text\");\n var marker = this.ace.session.addDynamicMarker(highlight);\n highlight.id = marker.id;\n highlight.session = this.ace.session;\n highlight.destroy = function (o) {\n highlight.session.off(\"change\", highlight.updateOnChange);\n highlight.session.off(\"changeEditor\", highlight.destroy);\n highlight.session.removeMarker(highlight.id);\n highlight.session = null;\n };\n highlight.updateOnChange = function (delta) {\n var row = delta.start.row;\n if (row == delta.end.row)\n highlight.cache[row] = undefined;\n else\n highlight.cache.splice(row, highlight.cache.length);\n };\n highlight.session.on(\"changeEditor\", highlight.destroy);\n highlight.session.on(\"change\", highlight.updateOnChange);\n }\n var re = new RegExp(o.query.source, \"gmi\");\n this.$searchHighlight = o.highlight = highlight;\n this.$searchHighlight.setRegexp(re);\n this.ace.renderer.updateBackMarkers();\n };\n this.removeOverlay = function (o) {\n if (this.$searchHighlight && this.$searchHighlight.session) {\n this.$searchHighlight.destroy();\n }\n };\n this.getScrollInfo = function () {\n var renderer = this.ace.renderer;\n var config = renderer.layerConfig;\n return {\n left: renderer.scrollLeft,\n top: renderer.scrollTop,\n height: config.maxHeight,\n width: config.width,\n clientHeight: config.height,\n clientWidth: config.width\n };\n };\n this.getValue = function () {\n return this.ace.getValue();\n };\n this.setValue = function (v) {\n return this.ace.setValue(v, -1);\n };\n this.getTokenTypeAt = function (pos) {\n var token = this.ace.session.getTokenAt(pos.line, pos.ch);\n return token && /comment|string/.test(token.type) ? \"string\" : \"\";\n };\n this.findMatchingBracket = function (pos) {\n var m = this.ace.session.findMatchingBracket(toAcePos(pos));\n return { to: m && toCmPos(m) };\n };\n this.findMatchingTag = function (pos) {\n var m = this.ace.session.getMatchingTags(toAcePos(pos));\n if (!m)\n return;\n return {\n open: {\n from: toCmPos(m.openTag.start),\n to: toCmPos(m.openTag.end)\n },\n close: {\n from: toCmPos(m.closeTag.start),\n to: toCmPos(m.closeTag.end)\n }\n };\n };\n this.indentLine = function (line, method) {\n if (method === true)\n this.ace.session.indentRows(line, line, \"\\t\");\n else if (method === false)\n this.ace.session.outdentRows(new Range(line, 0, line, 0));\n };\n this.indexFromPos = function (pos) {\n return this.ace.session.doc.positionToIndex(toAcePos(pos));\n };\n this.posFromIndex = function (index) {\n return toCmPos(this.ace.session.doc.indexToPosition(index));\n };\n this.focus = function (index) {\n return this.ace.textInput.focus();\n };\n this.blur = function (index) {\n return this.ace.blur();\n };\n this.defaultTextHeight = function (index) {\n return this.ace.renderer.layerConfig.lineHeight;\n };\n this.scanForBracket = function (pos, dir, _, options) {\n var re = options.bracketRegex.source;\n var tokenRe = /paren|text|operator|tag/;\n if (dir == 1) {\n var m = this.ace.session.$findClosingBracket(re.slice(1, 2), toAcePos(pos), tokenRe);\n }\n else {\n var m = this.ace.session.$findOpeningBracket(re.slice(-2, -1), { row: pos.line, column: pos.ch + 1 }, tokenRe);\n if (!m && options.bracketRegex && options.bracketRegex.test(this.getLine(pos.line)[pos.ch - 1])) {\n m = { row: pos.line, column: pos.ch - 1 };\n }\n }\n return m && { pos: toCmPos(m) };\n };\n this.refresh = function () {\n return this.ace.resize(true);\n };\n this.getMode = function () {\n return { name: this.getOption(\"mode\") };\n };\n this.execCommand = function (name) {\n if (CodeMirror.commands.hasOwnProperty(name))\n return CodeMirror.commands[name](this);\n if (name == \"indentAuto\")\n return this.ace.execCommand(\"autoindent\");\n console.log(name + \" is not implemented\");\n };\n this.getLineNumber = function (handle) {\n var deltas = this.$lineHandleChanges;\n if (!deltas)\n return null;\n var row = handle.row;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.start.row != delta.end.row) {\n if (delta.action[0] == \"i\") {\n if (delta.start.row < row)\n row += delta.end.row - delta.start.row;\n }\n else {\n if (delta.start.row < row) {\n if (row < delta.end.row || row == delta.end.row && delta.start.column > 0) {\n return null;\n }\n row -= delta.end.row - delta.start.row;\n }\n }\n }\n }\n return row;\n };\n this.getLineHandle = function (row) {\n if (!this.$lineHandleChanges)\n this.$lineHandleChanges = [];\n return { text: this.ace.session.getLine(row), row: row };\n };\n this.releaseLineHandles = function () {\n this.$lineHandleChanges = undefined;\n };\n this.getLastEditEnd = function () {\n var undoManager = this.ace.session.$undoManager;\n if (undoManager && undoManager.$lastDelta)\n return toCmPos(undoManager.$lastDelta.end);\n };\n}).call(CodeMirror.prototype);\nfunction toAcePos(cmPos) {\n return { row: cmPos.line, column: cmPos.ch };\n}\nfunction toCmPos(acePos) {\n return new Pos(acePos.row, acePos.column);\n}\nvar StringStream = CodeMirror.StringStream = function (string, tabSize) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n};\nStringStream.prototype = {\n eol: function () { return this.pos >= this.string.length; },\n sol: function () { return this.pos == this.lineStart; },\n peek: function () { return this.string.charAt(this.pos) || undefined; },\n next: function () {\n if (this.pos < this.string.length)\n return this.string.charAt(this.pos++);\n },\n eat: function (match) {\n var ch = this.string.charAt(this.pos);\n if (typeof match == \"string\")\n var ok = ch == match;\n else\n var ok = ch && (match.test ? match.test(ch) : match(ch));\n if (ok) {\n ++this.pos;\n return ch;\n }\n },\n eatWhile: function (match) {\n var start = this.pos;\n while (this.eat(match)) { }\n return this.pos > start;\n },\n eatSpace: function () {\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos)))\n ++this.pos;\n return this.pos > start;\n },\n skipToEnd: function () { this.pos = this.string.length; },\n skipTo: function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {\n this.pos = found;\n return true;\n }\n },\n backUp: function (n) { this.pos -= n; },\n column: function () {\n throw \"not implemented\";\n },\n indentation: function () {\n throw \"not implemented\";\n },\n match: function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false)\n this.pos += pattern.length;\n return true;\n }\n }\n else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0)\n return null;\n if (match && consume !== false)\n this.pos += match[0].length;\n return match;\n }\n },\n current: function () { return this.string.slice(this.start, this.pos); },\n hideFirstChars: function (n, inner) {\n this.lineStart += n;\n try {\n return inner();\n }\n finally {\n this.lineStart -= n;\n }\n }\n};\nCodeMirror.defineExtension = function (name, fn) {\n CodeMirror.prototype[name] = fn;\n};\ndomLib.importCssString(\".normal-mode .ace_cursor{\\n border: none;\\n background-color: rgba(255,0,0,0.5);\\n}\\n.normal-mode .ace_hidden-cursors .ace_cursor{\\n background-color: transparent;\\n border: 1px solid red;\\n opacity: 0.7\\n}\\n.ace_dialog {\\n position: absolute;\\n left: 0; right: 0;\\n background: inherit;\\n z-index: 15;\\n padding: .1em .8em;\\n overflow: hidden;\\n color: inherit;\\n}\\n.ace_dialog-top {\\n border-bottom: 1px solid #444;\\n top: 0;\\n}\\n.ace_dialog-bottom {\\n border-top: 1px solid #444;\\n bottom: 0;\\n}\\n.ace_dialog input {\\n border: none;\\n outline: none;\\n background: transparent;\\n width: 20em;\\n color: inherit;\\n font-family: monospace;\\n}\", \"vimMode\", false);\n(function () {\n function dialogDiv(cm, template, bottom) {\n var wrap = cm.ace.container;\n var dialog;\n dialog = wrap.appendChild(document.createElement(\"div\"));\n if (bottom)\n dialog.className = \"ace_dialog ace_dialog-bottom\";\n else\n dialog.className = \"ace_dialog ace_dialog-top\";\n if (typeof template == \"string\") {\n dialog.innerHTML = template;\n }\n else { // Assuming it's a detached DOM element.\n dialog.appendChild(template);\n }\n return dialog;\n }\n function closeNotification(cm, newVal) {\n if (cm.state.currentNotificationClose)\n cm.state.currentNotificationClose();\n cm.state.currentNotificationClose = newVal;\n }\n CodeMirror.defineExtension(\"openDialog\", function (template, callback, options) {\n if (this.virtualSelectionMode())\n return;\n if (!options)\n options = {};\n closeNotification(this, null);\n var dialog = dialogDiv(this, template, options.bottom);\n var closed = false, me = this;\n this.state.dialog = dialog;\n function close(newVal) {\n if (typeof newVal == 'string') {\n inp.value = newVal;\n }\n else {\n if (closed)\n return;\n if (newVal && newVal.type == \"blur\") {\n if (document.activeElement === inp)\n return;\n }\n if (me.state.dialog == dialog) {\n me.state.dialog = null;\n me.focus();\n }\n closed = true;\n dialog.remove();\n if (options.onClose)\n options.onClose(dialog);\n var cm = me;\n if (cm.state.vim) {\n cm.state.vim.status = null;\n cm.ace._signal(\"changeStatus\");\n cm.ace.renderer.$loop.schedule(cm.ace.renderer.CHANGE_CURSOR);\n }\n }\n }\n var inp = dialog.getElementsByTagName(\"input\")[0], button;\n if (inp) {\n if (options.value) {\n inp.value = options.value;\n if (options.selectValueOnOpen !== false)\n inp.select();\n }\n if (options.onInput)\n CodeMirror.on(inp, \"input\", function (e) { options.onInput(e, inp.value, close); });\n if (options.onKeyUp)\n CodeMirror.on(inp, \"keyup\", function (e) { options.onKeyUp(e, inp.value, close); });\n CodeMirror.on(inp, \"keydown\", function (e) {\n if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) {\n return;\n }\n if (e.keyCode == 13)\n callback(inp.value);\n if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n CodeMirror.e_stop(e);\n close();\n }\n });\n if (options.closeOnBlur !== false)\n CodeMirror.on(inp, \"blur\", close);\n inp.focus();\n }\n else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n CodeMirror.on(button, \"click\", function () {\n close();\n me.focus();\n });\n if (options.closeOnBlur !== false)\n CodeMirror.on(button, \"blur\", close);\n button.focus();\n }\n return close;\n });\n CodeMirror.defineExtension(\"openNotification\", function (template, options) {\n if (this.virtualSelectionMode())\n return;\n closeNotification(this, close);\n var dialog = dialogDiv(this, template, options && options.bottom);\n var closed = false, doneTimer;\n var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n function close() {\n if (closed)\n return;\n closed = true;\n clearTimeout(doneTimer);\n dialog.remove();\n }\n CodeMirror.on(dialog, 'click', function (e) {\n CodeMirror.e_preventDefault(e);\n close();\n });\n if (duration)\n doneTimer = setTimeout(close, duration);\n return close;\n });\n})();\nvar Pos = CodeMirror.Pos;\nfunction updateSelectionForSurrogateCharacters(cm, curStart, curEnd) {\n if (curStart.line === curEnd.line && curStart.ch >= curEnd.ch - 1) {\n var text = cm.getLine(curStart.line);\n var charCode = text.charCodeAt(curStart.ch);\n if (0xD800 <= charCode && charCode <= 0xD8FF) {\n curEnd.ch += 1;\n }\n }\n return { start: curStart, end: curEnd };\n}\nvar defaultKeymap = [\n { keys: '', type: 'keyToKey', toKeys: 'h' },\n { keys: '', type: 'keyToKey', toKeys: 'l' },\n { keys: '', type: 'keyToKey', toKeys: 'k' },\n { keys: '', type: 'keyToKey', toKeys: 'j' },\n { keys: 'g', type: 'keyToKey', toKeys: 'gk' },\n { keys: 'g', type: 'keyToKey', toKeys: 'gj' },\n { keys: '', type: 'keyToKey', toKeys: 'l' },\n { keys: '', type: 'keyToKey', toKeys: 'h' },\n { keys: '', type: 'keyToKey', toKeys: 'x' },\n { keys: '', type: 'keyToKey', toKeys: 'W' },\n { keys: '', type: 'keyToKey', toKeys: 'B' },\n { keys: '', type: 'keyToKey', toKeys: 'w' },\n { keys: '', type: 'keyToKey', toKeys: 'b' },\n { keys: '', type: 'keyToKey', toKeys: 'j' },\n { keys: '', type: 'keyToKey', toKeys: 'k' },\n { keys: '', type: 'keyToKey', toKeys: '' },\n { keys: '', type: 'keyToKey', toKeys: '' },\n { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' },\n { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' },\n { keys: '', type: 'keyToKey', toKeys: '' }, // ipad keyboard sends C-Esc instead of C-[\n { keys: '', type: 'keyToKey', toKeys: '', context: 'insert' },\n { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual' },\n { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n { keys: '', type: 'keyToKey', toKeys: '0' },\n { keys: '', type: 'keyToKey', toKeys: '$' },\n { keys: '', type: 'keyToKey', toKeys: '' },\n { keys: '', type: 'keyToKey', toKeys: '' },\n { keys: '', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n { keys: '', type: 'keyToKey', toKeys: 'i', context: 'normal' },\n { keys: '', type: 'action', action: 'toggleOverwrite', context: 'insert' },\n { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true } },\n { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true } },\n { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true } },\n { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false } },\n { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true } },\n { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true } },\n { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true } },\n { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true } },\n { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false } },\n { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false } },\n { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true } },\n { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true } },\n { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true } },\n { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false } },\n { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true } },\n { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true } },\n { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true } },\n { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true } },\n { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true } },\n { keys: '(', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: false } },\n { keys: ')', type: 'motion', motion: 'moveBySentence', motionArgs: { forward: true } },\n { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true } },\n { keys: '', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false } },\n { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true } },\n { keys: '', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true } },\n { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true } },\n { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true } },\n { keys: \"g$\", type: \"motion\", motion: \"moveToEndOfDisplayLine\" },\n { keys: \"g^\", type: \"motion\", motion: \"moveToStartOfDisplayLine\" },\n { keys: \"g0\", type: \"motion\", motion: \"moveToStartOfDisplayLine\" },\n { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar: true } },\n { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar: true } },\n { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar: true, repeatOffset: -1 } },\n { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true } },\n { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true } },\n { keys: 'f', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true, inclusive: true } },\n { keys: 'F', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false } },\n { keys: 't', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true } },\n { keys: 'T', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false } },\n { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true } },\n { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false } },\n { keys: '\\'', type: 'motion', motion: 'goToMark', motionArgs: { toJumplist: true, linewise: true } },\n { keys: '`', type: 'motion', motion: 'goToMark', motionArgs: { toJumplist: true } },\n { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true } },\n { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true } },\n { keys: ']', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true } },\n { keys: '[', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true } },\n { keys: '|', type: 'motion', motion: 'moveToColumn' },\n { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context: 'visual' },\n { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: { sameLine: true }, context: 'visual' },\n { keys: 'd', type: 'operator', operator: 'delete' },\n { keys: 'y', type: 'operator', operator: 'yank' },\n { keys: 'c', type: 'operator', operator: 'change' },\n { keys: '=', type: 'operator', operator: 'indentAuto' },\n { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true } },\n { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false } },\n { keys: 'g~', type: 'operator', operator: 'changeCase' },\n { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: true }, isEdit: true },\n { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: false }, isEdit: true },\n { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true } },\n { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true } },\n { keys: 'gn', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: true } },\n { keys: 'gN', type: 'motion', motion: 'findAndSelectNextInclusive', motionArgs: { forward: false } },\n { keys: 'gq', type: 'operator', operator: 'hardWrap' },\n { keys: 'gw', type: 'operator', operator: 'hardWrap', operatorArgs: { keepCursor: true } },\n { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false } },\n { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true } },\n { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal' },\n { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual' },\n { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'expandToLine', motionArgs: { linewise: true }, context: 'normal' },\n { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual' },\n { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal' },\n { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual' },\n { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal' },\n { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual' },\n { keys: '', type: 'operatorMotion', operator: 'delete', motion: 'moveToStartOfLine', context: 'insert' },\n { keys: '', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n { keys: '', type: 'idle', context: 'normal' },\n { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true } },\n { keys: '', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false } },\n { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true } },\n { keys: '', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true } },\n { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n { keys: 'gi', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'lastEdit' }, context: 'normal' },\n { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank' }, context: 'normal' },\n { keys: 'gI', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'bol' }, context: 'normal' },\n { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true } },\n { keys: '', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true } },\n { keys: '', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true } },\n { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n { keys: 'gJ', type: 'action', action: 'joinLines', actionArgs: { keepSpaces: true }, isEdit: true },\n { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true } },\n { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true } },\n { keys: 'r', type: 'action', action: 'replace', isEdit: true },\n { keys: '@', type: 'action', action: 'replayMacro' },\n { keys: 'q', type: 'action', action: 'enterMacroRecordMode' },\n { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }, context: 'normal' },\n { keys: 'R', type: 'operator', operator: 'change', operatorArgs: { linewise: true, fullLine: true }, context: 'visual', exitVisualBlock: true },\n { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: true }, context: 'visual', isEdit: true },\n { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: { toLower: false }, context: 'visual', isEdit: true },\n { keys: '', type: 'action', action: 'redo' },\n { keys: 'm', type: 'action', action: 'setMark' },\n { keys: '\"', type: 'action', action: 'setRegister' },\n { keys: '', type: 'action', action: 'insertRegister', context: 'insert', isEdit: true },\n { keys: '', type: 'action', action: 'oneNormalCommand', context: 'insert' },\n { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' } },\n { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' } },\n { keys: 'z', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' } },\n { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n { keys: '.', type: 'action', action: 'repeatLastEdit' },\n { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: { increase: true, backtrack: false } },\n { keys: '', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: { increase: false, backtrack: false } },\n { keys: '', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },\n { keys: '', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },\n { keys: 'a', type: 'motion', motion: 'textObjectManipulation' },\n { keys: 'i', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true } },\n { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true } },\n { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true } },\n { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true } },\n { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true } },\n { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true } },\n { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true } },\n { keys: ':', type: 'ex' }\n];\nvar defaultKeymapLength = defaultKeymap.length;\nvar defaultExCommandMap = [\n { name: 'colorscheme', shortName: 'colo' },\n { name: 'map' },\n { name: 'imap', shortName: 'im' },\n { name: 'nmap', shortName: 'nm' },\n { name: 'vmap', shortName: 'vm' },\n { name: 'omap', shortName: 'om' },\n { name: 'noremap', shortName: 'no' },\n { name: 'nnoremap', shortName: 'nn' },\n { name: 'vnoremap', shortName: 'vn' },\n { name: 'inoremap', shortName: 'ino' },\n { name: 'onoremap', shortName: 'ono' },\n { name: 'unmap' },\n { name: 'mapclear', shortName: 'mapc' },\n { name: 'nmapclear', shortName: 'nmapc' },\n { name: 'vmapclear', shortName: 'vmapc' },\n { name: 'imapclear', shortName: 'imapc' },\n { name: 'omapclear', shortName: 'omapc' },\n { name: 'write', shortName: 'w' },\n { name: 'undo', shortName: 'u' },\n { name: 'redo', shortName: 'red' },\n { name: 'set', shortName: 'se' },\n { name: 'setlocal', shortName: 'setl' },\n { name: 'setglobal', shortName: 'setg' },\n { name: 'sort', shortName: 'sor' },\n { name: 'substitute', shortName: 's', possiblyAsync: true },\n { name: 'startinsert', shortName: 'start' },\n { name: 'nohlsearch', shortName: 'noh' },\n { name: 'yank', shortName: 'y' },\n { name: 'delmarks', shortName: 'delm' },\n { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n { name: 'vglobal', shortName: 'v' },\n { name: 'delete', shortName: 'd' },\n { name: 'join', shortName: 'j' },\n { name: 'normal', shortName: 'norm' },\n { name: 'global', shortName: 'g' }\n];\nvar langmap = parseLangmap('');\nfunction enterVimMode(cm) {\n cm.setOption('disableInput', true);\n cm.setOption('showCursorWhenSelecting', false);\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n cm.on('cursorActivity', onCursorActivity);\n maybeInitVimState(cm);\n CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n}\nfunction leaveVimMode(cm) {\n cm.setOption('disableInput', false);\n cm.off('cursorActivity', onCursorActivity);\n CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n cm.state.vim = null;\n if (highlightTimeout)\n clearTimeout(highlightTimeout);\n}\nfunction getOnPasteFn(cm) {\n var vim = cm.state.vim;\n if (!vim.onPasteFn) {\n vim.onPasteFn = function () {\n if (!vim.insertMode) {\n cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n actions.enterInsertMode(cm, {}, vim);\n }\n };\n }\n return vim.onPasteFn;\n}\nvar numberRegex = /[\\d]/;\nvar wordCharTest = [CodeMirror.isWordChar, function (ch) {\n return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n }], bigWordCharTest = [function (ch) {\n return /\\S/.test(ch);\n }];\nvar validMarks = ['<', '>'];\nvar validRegisters = ['-', '\"', '.', ':', '_', '/', '+'];\nvar latinCharRegex = /^\\w$/;\nvar upperCaseChars;\ntry {\n upperCaseChars = new RegExp(\"^[\\\\p{Lu}]$\", \"u\");\n}\ncatch (_) {\n upperCaseChars = /^[A-Z]$/;\n}\nfunction isLine(cm, line) {\n return line >= cm.firstLine() && line <= cm.lastLine();\n}\nfunction isLowerCase(k) {\n return (/^[a-z]$/).test(k);\n}\nfunction isMatchableSymbol(k) {\n return '()[]{}'.indexOf(k) != -1;\n}\nfunction isNumber(k) {\n return numberRegex.test(k);\n}\nfunction isUpperCase(k) {\n return upperCaseChars.test(k);\n}\nfunction isWhiteSpaceString(k) {\n return (/^\\s*$/).test(k);\n}\nfunction isEndOfSentenceSymbol(k) {\n return '.?!'.indexOf(k) != -1;\n}\nfunction inArray(val, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] == val) {\n return true;\n }\n }\n return false;\n}\nvar options = {};\nfunction defineOption(name, defaultValue, type, aliases, callback) {\n if (defaultValue === undefined && !callback) {\n throw Error('defaultValue is required unless callback is provided');\n }\n if (!type) {\n type = 'string';\n }\n options[name] = {\n type: type,\n defaultValue: defaultValue,\n callback: callback\n };\n if (aliases) {\n for (var i = 0; i < aliases.length; i++) {\n options[aliases[i]] = options[name];\n }\n }\n if (defaultValue) {\n setOption(name, defaultValue);\n }\n}\nfunction setOption(name, value, cm, cfg) {\n var option = options[name];\n cfg = cfg || {};\n var scope = cfg.scope;\n if (!option) {\n return new Error('Unknown option: ' + name);\n }\n if (option.type == 'boolean') {\n if (value && value !== true) {\n return new Error('Invalid argument: ' + name + '=' + value);\n }\n else if (value !== false) {\n value = true;\n }\n }\n if (option.callback) {\n if (scope !== 'local') {\n option.callback(value, undefined);\n }\n if (scope !== 'global' && cm) {\n option.callback(value, cm);\n }\n }\n else {\n if (scope !== 'local') {\n option.value = option.type == 'boolean' ? !!value : value;\n }\n if (scope !== 'global' && cm) {\n cm.state.vim.options[name] = { value: value };\n }\n }\n}\nfunction getOption(name, cm, cfg) {\n var option = options[name];\n cfg = cfg || {};\n var scope = cfg.scope;\n if (!option) {\n return new Error('Unknown option: ' + name);\n }\n if (option.callback) {\n var local = cm && option.callback(undefined, cm);\n if (scope !== 'global' && local !== undefined) {\n return local;\n }\n if (scope !== 'local') {\n return option.callback();\n }\n return;\n }\n else {\n var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n return (local || (scope !== 'local') && option || {}).value;\n }\n}\ndefineOption('filetype', undefined, 'string', ['ft'], function (name, cm) {\n if (cm === undefined) {\n return;\n }\n if (name === undefined) {\n var mode = cm.getOption('mode');\n return mode == 'null' ? '' : mode;\n }\n else {\n var mode = name == '' ? 'null' : name;\n cm.setOption('mode', mode);\n }\n});\ndefineOption('textwidth', 80, 'number', ['tw'], function (width, cm) {\n if (cm === undefined) {\n return;\n }\n if (width === undefined) {\n var value = cm.getOption('textwidth');\n return value;\n }\n else {\n var column = Math.round(width);\n if (column > 1) {\n cm.setOption('textwidth', column);\n }\n }\n});\nvar createCircularJumpList = function () {\n var size = 100;\n var pointer = -1;\n var head = 0;\n var tail = 0;\n var buffer = new Array(size);\n function add(cm, oldCur, newCur) {\n var current = pointer % size;\n var curMark = buffer[current];\n function useNextSlot(cursor) {\n var next = ++pointer % size;\n var trashMark = buffer[next];\n if (trashMark) {\n trashMark.clear();\n }\n buffer[next] = cm.setBookmark(cursor);\n }\n if (curMark) {\n var markPos = curMark.find();\n if (markPos && !cursorEqual(markPos, oldCur)) {\n useNextSlot(oldCur);\n }\n }\n else {\n useNextSlot(oldCur);\n }\n useNextSlot(newCur);\n head = pointer;\n tail = pointer - size + 1;\n if (tail < 0) {\n tail = 0;\n }\n }\n function move(cm, offset) {\n pointer += offset;\n if (pointer > head) {\n pointer = head;\n }\n else if (pointer < tail) {\n pointer = tail;\n }\n var mark = buffer[(size + pointer) % size];\n if (mark && !mark.find()) {\n var inc = offset > 0 ? 1 : -1;\n var newCur;\n var oldCur = cm.getCursor();\n do {\n pointer += inc;\n mark = buffer[(size + pointer) % size];\n if (mark &&\n (newCur = mark.find()) &&\n !cursorEqual(oldCur, newCur)) {\n break;\n }\n } while (pointer < head && pointer > tail);\n }\n return mark;\n }\n function find(cm, offset) {\n var oldPointer = pointer;\n var mark = move(cm, offset);\n pointer = oldPointer;\n return mark && mark.find();\n }\n return {\n cachedCursor: undefined, //used for # and * jumps\n add: add,\n find: find,\n move: move\n };\n};\nvar createInsertModeChanges = function (c) {\n if (c) {\n return {\n changes: c.changes,\n expectCursorActivityForChange: c.expectCursorActivityForChange\n };\n }\n return {\n changes: [],\n expectCursorActivityForChange: false\n };\n};\nfunction MacroModeState() {\n this.latestRegister = undefined;\n this.isPlaying = false;\n this.isRecording = false;\n this.replaySearchQueries = [];\n this.onRecordingDone = undefined;\n this.lastInsertModeChanges = createInsertModeChanges();\n}\nMacroModeState.prototype = {\n exitMacroRecordMode: function () {\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.onRecordingDone) {\n macroModeState.onRecordingDone(); // close dialog\n }\n macroModeState.onRecordingDone = undefined;\n macroModeState.isRecording = false;\n },\n enterMacroRecordMode: function (cm, registerName) {\n var register = vimGlobalState.registerController.getRegister(registerName);\n if (register) {\n register.clear();\n this.latestRegister = registerName;\n if (cm.openDialog) {\n var template = dom('span', { class: 'cm-vim-message' }, 'recording @' + registerName);\n this.onRecordingDone = cm.openDialog(template, null, { bottom: true });\n }\n this.isRecording = true;\n }\n }\n};\nfunction maybeInitVimState(cm) {\n if (!cm.state.vim) {\n cm.state.vim = {\n inputState: new InputState(),\n lastEditInputState: undefined,\n lastEditActionCommand: undefined,\n lastHPos: -1,\n lastHSPos: -1,\n lastMotion: null,\n marks: {},\n insertMode: false,\n insertModeReturn: false,\n insertModeRepeat: undefined,\n visualMode: false,\n visualLine: false,\n visualBlock: false,\n lastSelection: null,\n lastPastedText: null,\n sel: {},\n options: {},\n expectLiteralNext: false\n };\n }\n return cm.state.vim;\n}\nvar vimGlobalState;\nfunction resetVimGlobalState() {\n vimGlobalState = {\n searchQuery: null,\n searchIsReversed: false,\n lastSubstituteReplacePart: undefined,\n jumpList: createCircularJumpList(),\n macroModeState: new MacroModeState,\n lastCharacterSearch: { increment: 0, forward: true, selectedCharacter: '' },\n registerController: new RegisterController({}),\n searchHistoryController: new HistoryController(),\n exCommandHistoryController: new HistoryController()\n };\n for (var optionName in options) {\n var option = options[optionName];\n option.value = option.defaultValue;\n }\n}\nvar lastInsertModeKeyTimer;\nvar vimApi = {\n enterVimMode: enterVimMode,\n leaveVimMode: leaveVimMode,\n buildKeyMap: function () {\n },\n getRegisterController: function () {\n return vimGlobalState.registerController;\n },\n resetVimGlobalState_: resetVimGlobalState,\n getVimGlobalState_: function () {\n return vimGlobalState;\n },\n maybeInitVimState_: maybeInitVimState,\n suppressErrorLogging: false,\n InsertModeKey: InsertModeKey,\n map: function (lhs, rhs, ctx) {\n exCommandDispatcher.map(lhs, rhs, ctx);\n },\n unmap: function (lhs, ctx) {\n return exCommandDispatcher.unmap(lhs, ctx);\n },\n noremap: function (lhs, rhs, ctx) {\n exCommandDispatcher.map(lhs, rhs, ctx, true);\n },\n mapclear: function (ctx) {\n var actualLength = defaultKeymap.length, origLength = defaultKeymapLength;\n var userKeymap = defaultKeymap.slice(0, actualLength - origLength);\n defaultKeymap = defaultKeymap.slice(actualLength - origLength);\n if (ctx) {\n for (var i = userKeymap.length - 1; i >= 0; i--) {\n var mapping = userKeymap[i];\n if (ctx !== mapping.context) {\n if (mapping.context) {\n this._mapCommand(mapping);\n }\n else {\n var contexts = ['normal', 'insert', 'visual'];\n for (var j in contexts) {\n if (contexts[j] !== ctx) {\n var newMapping = {};\n for (var key in mapping) {\n newMapping[key] = mapping[key];\n }\n newMapping.context = contexts[j];\n this._mapCommand(newMapping);\n }\n }\n }\n }\n }\n }\n },\n langmap: updateLangmap,\n vimKeyFromEvent: vimKeyFromEvent,\n setOption: setOption,\n getOption: getOption,\n defineOption: defineOption,\n defineEx: function (name, prefix, func) {\n if (!prefix) {\n prefix = name;\n }\n else if (name.indexOf(prefix) !== 0) {\n throw new Error('(Vim.defineEx) \"' + prefix + '\" is not a prefix of \"' + name + '\", command not registered');\n }\n exCommands[name] = func;\n exCommandDispatcher.commandMap_[prefix] = { name: name, shortName: prefix, type: 'api' };\n },\n handleKey: function (cm, key, origin) {\n var command = this.findKey(cm, key, origin);\n if (typeof command === 'function') {\n return command();\n }\n },\n multiSelectHandleKey: multiSelectHandleKey,\n findKey: function (cm, key, origin) {\n var vim = maybeInitVimState(cm);\n function handleMacroRecording() {\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.isRecording) {\n if (key == 'q') {\n macroModeState.exitMacroRecordMode();\n clearInputState(cm);\n return true;\n }\n if (origin != 'mapping') {\n logKey(macroModeState, key);\n }\n }\n }\n function handleEsc() {\n if (key == '') {\n if (vim.visualMode) {\n exitVisualMode(cm);\n }\n else if (vim.insertMode) {\n exitInsertMode(cm);\n }\n else {\n return;\n }\n clearInputState(cm);\n return true;\n }\n }\n function handleKeyInsertMode() {\n if (handleEsc()) {\n return true;\n }\n vim.inputState.keyBuffer.push(key);\n var keys = vim.inputState.keyBuffer.join(\"\");\n var keysAreChars = key.length == 1;\n var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n var changeQueue = vim.inputState.changeQueue;\n if (match.type == 'none') {\n clearInputState(cm);\n return false;\n }\n else if (match.type == 'partial') {\n if (match.expectLiteralNext)\n vim.expectLiteralNext = true;\n if (lastInsertModeKeyTimer) {\n window.clearTimeout(lastInsertModeKeyTimer);\n }\n lastInsertModeKeyTimer = keysAreChars && window.setTimeout(function () { if (vim.insertMode && vim.inputState.keyBuffer.length) {\n clearInputState(cm);\n } }, getOption('insertModeEscKeysTimeout'));\n if (keysAreChars) {\n var selections = cm.listSelections();\n if (!changeQueue || changeQueue.removed.length != selections.length)\n changeQueue = vim.inputState.changeQueue = new ChangeQueue;\n changeQueue.inserted += key;\n for (var i = 0; i < selections.length; i++) {\n var from = cursorMin(selections[i].anchor, selections[i].head);\n var to = cursorMax(selections[i].anchor, selections[i].head);\n var text = cm.getRange(from, cm.state.overwrite ? offsetCursor(to, 0, 1) : to);\n changeQueue.removed[i] = (changeQueue.removed[i] || \"\") + text;\n }\n }\n return !keysAreChars;\n }\n vim.expectLiteralNext = false;\n if (lastInsertModeKeyTimer) {\n window.clearTimeout(lastInsertModeKeyTimer);\n }\n if (match.command && changeQueue) {\n var selections = cm.listSelections();\n for (var i = 0; i < selections.length; i++) {\n var here = selections[i].head;\n cm.replaceRange(changeQueue.removed[i] || \"\", offsetCursor(here, 0, -changeQueue.inserted.length), here, '+input');\n }\n vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n }\n if (!match.command)\n clearInputState(cm);\n return match.command;\n }\n function handleKeyNonInsertMode() {\n if (handleMacroRecording() || handleEsc()) {\n return true;\n }\n vim.inputState.keyBuffer.push(key);\n var keys = vim.inputState.keyBuffer.join(\"\");\n if (/^[1-9]\\d*$/.test(keys)) {\n return true;\n }\n var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n if (!keysMatcher) {\n clearInputState(cm);\n return false;\n }\n var context = vim.visualMode ? 'visual' :\n 'normal';\n var mainKey = keysMatcher[2] || keysMatcher[1];\n if (vim.inputState.operatorShortcut && vim.inputState.operatorShortcut.slice(-1) == mainKey) {\n mainKey = vim.inputState.operatorShortcut;\n }\n var match = commandDispatcher.matchCommand(mainKey, defaultKeymap, vim.inputState, context);\n if (match.type == 'none') {\n clearInputState(cm);\n return false;\n }\n else if (match.type == 'partial') {\n if (match.expectLiteralNext)\n vim.expectLiteralNext = true;\n return true;\n }\n else if (match.type == 'clear') {\n clearInputState(cm);\n return true;\n }\n vim.expectLiteralNext = false;\n vim.inputState.keyBuffer.length = 0;\n keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n if (keysMatcher[1] && keysMatcher[1] != '0') {\n vim.inputState.pushRepeatDigit(keysMatcher[1]);\n }\n return match.command;\n }\n var command;\n if (vim.insertMode) {\n command = handleKeyInsertMode();\n }\n else {\n command = handleKeyNonInsertMode();\n }\n if (command === false) {\n return !vim.insertMode && key.length === 1 ? function () { return true; } : undefined;\n }\n else if (command === true) {\n return function () { return true; };\n }\n else {\n return function () {\n if ((command.operator || command.isEdit) && cm.getOption('readOnly'))\n return; // ace_patch\n return cm.operation(function () {\n cm.curOp.isVimOp = true;\n try {\n if (command.type == 'keyToKey') {\n doKeyToKey(cm, command.toKeys, command);\n }\n else {\n commandDispatcher.processCommand(cm, vim, command);\n }\n }\n catch (e) {\n cm.state.vim = undefined;\n maybeInitVimState(cm);\n if (!vimApi.suppressErrorLogging) {\n console['log'](e);\n }\n throw e;\n }\n return true;\n });\n };\n }\n },\n handleEx: function (cm, input) {\n exCommandDispatcher.processCommand(cm, input);\n },\n defineMotion: defineMotion,\n defineAction: defineAction,\n defineOperator: defineOperator,\n mapCommand: mapCommand,\n _mapCommand: _mapCommand,\n defineRegister: defineRegister,\n exitVisualMode: exitVisualMode,\n exitInsertMode: exitInsertMode\n};\nvar keyToKeyStack = [];\nvar noremap = false;\nvar virtualPrompt;\nfunction sendKeyToPrompt(key) {\n if (key[0] == \"<\") {\n var lowerKey = key.toLowerCase().slice(1, -1);\n var parts = lowerKey.split('-');\n lowerKey = parts.pop() || '';\n if (lowerKey == 'lt')\n key = '<';\n else if (lowerKey == 'space')\n key = ' ';\n else if (lowerKey == 'cr')\n key = '\\n';\n else if (vimToCmKeyMap[lowerKey]) {\n var value = virtualPrompt.value;\n var event = {\n key: vimToCmKeyMap[lowerKey],\n target: {\n value: value,\n selectionEnd: value.length,\n selectionStart: value.length\n }\n };\n if (virtualPrompt.onKeyDown) {\n virtualPrompt.onKeyDown(event, virtualPrompt.value, close);\n }\n if (virtualPrompt && virtualPrompt.onKeyUp) {\n virtualPrompt.onKeyUp(event, virtualPrompt.value, close);\n }\n return;\n }\n }\n if (key == '\\n') {\n var prompt = virtualPrompt;\n virtualPrompt = null;\n prompt.onClose && prompt.onClose(prompt.value);\n }\n else {\n virtualPrompt.value = (virtualPrompt.value || '') + key;\n }\n function close(value) {\n if (typeof value == 'string') {\n virtualPrompt.value = value;\n }\n else {\n virtualPrompt = null;\n }\n }\n}\nfunction doKeyToKey(cm, keys, fromKey) {\n var noremapBefore = noremap;\n if (fromKey) {\n if (keyToKeyStack.indexOf(fromKey) != -1)\n return;\n keyToKeyStack.push(fromKey);\n noremap = fromKey.noremap != false;\n }\n try {\n var vim = maybeInitVimState(cm);\n var keyRe = /<(?:[CSMA]-)*\\w+>|./gi;\n var match;\n while ((match = keyRe.exec(keys))) {\n var key = match[0];\n var wasInsert = vim.insertMode;\n if (virtualPrompt) {\n sendKeyToPrompt(key);\n continue;\n }\n var result = vimApi.handleKey(cm, key, 'mapping');\n if (!result && wasInsert && vim.insertMode) {\n if (key[0] == \"<\") {\n var lowerKey = key.toLowerCase().slice(1, -1);\n var parts = lowerKey.split('-');\n lowerKey = parts.pop() || '';\n if (lowerKey == 'lt')\n key = '<';\n else if (lowerKey == 'space')\n key = ' ';\n else if (lowerKey == 'cr')\n key = '\\n';\n else if (vimToCmKeyMap.hasOwnProperty(lowerKey)) {\n key = vimToCmKeyMap[lowerKey];\n sendCmKey(cm, key);\n continue;\n }\n else {\n key = key[0];\n keyRe.lastIndex = match.index + 1;\n }\n }\n cm.replaceSelection(key);\n }\n }\n }\n finally {\n keyToKeyStack.pop();\n noremap = keyToKeyStack.length ? noremapBefore : false;\n if (!keyToKeyStack.length && virtualPrompt) {\n var promptOptions = virtualPrompt;\n virtualPrompt = null;\n showPrompt(cm, promptOptions);\n }\n }\n}\nvar specialKey = {\n Return: 'CR', Backspace: 'BS', 'Delete': 'Del', Escape: 'Esc', Insert: 'Ins',\n ArrowLeft: 'Left', ArrowRight: 'Right', ArrowUp: 'Up', ArrowDown: 'Down',\n Enter: 'CR', ' ': 'Space'\n};\nvar ignoredKeys = { Shift: 1, Alt: 1, Command: 1, Control: 1,\n CapsLock: 1, AltGraph: 1, Dead: 1, Unidentified: 1 };\nvar vimToCmKeyMap = {};\n'Left|Right|Up|Down|End|Home'.split('|').concat(Object.keys(specialKey)).forEach(function (x) {\n vimToCmKeyMap[(specialKey[x] || '').toLowerCase()]\n = vimToCmKeyMap[x.toLowerCase()] = x;\n});\nfunction vimKeyFromEvent(e, vim) {\n var key = e.key;\n if (ignoredKeys[key])\n return;\n if (key.length > 1 && key[0] == \"n\") {\n key = key.replace(\"Numpad\", \"\");\n }\n key = specialKey[key] || key;\n var name = '';\n if (e.ctrlKey) {\n name += 'C-';\n }\n if (e.altKey) {\n name += 'A-';\n }\n if (e.metaKey) {\n name += 'M-';\n }\n if (CodeMirror.isMac && e.altKey && !e.metaKey && !e.ctrlKey) {\n name = name.slice(2);\n }\n if ((name || key.length > 1) && e.shiftKey) {\n name += 'S-';\n }\n if (vim && !vim.expectLiteralNext && key.length == 1) {\n if (langmap.keymap && key in langmap.keymap) {\n if (langmap.remapCtrl != false || !name)\n key = langmap.keymap[key];\n }\n else if (key.charCodeAt(0) > 255) {\n var code = e.code && e.code.slice(-1) || \"\";\n if (!e.shiftKey)\n code = code.toLowerCase();\n if (code)\n key = code;\n }\n }\n name += key;\n if (name.length > 1) {\n name = '<' + name + '>';\n }\n return name;\n}\n;\nfunction updateLangmap(langmapString, remapCtrl) {\n if (langmap.string !== langmapString) {\n langmap = parseLangmap(langmapString);\n }\n langmap.remapCtrl = remapCtrl;\n}\nfunction parseLangmap(langmapString) {\n var keymap = {};\n if (!langmapString)\n return { keymap: keymap, string: '' };\n function getEscaped(list) {\n return list.split(/\\\\?(.)/).filter(Boolean);\n }\n langmapString.split(/((?:[^\\\\,]|\\\\.)+),/).map(function (part) {\n if (!part)\n return;\n var semicolon = part.split(/((?:[^\\\\;]|\\\\.)+);/);\n if (semicolon.length == 3) {\n var from = getEscaped(semicolon[1]);\n var to = getEscaped(semicolon[2]);\n if (from.length !== to.length)\n return; // skip over malformed part\n for (var i = 0; i < from.length; ++i)\n keymap[from[i]] = to[i];\n }\n else if (semicolon.length == 1) {\n var pairs = getEscaped(part);\n if (pairs.length % 2 !== 0)\n return; // skip over malformed part\n for (var i = 0; i < pairs.length; i += 2)\n keymap[pairs[i]] = pairs[i + 1];\n }\n });\n return { keymap: keymap, string: langmapString };\n}\ndefineOption('langmap', undefined, 'string', ['lmap'], function (name, cm) {\n if (name === undefined) {\n return langmap.string;\n }\n else {\n updateLangmap(name);\n }\n});\nfunction InputState() {\n this.prefixRepeat = [];\n this.motionRepeat = [];\n this.operator = null;\n this.operatorArgs = null;\n this.motion = null;\n this.motionArgs = null;\n this.keyBuffer = []; // For matching multi-key commands.\n this.registerName = null; // Defaults to the unnamed register.\n this.changeQueue = null; // For restoring text used by insert mode keybindings\n}\nInputState.prototype.pushRepeatDigit = function (n) {\n if (!this.operator) {\n this.prefixRepeat = this.prefixRepeat.concat(n);\n }\n else {\n this.motionRepeat = this.motionRepeat.concat(n);\n }\n};\nInputState.prototype.getRepeat = function () {\n var repeat = 0;\n if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n repeat = 1;\n if (this.prefixRepeat.length > 0) {\n repeat *= parseInt(this.prefixRepeat.join(''), 10);\n }\n if (this.motionRepeat.length > 0) {\n repeat *= parseInt(this.motionRepeat.join(''), 10);\n }\n }\n return repeat;\n};\nfunction clearInputState(cm, reason) {\n cm.state.vim.inputState = new InputState();\n cm.state.vim.expectLiteralNext = false;\n CodeMirror.signal(cm, 'vim-command-done', reason);\n}\nfunction ChangeQueue() {\n this.removed = [];\n this.inserted = \"\";\n}\nfunction Register(text, linewise, blockwise) {\n this.clear();\n this.keyBuffer = [text || ''];\n this.insertModeChanges = [];\n this.searchQueries = [];\n this.linewise = !!linewise;\n this.blockwise = !!blockwise;\n}\nRegister.prototype = {\n setText: function (text, linewise, blockwise) {\n this.keyBuffer = [text || ''];\n this.linewise = !!linewise;\n this.blockwise = !!blockwise;\n },\n pushText: function (text, linewise) {\n if (linewise) {\n if (!this.linewise) {\n this.keyBuffer.push('\\n');\n }\n this.linewise = true;\n }\n this.keyBuffer.push(text);\n },\n pushInsertModeChanges: function (changes) {\n this.insertModeChanges.push(createInsertModeChanges(changes));\n },\n pushSearchQuery: function (query) {\n this.searchQueries.push(query);\n },\n clear: function () {\n this.keyBuffer = [];\n this.insertModeChanges = [];\n this.searchQueries = [];\n this.linewise = false;\n },\n toString: function () {\n return this.keyBuffer.join('');\n }\n};\nfunction defineRegister(name, register) {\n var registers = vimGlobalState.registerController.registers;\n if (!name || name.length != 1) {\n throw Error('Register name must be 1 character');\n }\n registers[name] = register;\n validRegisters.push(name);\n}\nfunction RegisterController(registers) {\n this.registers = registers;\n this.unnamedRegister = registers['\"'] = new Register();\n registers['.'] = new Register();\n registers[':'] = new Register();\n registers['/'] = new Register();\n registers['+'] = new Register();\n}\nRegisterController.prototype = {\n pushText: function (registerName, operator, text, linewise, blockwise) {\n if (registerName === '_')\n return;\n if (linewise && text.charAt(text.length - 1) !== '\\n') {\n text += '\\n';\n }\n var register = this.isValidRegister(registerName) ?\n this.getRegister(registerName) : null;\n if (!register) {\n switch (operator) {\n case 'yank':\n this.registers['0'] = new Register(text, linewise, blockwise);\n break;\n case 'delete':\n case 'change':\n if (text.indexOf('\\n') == -1) {\n this.registers['-'] = new Register(text, linewise);\n }\n else {\n this.shiftNumericRegisters_();\n this.registers['1'] = new Register(text, linewise);\n }\n break;\n }\n this.unnamedRegister.setText(text, linewise, blockwise);\n return;\n }\n var append = isUpperCase(registerName);\n if (append) {\n register.pushText(text, linewise);\n }\n else {\n register.setText(text, linewise, blockwise);\n }\n if (registerName === '+' && typeof navigator !== 'undefined' &&\n typeof navigator.clipboard !== 'undefined' &&\n typeof navigator.clipboard.readText === 'function') {\n navigator.clipboard.writeText(text);\n }\n this.unnamedRegister.setText(register.toString(), linewise);\n },\n getRegister: function (name) {\n if (!this.isValidRegister(name)) {\n return this.unnamedRegister;\n }\n name = name.toLowerCase();\n if (!this.registers[name]) {\n this.registers[name] = new Register();\n }\n return this.registers[name];\n },\n isValidRegister: function (name) {\n return name && (inArray(name, validRegisters) || latinCharRegex.test(name));\n },\n shiftNumericRegisters_: function () {\n for (var i = 9; i >= 2; i--) {\n this.registers[i] = this.getRegister('' + (i - 1));\n }\n }\n};\nfunction HistoryController() {\n this.historyBuffer = [];\n this.iterator = 0;\n this.initialPrefix = null;\n}\nHistoryController.prototype = {\n nextMatch: function (input, up) {\n var historyBuffer = this.historyBuffer;\n var dir = up ? -1 : 1;\n if (this.initialPrefix === null)\n this.initialPrefix = input;\n for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i += dir) {\n var element = historyBuffer[i];\n for (var j = 0; j <= element.length; j++) {\n if (this.initialPrefix == element.substring(0, j)) {\n this.iterator = i;\n return element;\n }\n }\n }\n if (i >= historyBuffer.length) {\n this.iterator = historyBuffer.length;\n return this.initialPrefix;\n }\n if (i < 0)\n return input;\n },\n pushInput: function (input) {\n var index = this.historyBuffer.indexOf(input);\n if (index > -1)\n this.historyBuffer.splice(index, 1);\n if (input.length)\n this.historyBuffer.push(input);\n },\n reset: function () {\n this.initialPrefix = null;\n this.iterator = this.historyBuffer.length;\n }\n};\nvar commandDispatcher = {\n matchCommand: function (keys, keyMap, inputState, context) {\n var matches = commandMatches(keys, keyMap, context, inputState);\n if (!matches.full && !matches.partial) {\n return { type: 'none' };\n }\n else if (!matches.full && matches.partial) {\n return {\n type: 'partial',\n expectLiteralNext: matches.partial.length == 1 && matches.partial[0].keys.slice(-11) == '' // langmap literal logic\n };\n }\n var bestMatch;\n for (var i = 0; i < matches.full.length; i++) {\n var match = matches.full[i];\n if (!bestMatch) {\n bestMatch = match;\n }\n }\n if (bestMatch.keys.slice(-11) == '' || bestMatch.keys.slice(-10) == '') {\n var character = lastChar(keys);\n if (!character || character.length > 1)\n return { type: 'clear' };\n inputState.selectedCharacter = character;\n }\n return { type: 'full', command: bestMatch };\n },\n processCommand: function (cm, vim, command) {\n vim.inputState.repeatOverride = command.repeatOverride;\n switch (command.type) {\n case 'motion':\n this.processMotion(cm, vim, command);\n break;\n case 'operator':\n this.processOperator(cm, vim, command);\n break;\n case 'operatorMotion':\n this.processOperatorMotion(cm, vim, command);\n break;\n case 'action':\n this.processAction(cm, vim, command);\n break;\n case 'search':\n this.processSearch(cm, vim, command);\n break;\n case 'ex':\n case 'keyToEx':\n this.processEx(cm, vim, command);\n break;\n default:\n break;\n }\n },\n processMotion: function (cm, vim, command) {\n vim.inputState.motion = command.motion;\n vim.inputState.motionArgs = copyArgs(command.motionArgs);\n this.evalInput(cm, vim);\n },\n processOperator: function (cm, vim, command) {\n var inputState = vim.inputState;\n if (inputState.operator) {\n if (inputState.operator == command.operator) {\n inputState.motion = 'expandToLine';\n inputState.motionArgs = { linewise: true };\n this.evalInput(cm, vim);\n return;\n }\n else {\n clearInputState(cm);\n }\n }\n inputState.operator = command.operator;\n inputState.operatorArgs = copyArgs(command.operatorArgs);\n if (command.keys.length > 1) {\n inputState.operatorShortcut = command.keys;\n }\n if (command.exitVisualBlock) {\n vim.visualBlock = false;\n updateCmSelection(cm);\n }\n if (vim.visualMode) {\n this.evalInput(cm, vim);\n }\n },\n processOperatorMotion: function (cm, vim, command) {\n var visualMode = vim.visualMode;\n var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n if (operatorMotionArgs) {\n if (visualMode && operatorMotionArgs.visualLine) {\n vim.visualLine = true;\n }\n }\n this.processOperator(cm, vim, command);\n if (!visualMode) {\n this.processMotion(cm, vim, command);\n }\n },\n processAction: function (cm, vim, command) {\n var inputState = vim.inputState;\n var repeat = inputState.getRepeat();\n var repeatIsExplicit = !!repeat;\n var actionArgs = copyArgs(command.actionArgs) || {};\n if (inputState.selectedCharacter) {\n actionArgs.selectedCharacter = inputState.selectedCharacter;\n }\n if (command.operator) {\n this.processOperator(cm, vim, command);\n }\n if (command.motion) {\n this.processMotion(cm, vim, command);\n }\n if (command.motion || command.operator) {\n this.evalInput(cm, vim);\n }\n actionArgs.repeat = repeat || 1;\n actionArgs.repeatIsExplicit = repeatIsExplicit;\n actionArgs.registerName = inputState.registerName;\n clearInputState(cm);\n vim.lastMotion = null;\n if (command.isEdit) {\n this.recordLastEdit(vim, inputState, command);\n }\n actions[command.action](cm, actionArgs, vim);\n },\n processSearch: function (cm, vim, command) {\n if (!cm.getSearchCursor) {\n return;\n }\n var forward = command.searchArgs.forward;\n var wholeWordOnly = command.searchArgs.wholeWordOnly;\n getSearchState(cm).setReversed(!forward);\n var promptPrefix = (forward) ? '/' : '?';\n var originalQuery = getSearchState(cm).getQuery();\n var originalScrollPos = cm.getScrollInfo();\n function handleQuery(query, ignoreCase, smartCase) {\n vimGlobalState.searchHistoryController.pushInput(query);\n vimGlobalState.searchHistoryController.reset();\n try {\n updateSearchQuery(cm, query, ignoreCase, smartCase);\n }\n catch (e) {\n showConfirm(cm, 'Invalid regex: ' + query);\n clearInputState(cm);\n return;\n }\n commandDispatcher.processMotion(cm, vim, {\n type: 'motion',\n motion: 'findNext',\n motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n });\n }\n function onPromptClose(query) {\n handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.isRecording) {\n logSearchQuery(macroModeState, query);\n }\n }\n function onPromptKeyUp(e, query, close) {\n var keyName = vimKeyFromEvent(e), up, offset;\n if (keyName == '' || keyName == '') {\n up = keyName == '' ? true : false;\n offset = e.target ? e.target.selectionEnd : 0;\n query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n close(query);\n if (offset && e.target)\n e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n }\n else if (keyName && keyName != '' && keyName != '') {\n vimGlobalState.searchHistoryController.reset();\n }\n var parsedQuery;\n try {\n parsedQuery = updateSearchQuery(cm, query, true /** ignoreCase */, true /** smartCase */);\n }\n catch (e) {\n }\n if (parsedQuery) {\n cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n }\n else {\n clearSearchHighlight(cm);\n cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n }\n }\n function onPromptKeyDown(e, query, close) {\n var keyName = vimKeyFromEvent(e);\n if (keyName == '' || keyName == '' || keyName == '' ||\n (keyName == '' && query == '')) {\n vimGlobalState.searchHistoryController.pushInput(query);\n vimGlobalState.searchHistoryController.reset();\n updateSearchQuery(cm, originalQuery);\n clearSearchHighlight(cm);\n cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n CodeMirror.e_stop(e);\n clearInputState(cm);\n close();\n cm.focus();\n }\n else if (keyName == '' || keyName == '') {\n CodeMirror.e_stop(e);\n }\n else if (keyName == '') {\n CodeMirror.e_stop(e);\n close('');\n }\n }\n switch (command.searchArgs.querySrc) {\n case 'prompt':\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.isPlaying) {\n var query = macroModeState.replaySearchQueries.shift();\n handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n }\n else {\n showPrompt(cm, {\n onClose: onPromptClose,\n prefix: promptPrefix,\n desc: '(JavaScript regexp)',\n onKeyUp: onPromptKeyUp,\n onKeyDown: onPromptKeyDown\n });\n }\n break;\n case 'wordUnderCursor':\n var word = expandWordUnderCursor(cm, { noSymbol: true });\n var isKeyword = true;\n if (!word) {\n word = expandWordUnderCursor(cm, { noSymbol: false });\n isKeyword = false;\n }\n if (!word) {\n showConfirm(cm, 'No word under cursor');\n clearInputState(cm);\n return;\n }\n var query = cm.getLine(word.start.line).substring(word.start.ch, word.end.ch);\n if (isKeyword && wholeWordOnly) {\n query = '\\\\b' + query + '\\\\b';\n }\n else {\n query = escapeRegex(query);\n }\n vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n cm.setCursor(word.start);\n handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n break;\n }\n },\n processEx: function (cm, vim, command) {\n function onPromptClose(input) {\n vimGlobalState.exCommandHistoryController.pushInput(input);\n vimGlobalState.exCommandHistoryController.reset();\n exCommandDispatcher.processCommand(cm, input);\n if (cm.state.vim)\n clearInputState(cm);\n }\n function onPromptKeyDown(e, input, close) {\n var keyName = vimKeyFromEvent(e), up, offset;\n if (keyName == '' || keyName == '' || keyName == '' ||\n (keyName == '' && input == '')) {\n vimGlobalState.exCommandHistoryController.pushInput(input);\n vimGlobalState.exCommandHistoryController.reset();\n CodeMirror.e_stop(e);\n clearInputState(cm);\n close();\n cm.focus();\n }\n if (keyName == '' || keyName == '') {\n CodeMirror.e_stop(e);\n up = keyName == '' ? true : false;\n offset = e.target ? e.target.selectionEnd : 0;\n input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n close(input);\n if (offset && e.target)\n e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n }\n else if (keyName == '') {\n CodeMirror.e_stop(e);\n close('');\n }\n else if (keyName && keyName != '' && keyName != '') {\n vimGlobalState.exCommandHistoryController.reset();\n }\n }\n if (command.type == 'keyToEx') {\n exCommandDispatcher.processCommand(cm, command.exArgs.input);\n }\n else {\n if (vim.visualMode) {\n showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n onKeyDown: onPromptKeyDown, selectValueOnOpen: false });\n }\n else {\n showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n onKeyDown: onPromptKeyDown });\n }\n }\n },\n evalInput: function (cm, vim) {\n var inputState = vim.inputState;\n var motion = inputState.motion;\n var motionArgs = inputState.motionArgs || {};\n var operator = inputState.operator;\n var operatorArgs = inputState.operatorArgs || {};\n var registerName = inputState.registerName;\n var sel = vim.sel;\n var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head) : cm.getCursor('head'));\n var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n var oldHead = copyCursor(origHead);\n var oldAnchor = copyCursor(origAnchor);\n var newHead, newAnchor;\n var repeat;\n if (operator) {\n this.recordLastEdit(vim, inputState);\n }\n if (inputState.repeatOverride !== undefined) {\n repeat = inputState.repeatOverride;\n }\n else {\n repeat = inputState.getRepeat();\n }\n if (repeat > 0 && motionArgs.explicitRepeat) {\n motionArgs.repeatIsExplicit = true;\n }\n else if (motionArgs.noRepeat ||\n (!motionArgs.explicitRepeat && repeat === 0)) {\n repeat = 1;\n motionArgs.repeatIsExplicit = false;\n }\n if (inputState.selectedCharacter) {\n motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n inputState.selectedCharacter;\n }\n motionArgs.repeat = repeat;\n clearInputState(cm);\n if (motion) {\n var motionResult = motions[motion](cm, origHead, motionArgs, vim, inputState);\n vim.lastMotion = motions[motion];\n if (!motionResult) {\n return;\n }\n if (motionArgs.toJumplist) {\n if (!operator && cm.ace.curOp != null)\n cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n var jumpList = vimGlobalState.jumpList;\n var cachedCursor = jumpList.cachedCursor;\n if (cachedCursor) {\n recordJumpPosition(cm, cachedCursor, motionResult);\n delete jumpList.cachedCursor;\n }\n else {\n recordJumpPosition(cm, origHead, motionResult);\n }\n }\n if (motionResult instanceof Array) {\n newAnchor = motionResult[0];\n newHead = motionResult[1];\n }\n else {\n newHead = motionResult;\n }\n if (!newHead) {\n newHead = copyCursor(origHead);\n }\n if (vim.visualMode) {\n if (!(vim.visualBlock && newHead.ch === Infinity)) {\n newHead = clipCursorToContent(cm, newHead, oldHead);\n }\n if (newAnchor) {\n newAnchor = clipCursorToContent(cm, newAnchor);\n }\n newAnchor = newAnchor || oldAnchor;\n sel.anchor = newAnchor;\n sel.head = newHead;\n updateCmSelection(cm);\n updateMark(cm, vim, '<', cursorIsBefore(newAnchor, newHead) ? newAnchor\n : newHead);\n updateMark(cm, vim, '>', cursorIsBefore(newAnchor, newHead) ? newHead\n : newAnchor);\n }\n else if (!operator) {\n if (cm.ace.curOp)\n cm.ace.curOp.vimDialogScroll = \"center-animate\"; // ace_patch\n newHead = clipCursorToContent(cm, newHead, oldHead);\n cm.setCursor(newHead.line, newHead.ch);\n }\n }\n if (operator) {\n if (operatorArgs.lastSel) {\n newAnchor = oldAnchor;\n var lastSel = operatorArgs.lastSel;\n var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n if (lastSel.visualLine) {\n newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n }\n else if (lastSel.visualBlock) {\n newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n }\n else if (lastSel.head.line == lastSel.anchor.line) {\n newHead = new Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n }\n else {\n newHead = new Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n }\n vim.visualMode = true;\n vim.visualLine = lastSel.visualLine;\n vim.visualBlock = lastSel.visualBlock;\n sel = vim.sel = {\n anchor: newAnchor,\n head: newHead\n };\n updateCmSelection(cm);\n }\n else if (vim.visualMode) {\n operatorArgs.lastSel = {\n anchor: copyCursor(sel.anchor),\n head: copyCursor(sel.head),\n visualBlock: vim.visualBlock,\n visualLine: vim.visualLine\n };\n }\n var curStart, curEnd, linewise, mode;\n var cmSel;\n if (vim.visualMode) {\n curStart = cursorMin(sel.head, sel.anchor);\n curEnd = cursorMax(sel.head, sel.anchor);\n linewise = vim.visualLine || operatorArgs.linewise;\n mode = vim.visualBlock ? 'block' :\n linewise ? 'line' :\n 'char';\n var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n cmSel = makeCmSelection(cm, {\n anchor: newPositions.start,\n head: newPositions.end\n }, mode);\n if (linewise) {\n var ranges = cmSel.ranges;\n if (mode == 'block') {\n for (var i = 0; i < ranges.length; i++) {\n ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n }\n }\n else if (mode == 'line') {\n ranges[0].head = new Pos(ranges[0].head.line + 1, 0);\n }\n }\n }\n else {\n curStart = copyCursor(newAnchor || oldAnchor);\n curEnd = copyCursor(newHead || oldHead);\n if (cursorIsBefore(curEnd, curStart)) {\n var tmp = curStart;\n curStart = curEnd;\n curEnd = tmp;\n }\n linewise = motionArgs.linewise || operatorArgs.linewise;\n if (linewise) {\n expandSelectionToLine(cm, curStart, curEnd);\n }\n else if (motionArgs.forward) {\n clipToLine(cm, curStart, curEnd);\n }\n mode = 'char';\n var exclusive = !motionArgs.inclusive || linewise;\n var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n cmSel = makeCmSelection(cm, {\n anchor: newPositions.start,\n head: newPositions.end\n }, mode, exclusive);\n }\n cm.setSelections(cmSel.ranges, cmSel.primary);\n vim.lastMotion = null;\n operatorArgs.repeat = repeat; // For indent in visual mode.\n operatorArgs.registerName = registerName;\n operatorArgs.linewise = linewise;\n var operatorMoveTo = operators[operator](cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n if (vim.visualMode) {\n exitVisualMode(cm, operatorMoveTo != null);\n }\n if (operatorMoveTo) {\n cm.setCursor(operatorMoveTo);\n }\n }\n },\n recordLastEdit: function (vim, inputState, actionCommand) {\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.isPlaying) {\n return;\n }\n vim.lastEditInputState = inputState;\n vim.lastEditActionCommand = actionCommand;\n macroModeState.lastInsertModeChanges.changes = [];\n macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n macroModeState.lastInsertModeChanges.visualBlock = vim.visualBlock ? vim.sel.head.line - vim.sel.anchor.line : 0;\n }\n};\nvar motions = {\n moveToTopLine: function (cm, _head, motionArgs) {\n var line = getUserVisibleLines(cm).top + motionArgs.repeat - 1;\n return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n },\n moveToMiddleLine: function (cm) {\n var range = getUserVisibleLines(cm);\n var line = Math.floor((range.top + range.bottom) * 0.5);\n return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n },\n moveToBottomLine: function (cm, _head, motionArgs) {\n var line = getUserVisibleLines(cm).bottom - motionArgs.repeat + 1;\n return new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n },\n expandToLine: function (_cm, head, motionArgs) {\n var cur = head;\n return new Pos(cur.line + motionArgs.repeat - 1, Infinity);\n },\n findNext: function (cm, _head, motionArgs) {\n var state = getSearchState(cm);\n var query = state.getQuery();\n if (!query) {\n return;\n }\n var prev = !motionArgs.forward;\n prev = (state.isReversed()) ? !prev : prev;\n highlightSearchMatches(cm, query);\n return findNext(cm, prev /** prev */, query, motionArgs.repeat);\n },\n findAndSelectNextInclusive: function (cm, _head, motionArgs, vim, prevInputState) {\n var state = getSearchState(cm);\n var query = state.getQuery();\n if (!query) {\n return;\n }\n var prev = !motionArgs.forward;\n prev = (state.isReversed()) ? !prev : prev;\n var next = findNextFromAndToInclusive(cm, prev, query, motionArgs.repeat, vim);\n if (!next) {\n return;\n }\n if (prevInputState.operator) {\n return next;\n }\n var from = next[0];\n var to = new Pos(next[1].line, next[1].ch - 1);\n if (vim.visualMode) {\n if (vim.visualLine || vim.visualBlock) {\n vim.visualLine = false;\n vim.visualBlock = false;\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: \"\" });\n }\n var anchor = vim.sel.anchor;\n if (anchor) {\n if (state.isReversed()) {\n if (motionArgs.forward) {\n return [anchor, from];\n }\n return [anchor, to];\n }\n else {\n if (motionArgs.forward) {\n return [anchor, to];\n }\n return [anchor, from];\n }\n }\n }\n else {\n vim.visualMode = true;\n vim.visualLine = false;\n vim.visualBlock = false;\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: \"\" });\n }\n return prev ? [to, from] : [from, to];\n },\n goToMark: function (cm, _head, motionArgs, vim) {\n var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);\n if (pos) {\n return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n }\n return null;\n },\n moveToOtherHighlightedEnd: function (cm, _head, motionArgs, vim) {\n if (vim.visualBlock && motionArgs.sameLine) {\n var sel = vim.sel;\n return [\n clipCursorToContent(cm, new Pos(sel.anchor.line, sel.head.ch)),\n clipCursorToContent(cm, new Pos(sel.head.line, sel.anchor.ch))\n ];\n }\n else {\n return ([vim.sel.head, vim.sel.anchor]);\n }\n },\n jumpToMark: function (cm, head, motionArgs, vim) {\n var best = head;\n for (var i = 0; i < motionArgs.repeat; i++) {\n var cursor = best;\n for (var key in vim.marks) {\n if (!isLowerCase(key)) {\n continue;\n }\n var mark = vim.marks[key].find();\n var isWrongDirection = (motionArgs.forward) ?\n cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n if (isWrongDirection) {\n continue;\n }\n if (motionArgs.linewise && (mark.line == cursor.line)) {\n continue;\n }\n var equal = cursorEqual(cursor, best);\n var between = (motionArgs.forward) ?\n cursorIsBetween(cursor, mark, best) :\n cursorIsBetween(best, mark, cursor);\n if (equal || between) {\n best = mark;\n }\n }\n }\n if (motionArgs.linewise) {\n best = new Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n }\n return best;\n },\n moveByCharacters: function (_cm, head, motionArgs) {\n var cur = head;\n var repeat = motionArgs.repeat;\n var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n return new Pos(cur.line, ch);\n },\n moveByLines: function (cm, head, motionArgs, vim) {\n var cur = head;\n var endCh = cur.ch;\n switch (vim.lastMotion) {\n case this.moveByLines:\n case this.moveByDisplayLines:\n case this.moveByScroll:\n case this.moveToColumn:\n case this.moveToEol:\n endCh = vim.lastHPos;\n break;\n default:\n vim.lastHPos = endCh;\n }\n var repeat = motionArgs.repeat + (motionArgs.repeatOffset || 0);\n var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n var first = cm.firstLine();\n var last = cm.lastLine();\n if (line < first && cur.line == first) {\n return this.moveToStartOfLine(cm, head, motionArgs, vim);\n }\n else if (line > last && cur.line == last) {\n return moveToEol(cm, head, motionArgs, vim, true);\n }\n var fold = cm.ace.session.getFoldLine(line);\n if (fold) {\n if (motionArgs.forward) {\n if (line > fold.start.row)\n line = fold.end.row + 1;\n }\n else {\n line = fold.start.row;\n }\n }\n if (motionArgs.toFirstChar) {\n endCh = findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n vim.lastHPos = endCh;\n }\n vim.lastHSPos = cm.charCoords(new Pos(line, endCh), 'div').left;\n return new Pos(line, endCh);\n },\n moveByDisplayLines: function (cm, head, motionArgs, vim) {\n var cur = head;\n switch (vim.lastMotion) {\n case this.moveByDisplayLines:\n case this.moveByScroll:\n case this.moveByLines:\n case this.moveToColumn:\n case this.moveToEol:\n break;\n default:\n vim.lastHSPos = cm.charCoords(cur, 'div').left;\n }\n var repeat = motionArgs.repeat;\n var res = cm.findPosV(cur, (motionArgs.forward ? repeat : -repeat), 'line', vim.lastHSPos);\n if (res.hitSide) {\n if (motionArgs.forward) {\n var lastCharCoords = cm.charCoords(res, 'div');\n var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n var res = cm.coordsChar(goalCoords, 'div');\n }\n else {\n var resCoords = cm.charCoords(new Pos(cm.firstLine(), 0), 'div');\n resCoords.left = vim.lastHSPos;\n res = cm.coordsChar(resCoords, 'div');\n }\n }\n vim.lastHPos = res.ch;\n return res;\n },\n moveByPage: function (cm, head, motionArgs) {\n var curStart = head;\n var repeat = motionArgs.repeat;\n return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n },\n moveByParagraph: function (cm, head, motionArgs) {\n var dir = motionArgs.forward ? 1 : -1;\n return findParagraph(cm, head, motionArgs.repeat, dir);\n },\n moveBySentence: function (cm, head, motionArgs) {\n var dir = motionArgs.forward ? 1 : -1;\n return findSentence(cm, head, motionArgs.repeat, dir);\n },\n moveByScroll: function (cm, head, motionArgs, vim) {\n var scrollbox = cm.getScrollInfo();\n var curEnd = null;\n var repeat = motionArgs.repeat;\n if (!repeat) {\n repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n }\n var orig = cm.charCoords(head, 'local');\n motionArgs.repeat = repeat;\n curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n if (!curEnd) {\n return null;\n }\n var dest = cm.charCoords(curEnd, 'local');\n cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n return curEnd;\n },\n moveByWords: function (cm, head, motionArgs) {\n return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward, !!motionArgs.wordEnd, !!motionArgs.bigWord);\n },\n moveTillCharacter: function (cm, head, motionArgs) {\n var repeat = motionArgs.repeat;\n var curEnd = moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter, head);\n var increment = motionArgs.forward ? -1 : 1;\n recordLastCharacterSearch(increment, motionArgs);\n if (!curEnd)\n return null;\n curEnd.ch += increment;\n return curEnd;\n },\n moveToCharacter: function (cm, head, motionArgs) {\n var repeat = motionArgs.repeat;\n recordLastCharacterSearch(0, motionArgs);\n return moveToCharacter(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter, head) || head;\n },\n moveToSymbol: function (cm, head, motionArgs) {\n var repeat = motionArgs.repeat;\n return findSymbol(cm, repeat, motionArgs.forward, motionArgs.selectedCharacter) || head;\n },\n moveToColumn: function (cm, head, motionArgs, vim) {\n var repeat = motionArgs.repeat;\n vim.lastHPos = repeat - 1;\n vim.lastHSPos = cm.charCoords(head, 'div').left;\n return moveToColumn(cm, repeat);\n },\n moveToEol: function (cm, head, motionArgs, vim) {\n return moveToEol(cm, head, motionArgs, vim, false);\n },\n moveToFirstNonWhiteSpaceCharacter: function (cm, head) {\n var cursor = head;\n return new Pos(cursor.line, findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n },\n moveToMatchedSymbol: function (cm, head) {\n var cursor = head;\n var line = cursor.line;\n var ch = cursor.ch;\n var lineText = cm.getLine(line);\n var symbol;\n for (; ch < lineText.length; ch++) {\n symbol = lineText.charAt(ch);\n if (symbol && isMatchableSymbol(symbol)) {\n var style = cm.getTokenTypeAt(new Pos(line, ch + 1));\n if (style !== \"string\" && style !== \"comment\") {\n break;\n }\n }\n }\n if (ch < lineText.length) {\n var re = /[<>]/.test(lineText[ch]) ? /[(){}[\\]<>]/ : /[(){}[\\]]/; //ace_patch?\n var matched = cm.findMatchingBracket(new Pos(line, ch + 1), { bracketRegex: re });\n return matched.to;\n }\n else {\n return cursor;\n }\n },\n moveToStartOfLine: function (_cm, head) {\n return new Pos(head.line, 0);\n },\n moveToLineOrEdgeOfDocument: function (cm, _head, motionArgs) {\n var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n if (motionArgs.repeatIsExplicit) {\n lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n }\n return new Pos(lineNum, findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n },\n moveToStartOfDisplayLine: function (cm) {\n cm.execCommand(\"goLineLeft\");\n return cm.getCursor();\n },\n moveToEndOfDisplayLine: function (cm) {\n cm.execCommand(\"goLineRight\");\n var head = cm.getCursor();\n if (head.sticky == \"before\")\n head.ch--;\n return head;\n },\n textObjectManipulation: function (cm, head, motionArgs, vim) {\n var mirroredPairs = { '(': ')', ')': '(',\n '{': '}', '}': '{',\n '[': ']', ']': '[',\n '<': '>', '>': '<' };\n var selfPaired = { '\\'': true, '\"': true, '`': true };\n var character = motionArgs.selectedCharacter;\n if (character == 'b') {\n character = '(';\n }\n else if (character == 'B') {\n character = '{';\n }\n var inclusive = !motionArgs.textObjectInner;\n var tmp, move;\n if (mirroredPairs[character]) {\n move = true;\n tmp = selectCompanionObject(cm, head, character, inclusive);\n if (!tmp) {\n var sc = cm.getSearchCursor(new RegExp(\"\\\\\" + character, \"g\"), head);\n if (sc.find()) {\n tmp = selectCompanionObject(cm, sc.from(), character, inclusive);\n }\n }\n }\n else if (selfPaired[character]) {\n move = true;\n tmp = findBeginningAndEnd(cm, head, character, inclusive);\n }\n else if (character === 'W' || character === 'w') {\n var repeat = motionArgs.repeat || 1;\n while (repeat-- > 0) {\n var repeated = expandWordUnderCursor(cm, {\n inclusive: inclusive,\n innerWord: !inclusive,\n bigWord: character === 'W',\n noSymbol: character === 'W',\n multiline: true\n }, tmp && tmp.end);\n if (repeated) {\n if (!tmp)\n tmp = repeated;\n tmp.end = repeated.end;\n }\n }\n }\n else if (character === 'p') {\n tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n motionArgs.linewise = true;\n if (vim.visualMode) {\n if (!vim.visualLine) {\n vim.visualLine = true;\n }\n }\n else {\n var operatorArgs = vim.inputState.operatorArgs;\n if (operatorArgs) {\n operatorArgs.linewise = true;\n }\n tmp.end.line--;\n }\n }\n else if (character === 't') {\n tmp = expandTagUnderCursor(cm, head, inclusive);\n }\n else if (character === 's') {\n var content = cm.getLine(head.line);\n if (head.ch > 0 && isEndOfSentenceSymbol(content[head.ch])) {\n head.ch -= 1;\n }\n var end = getSentence(cm, head, motionArgs.repeat, 1, inclusive);\n var start = getSentence(cm, head, motionArgs.repeat, -1, inclusive);\n if (isWhiteSpaceString(cm.getLine(start.line)[start.ch])\n && isWhiteSpaceString(cm.getLine(end.line)[end.ch - 1])) {\n start = { line: start.line, ch: start.ch + 1 };\n }\n tmp = { start: start, end: end };\n }\n if (!tmp) {\n return null;\n }\n if (!cm.state.vim.visualMode) {\n return [tmp.start, tmp.end];\n }\n else {\n return expandSelection(cm, tmp.start, tmp.end, move);\n }\n },\n repeatLastCharacterSearch: function (cm, head, motionArgs) {\n var lastSearch = vimGlobalState.lastCharacterSearch;\n var repeat = motionArgs.repeat;\n var forward = motionArgs.forward === lastSearch.forward;\n var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n cm.moveH(-increment, 'char');\n motionArgs.inclusive = forward ? true : false;\n var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n if (!curEnd) {\n cm.moveH(increment, 'char');\n return head;\n }\n curEnd.ch += increment;\n return curEnd;\n }\n};\nfunction defineMotion(name, fn) {\n motions[name] = fn;\n}\nfunction fillArray(val, times) {\n var arr = [];\n for (var i = 0; i < times; i++) {\n arr.push(val);\n }\n return arr;\n}\nvar operators = {\n change: function (cm, args, ranges) {\n var finalHead, text;\n var vim = cm.state.vim;\n var anchor = ranges[0].anchor, head = ranges[0].head;\n if (!vim.visualMode) {\n text = cm.getRange(anchor, head);\n var lastState = vim.lastEditInputState || {};\n if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n var match = (/\\s+$/).exec(text);\n if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n head = offsetCursor(head, 0, -match[0].length);\n text = text.slice(0, -match[0].length);\n }\n }\n if (args.linewise) {\n anchor = new Pos(anchor.line, findFirstNonWhiteSpaceCharacter(cm.getLine(anchor.line)));\n if (head.line > anchor.line) {\n head = new Pos(head.line - 1, Number.MAX_VALUE);\n }\n }\n cm.replaceRange('', anchor, head);\n finalHead = anchor;\n }\n else if (args.fullLine) {\n head.ch = Number.MAX_VALUE;\n head.line--;\n cm.setSelection(anchor, head);\n text = cm.getSelection();\n cm.replaceSelection(\"\");\n finalHead = anchor;\n }\n else {\n text = cm.getSelection();\n var replacement = fillArray('', ranges.length);\n cm.replaceSelections(replacement);\n finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n }\n vimGlobalState.registerController.pushText(args.registerName, 'change', text, args.linewise, ranges.length > 1);\n actions.enterInsertMode(cm, { head: finalHead }, cm.state.vim);\n },\n 'delete': function (cm, args, ranges) {\n var finalHead, text;\n var vim = cm.state.vim;\n if (!vim.visualBlock) {\n var anchor = ranges[0].anchor, head = ranges[0].head;\n if (args.linewise &&\n head.line != cm.firstLine() &&\n anchor.line == cm.lastLine() &&\n anchor.line == head.line - 1) {\n if (anchor.line == cm.firstLine()) {\n anchor.ch = 0;\n }\n else {\n anchor = new Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n }\n }\n text = cm.getRange(anchor, head);\n cm.replaceRange('', anchor, head);\n finalHead = anchor;\n if (args.linewise) {\n finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n }\n }\n else {\n text = cm.getSelection();\n var replacement = fillArray('', ranges.length);\n cm.replaceSelections(replacement);\n finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n }\n vimGlobalState.registerController.pushText(args.registerName, 'delete', text, args.linewise, vim.visualBlock);\n return clipCursorToContent(cm, finalHead);\n },\n indent: function (cm, args, ranges) {\n var vim = cm.state.vim;\n if (cm.indentMore) {\n var repeat = (vim.visualMode) ? args.repeat : 1;\n for (var j = 0; j < repeat; j++) {\n if (args.indentRight)\n cm.indentMore();\n else\n cm.indentLess();\n }\n }\n else {\n var startLine = ranges[0].anchor.line;\n var endLine = vim.visualBlock ?\n ranges[ranges.length - 1].anchor.line :\n ranges[0].head.line;\n var repeat = (vim.visualMode) ? args.repeat : 1;\n if (args.linewise) {\n endLine--;\n }\n for (var i = startLine; i <= endLine; i++) {\n for (var j = 0; j < repeat; j++) {\n cm.indentLine(i, args.indentRight);\n }\n }\n }\n return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n },\n indentAuto: function (cm, _args, ranges) {\n cm.execCommand(\"indentAuto\");\n return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n },\n hardWrap: function (cm, operatorArgs, ranges, oldAnchor, newHead) {\n if (!cm.hardWrap)\n return;\n var from = ranges[0].anchor.line;\n var to = ranges[0].head.line;\n if (operatorArgs.linewise)\n to--;\n var endRow = cm.hardWrap({ from: from, to: to });\n if (endRow > from && operatorArgs.linewise)\n endRow--;\n return operatorArgs.keepCursor ? oldAnchor : new Pos(endRow, 0);\n },\n changeCase: function (cm, args, ranges, oldAnchor, newHead) {\n var selections = cm.getSelections();\n var swapped = [];\n var toLower = args.toLower;\n for (var j = 0; j < selections.length; j++) {\n var toSwap = selections[j];\n var text = '';\n if (toLower === true) {\n text = toSwap.toLowerCase();\n }\n else if (toLower === false) {\n text = toSwap.toUpperCase();\n }\n else {\n for (var i = 0; i < toSwap.length; i++) {\n var character = toSwap.charAt(i);\n text += isUpperCase(character) ? character.toLowerCase() :\n character.toUpperCase();\n }\n }\n swapped.push(text);\n }\n cm.replaceSelections(swapped);\n if (args.shouldMoveCursor) {\n return newHead;\n }\n else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n }\n else if (args.linewise) {\n return oldAnchor;\n }\n else {\n return cursorMin(ranges[0].anchor, ranges[0].head);\n }\n },\n yank: function (cm, args, ranges, oldAnchor) {\n var vim = cm.state.vim;\n var text = cm.getSelection();\n var endPos = vim.visualMode\n ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n : oldAnchor;\n vimGlobalState.registerController.pushText(args.registerName, 'yank', text, args.linewise, vim.visualBlock);\n return endPos;\n }\n};\nfunction defineOperator(name, fn) {\n operators[name] = fn;\n}\nvar actions = {\n jumpListWalk: function (cm, actionArgs, vim) {\n if (vim.visualMode) {\n return;\n }\n var repeat = actionArgs.repeat;\n var forward = actionArgs.forward;\n var jumpList = vimGlobalState.jumpList;\n var mark = jumpList.move(cm, forward ? repeat : -repeat);\n var markPos = mark ? mark.find() : undefined;\n markPos = markPos ? markPos : cm.getCursor();\n cm.setCursor(markPos);\n cm.ace.curOp.command.scrollIntoView = \"center-animate\"; // ace_patch\n },\n scroll: function (cm, actionArgs, vim) {\n if (vim.visualMode) {\n return;\n }\n var repeat = actionArgs.repeat || 1;\n var lineHeight = cm.defaultTextHeight();\n var top = cm.getScrollInfo().top;\n var delta = lineHeight * repeat;\n var newPos = actionArgs.forward ? top + delta : top - delta;\n var cursor = copyCursor(cm.getCursor());\n var cursorCoords = cm.charCoords(cursor, 'local');\n if (actionArgs.forward) {\n if (newPos > cursorCoords.top) {\n cursor.line += (newPos - cursorCoords.top) / lineHeight;\n cursor.line = Math.ceil(cursor.line);\n cm.setCursor(cursor);\n cursorCoords = cm.charCoords(cursor, 'local');\n cm.scrollTo(null, cursorCoords.top);\n }\n else {\n cm.scrollTo(null, newPos);\n }\n }\n else {\n var newBottom = newPos + cm.getScrollInfo().clientHeight;\n if (newBottom < cursorCoords.bottom) {\n cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n cursor.line = Math.floor(cursor.line);\n cm.setCursor(cursor);\n cursorCoords = cm.charCoords(cursor, 'local');\n cm.scrollTo(null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n }\n else {\n cm.scrollTo(null, newPos);\n }\n }\n },\n scrollToCursor: function (cm, actionArgs) {\n var lineNum = cm.getCursor().line;\n var charCoords = cm.charCoords(new Pos(lineNum, 0), 'local');\n var height = cm.getScrollInfo().clientHeight;\n var y = charCoords.top;\n switch (actionArgs.position) {\n case 'center':\n y = charCoords.bottom - height / 2;\n break;\n case 'bottom':\n var lineLastCharPos = new Pos(lineNum, cm.getLine(lineNum).length - 1);\n var lineLastCharCoords = cm.charCoords(lineLastCharPos, 'local');\n var lineHeight = lineLastCharCoords.bottom - y;\n y = y - height + lineHeight;\n break;\n }\n cm.scrollTo(null, y);\n },\n replayMacro: function (cm, actionArgs, vim) {\n var registerName = actionArgs.selectedCharacter;\n var repeat = actionArgs.repeat;\n var macroModeState = vimGlobalState.macroModeState;\n if (registerName == '@') {\n registerName = macroModeState.latestRegister;\n }\n else {\n macroModeState.latestRegister = registerName;\n }\n while (repeat--) {\n executeMacroRegister(cm, vim, macroModeState, registerName);\n }\n },\n enterMacroRecordMode: function (cm, actionArgs) {\n var macroModeState = vimGlobalState.macroModeState;\n var registerName = actionArgs.selectedCharacter;\n if (vimGlobalState.registerController.isValidRegister(registerName)) {\n macroModeState.enterMacroRecordMode(cm, registerName);\n }\n },\n toggleOverwrite: function (cm) {\n if (!cm.state.overwrite) {\n cm.toggleOverwrite(true);\n cm.setOption('keyMap', 'vim-replace');\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"replace\" });\n }\n else {\n cm.toggleOverwrite(false);\n cm.setOption('keyMap', 'vim-insert');\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"insert\" });\n }\n },\n enterInsertMode: function (cm, actionArgs, vim) {\n if (cm.getOption('readOnly')) {\n return;\n }\n vim.insertMode = true;\n vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n var sel = vim.sel;\n var head = actionArgs.head || cm.getCursor('head');\n var height = cm.listSelections().length;\n if (insertAt == 'eol') {\n head = new Pos(head.line, lineLength(cm, head.line));\n }\n else if (insertAt == 'bol') {\n head = new Pos(head.line, 0);\n }\n else if (insertAt == 'charAfter') {\n var newPosition = updateSelectionForSurrogateCharacters(cm, head, offsetCursor(head, 0, 1));\n head = newPosition.end;\n }\n else if (insertAt == 'firstNonBlank') {\n var newPosition = updateSelectionForSurrogateCharacters(cm, head, motions.moveToFirstNonWhiteSpaceCharacter(cm, head));\n head = newPosition.end;\n }\n else if (insertAt == 'startOfSelectedArea') {\n if (!vim.visualMode)\n return;\n if (!vim.visualBlock) {\n if (sel.head.line < sel.anchor.line) {\n head = sel.head;\n }\n else {\n head = new Pos(sel.anchor.line, 0);\n }\n }\n else {\n head = new Pos(Math.min(sel.head.line, sel.anchor.line), Math.min(sel.head.ch, sel.anchor.ch));\n height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n }\n }\n else if (insertAt == 'endOfSelectedArea') {\n if (!vim.visualMode)\n return;\n if (!vim.visualBlock) {\n if (sel.head.line >= sel.anchor.line) {\n head = offsetCursor(sel.head, 0, 1);\n }\n else {\n head = new Pos(sel.anchor.line, 0);\n }\n }\n else {\n head = new Pos(Math.min(sel.head.line, sel.anchor.line), Math.max(sel.head.ch, sel.anchor.ch) + 1);\n height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n }\n }\n else if (insertAt == 'inplace') {\n if (vim.visualMode) {\n return;\n }\n }\n else if (insertAt == 'lastEdit') {\n head = getLastEditPos(cm) || head;\n }\n cm.setOption('disableInput', false);\n if (actionArgs && actionArgs.replace) {\n cm.toggleOverwrite(true);\n cm.setOption('keyMap', 'vim-replace');\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"replace\" });\n }\n else {\n cm.toggleOverwrite(false);\n cm.setOption('keyMap', 'vim-insert');\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"insert\" });\n }\n if (!vimGlobalState.macroModeState.isPlaying) {\n cm.on('change', onChange);\n if (vim.insertEnd)\n vim.insertEnd.clear();\n vim.insertEnd = cm.setBookmark(head, { insertLeft: true });\n CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n }\n if (vim.visualMode) {\n exitVisualMode(cm);\n }\n selectForInsert(cm, head, height);\n },\n toggleVisualMode: function (cm, actionArgs, vim) {\n var repeat = actionArgs.repeat;\n var anchor = cm.getCursor();\n var head;\n if (!vim.visualMode) {\n vim.visualMode = true;\n vim.visualLine = !!actionArgs.linewise;\n vim.visualBlock = !!actionArgs.blockwise;\n head = clipCursorToContent(cm, new Pos(anchor.line, anchor.ch + repeat - 1));\n var newPosition = updateSelectionForSurrogateCharacters(cm, anchor, head);\n vim.sel = {\n anchor: newPosition.start,\n head: newPosition.end\n };\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\" });\n updateCmSelection(cm);\n updateMark(cm, vim, '<', cursorMin(anchor, head));\n updateMark(cm, vim, '>', cursorMax(anchor, head));\n }\n else if (vim.visualLine ^ actionArgs.linewise ||\n vim.visualBlock ^ actionArgs.blockwise) {\n vim.visualLine = !!actionArgs.linewise;\n vim.visualBlock = !!actionArgs.blockwise;\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\" });\n updateCmSelection(cm);\n }\n else {\n exitVisualMode(cm);\n }\n },\n reselectLastSelection: function (cm, _actionArgs, vim) {\n var lastSelection = vim.lastSelection;\n if (vim.visualMode) {\n updateLastSelection(cm, vim);\n }\n if (lastSelection) {\n var anchor = lastSelection.anchorMark.find();\n var head = lastSelection.headMark.find();\n if (!anchor || !head) {\n return;\n }\n vim.sel = {\n anchor: anchor,\n head: head\n };\n vim.visualMode = true;\n vim.visualLine = lastSelection.visualLine;\n vim.visualBlock = lastSelection.visualBlock;\n updateCmSelection(cm);\n updateMark(cm, vim, '<', cursorMin(anchor, head));\n updateMark(cm, vim, '>', cursorMax(anchor, head));\n CodeMirror.signal(cm, 'vim-mode-change', {\n mode: 'visual',\n subMode: vim.visualLine ? 'linewise' :\n vim.visualBlock ? 'blockwise' : ''\n });\n }\n },\n joinLines: function (cm, actionArgs, vim) {\n var curStart, curEnd;\n if (vim.visualMode) {\n curStart = cm.getCursor('anchor');\n curEnd = cm.getCursor('head');\n if (cursorIsBefore(curEnd, curStart)) {\n var tmp = curEnd;\n curEnd = curStart;\n curStart = tmp;\n }\n curEnd.ch = lineLength(cm, curEnd.line) - 1;\n }\n else {\n var repeat = Math.max(actionArgs.repeat, 2);\n curStart = cm.getCursor();\n curEnd = clipCursorToContent(cm, new Pos(curStart.line + repeat - 1, Infinity));\n }\n var finalCh = 0;\n for (var i = curStart.line; i < curEnd.line; i++) {\n finalCh = lineLength(cm, curStart.line);\n var text = '';\n var nextStartCh = 0;\n if (!actionArgs.keepSpaces) {\n var nextLine = cm.getLine(curStart.line + 1);\n nextStartCh = nextLine.search(/\\S/);\n if (nextStartCh == -1) {\n nextStartCh = nextLine.length;\n }\n else {\n text = \" \";\n }\n }\n cm.replaceRange(text, new Pos(curStart.line, finalCh), new Pos(curStart.line + 1, nextStartCh));\n }\n var curFinalPos = clipCursorToContent(cm, new Pos(curStart.line, finalCh));\n if (vim.visualMode) {\n exitVisualMode(cm, false);\n }\n cm.setCursor(curFinalPos);\n },\n newLineAndEnterInsertMode: function (cm, actionArgs, vim) {\n vim.insertMode = true;\n var insertAt = copyCursor(cm.getCursor());\n if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n cm.replaceRange('\\n', new Pos(cm.firstLine(), 0));\n cm.setCursor(cm.firstLine(), 0);\n }\n else {\n insertAt.line = (actionArgs.after) ? insertAt.line :\n insertAt.line - 1;\n insertAt.ch = lineLength(cm, insertAt.line);\n cm.setCursor(insertAt);\n var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n CodeMirror.commands.newlineAndIndent;\n newlineFn(cm);\n }\n this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n },\n paste: function (cm, actionArgs, vim) {\n var _this = this;\n var register = vimGlobalState.registerController.getRegister(actionArgs.registerName);\n var fallback = function () {\n var text = register.toString();\n _this.continuePaste(cm, actionArgs, vim, text, register);\n };\n if (actionArgs.registerName === '+' &&\n typeof navigator !== 'undefined' &&\n typeof navigator.clipboard !== 'undefined' &&\n typeof navigator.clipboard.readText === 'function') {\n navigator.clipboard.readText().then(function (value) {\n _this.continuePaste(cm, actionArgs, vim, value, register);\n }, function () { fallback(); });\n }\n else {\n fallback();\n }\n },\n continuePaste: function (cm, actionArgs, vim, text, register) {\n var cur = copyCursor(cm.getCursor());\n if (!text) {\n return;\n }\n if (actionArgs.matchIndent) {\n var tabSize = cm.getOption(\"tabSize\");\n var whitespaceLength = function (str) {\n var tabs = (str.split(\"\\t\").length - 1);\n var spaces = (str.split(\" \").length - 1);\n return tabs * tabSize + spaces * 1;\n };\n var currentLine = cm.getLine(cm.getCursor().line);\n var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n var chompedText = text.replace(/\\n$/, '');\n var wasChomped = text !== chompedText;\n var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n var text = chompedText.replace(/^\\s*/gm, function (wspace) {\n var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n if (newIndent < 0) {\n return \"\";\n }\n else if (cm.getOption(\"indentWithTabs\")) {\n var quotient = Math.floor(newIndent / tabSize);\n return Array(quotient + 1).join('\\t');\n }\n else {\n return Array(newIndent + 1).join(' ');\n }\n });\n text += wasChomped ? \"\\n\" : \"\";\n }\n if (actionArgs.repeat > 1) {\n var text = Array(actionArgs.repeat + 1).join(text);\n }\n var linewise = register.linewise;\n var blockwise = register.blockwise;\n if (blockwise) {\n text = text.split('\\n');\n if (linewise) {\n text.pop();\n }\n for (var i = 0; i < text.length; i++) {\n text[i] = (text[i] == '') ? ' ' : text[i];\n }\n cur.ch += actionArgs.after ? 1 : 0;\n cur.ch = Math.min(lineLength(cm, cur.line), cur.ch);\n }\n else if (linewise) {\n if (vim.visualMode) {\n text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n }\n else if (actionArgs.after) {\n text = '\\n' + text.slice(0, text.length - 1);\n cur.ch = lineLength(cm, cur.line);\n }\n else {\n cur.ch = 0;\n }\n }\n else {\n cur.ch += actionArgs.after ? 1 : 0;\n }\n var curPosFinal;\n if (vim.visualMode) {\n vim.lastPastedText = text;\n var lastSelectionCurEnd;\n var selectedArea = getSelectedAreaRange(cm, vim);\n var selectionStart = selectedArea[0];\n var selectionEnd = selectedArea[1];\n var selectedText = cm.getSelection();\n var selections = cm.listSelections();\n var emptyStrings = new Array(selections.length).join('1').split('1');\n if (vim.lastSelection) {\n lastSelectionCurEnd = vim.lastSelection.headMark.find();\n }\n vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n if (blockwise) {\n cm.replaceSelections(emptyStrings);\n selectionEnd = new Pos(selectionStart.line + text.length - 1, selectionStart.ch);\n cm.setCursor(selectionStart);\n selectBlock(cm, selectionEnd);\n cm.replaceSelections(text);\n curPosFinal = selectionStart;\n }\n else if (vim.visualBlock) {\n cm.replaceSelections(emptyStrings);\n cm.setCursor(selectionStart);\n cm.replaceRange(text, selectionStart, selectionStart);\n curPosFinal = selectionStart;\n }\n else {\n cm.replaceRange(text, selectionStart, selectionEnd);\n curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n }\n if (lastSelectionCurEnd) {\n vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n }\n if (linewise) {\n curPosFinal.ch = 0;\n }\n }\n else {\n if (blockwise) {\n cm.setCursor(cur);\n for (var i = 0; i < text.length; i++) {\n var line = cur.line + i;\n if (line > cm.lastLine()) {\n cm.replaceRange('\\n', new Pos(line, 0));\n }\n var lastCh = lineLength(cm, line);\n if (lastCh < cur.ch) {\n extendLineToColumn(cm, line, cur.ch);\n }\n }\n cm.setCursor(cur);\n selectBlock(cm, new Pos(cur.line + text.length - 1, cur.ch));\n cm.replaceSelections(text);\n curPosFinal = cur;\n }\n else {\n cm.replaceRange(text, cur);\n if (linewise) {\n var line = actionArgs.after ? cur.line + 1 : cur.line;\n curPosFinal = new Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n }\n else {\n curPosFinal = copyCursor(cur);\n if (!/\\n/.test(text)) {\n curPosFinal.ch += text.length - (actionArgs.after ? 1 : 0);\n }\n }\n }\n }\n if (vim.visualMode) {\n exitVisualMode(cm, false);\n }\n cm.setCursor(curPosFinal);\n },\n undo: function (cm, actionArgs) {\n cm.operation(function () {\n repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n cm.setCursor(clipCursorToContent(cm, cm.getCursor('start')));\n });\n },\n redo: function (cm, actionArgs) {\n repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n },\n setRegister: function (_cm, actionArgs, vim) {\n vim.inputState.registerName = actionArgs.selectedCharacter;\n },\n insertRegister: function (cm, actionArgs, vim) {\n var registerName = actionArgs.selectedCharacter;\n var register = vimGlobalState.registerController.getRegister(registerName);\n var text = register && register.toString();\n if (text) {\n cm.replaceSelection(text);\n }\n },\n oneNormalCommand: function (cm, actionArgs, vim) {\n exitInsertMode(cm, true);\n vim.insertModeReturn = true;\n CodeMirror.on(cm, 'vim-command-done', function handler() {\n if (vim.visualMode)\n return;\n if (vim.insertModeReturn) {\n vim.insertModeReturn = false;\n if (!vim.insertMode) {\n actions.enterInsertMode(cm, {}, vim);\n }\n }\n CodeMirror.off(cm, 'vim-command-done', handler);\n });\n },\n setMark: function (cm, actionArgs, vim) {\n var markName = actionArgs.selectedCharacter;\n updateMark(cm, vim, markName, cm.getCursor());\n },\n replace: function (cm, actionArgs, vim) {\n var replaceWith = actionArgs.selectedCharacter;\n var curStart = cm.getCursor();\n var replaceTo;\n var curEnd;\n var selections = cm.listSelections();\n if (vim.visualMode) {\n curStart = cm.getCursor('start');\n curEnd = cm.getCursor('end');\n }\n else {\n var line = cm.getLine(curStart.line);\n replaceTo = curStart.ch + actionArgs.repeat;\n if (replaceTo > line.length) {\n replaceTo = line.length;\n }\n curEnd = new Pos(curStart.line, replaceTo);\n }\n var newPositions = updateSelectionForSurrogateCharacters(cm, curStart, curEnd);\n curStart = newPositions.start;\n curEnd = newPositions.end;\n if (replaceWith == '\\n') {\n if (!vim.visualMode)\n cm.replaceRange('', curStart, curEnd);\n (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n }\n else {\n var replaceWithStr = cm.getRange(curStart, curEnd);\n replaceWithStr = replaceWithStr.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, replaceWith);\n replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n if (vim.visualBlock) {\n var spaces = new Array(cm.getOption(\"tabSize\") + 1).join(' ');\n replaceWithStr = cm.getSelection();\n replaceWithStr = replaceWithStr.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, replaceWith);\n replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n cm.replaceSelections(replaceWithStr);\n }\n else {\n cm.replaceRange(replaceWithStr, curStart, curEnd);\n }\n if (vim.visualMode) {\n curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n selections[0].anchor : selections[0].head;\n cm.setCursor(curStart);\n exitVisualMode(cm, false);\n }\n else {\n cm.setCursor(offsetCursor(curEnd, 0, -1));\n }\n }\n },\n incrementNumberToken: function (cm, actionArgs) {\n var cur = cm.getCursor();\n var lineStr = cm.getLine(cur.line);\n var re = /(-?)(?:(0x)([\\da-f]+)|(0b|0|)(\\d+))/gi;\n var match;\n var start;\n var end;\n var numberStr;\n while ((match = re.exec(lineStr)) !== null) {\n start = match.index;\n end = start + match[0].length;\n if (cur.ch < end)\n break;\n }\n if (!actionArgs.backtrack && (end <= cur.ch))\n return;\n if (match) {\n var baseStr = match[2] || match[4];\n var digits = match[3] || match[5];\n var increment = actionArgs.increase ? 1 : -1;\n var base = { '0b': 2, '0': 8, '': 10, '0x': 16 }[baseStr.toLowerCase()];\n var number = parseInt(match[1] + digits, base) + (increment * actionArgs.repeat);\n numberStr = number.toString(base);\n var zeroPadding = baseStr ? new Array(digits.length - numberStr.length + 1 + match[1].length).join('0') : '';\n if (numberStr.charAt(0) === '-') {\n numberStr = '-' + baseStr + zeroPadding + numberStr.substr(1);\n }\n else {\n numberStr = baseStr + zeroPadding + numberStr;\n }\n var from = new Pos(cur.line, start);\n var to = new Pos(cur.line, end);\n cm.replaceRange(numberStr, from, to);\n }\n else {\n return;\n }\n cm.setCursor(new Pos(cur.line, start + numberStr.length - 1));\n },\n repeatLastEdit: function (cm, actionArgs, vim) {\n var lastEditInputState = vim.lastEditInputState;\n if (!lastEditInputState) {\n return;\n }\n var repeat = actionArgs.repeat;\n if (repeat && actionArgs.repeatIsExplicit) {\n vim.lastEditInputState.repeatOverride = repeat;\n }\n else {\n repeat = vim.lastEditInputState.repeatOverride || repeat;\n }\n repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n },\n indent: function (cm, actionArgs) {\n cm.indentLine(cm.getCursor().line, actionArgs.indentRight);\n },\n exitInsertMode: exitInsertMode\n};\nfunction defineAction(name, fn) {\n actions[name] = fn;\n}\nfunction clipCursorToContent(cm, cur, oldCur) {\n var vim = cm.state.vim;\n var includeLineBreak = vim.insertMode || vim.visualMode;\n var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine());\n var text = cm.getLine(line);\n var maxCh = text.length - 1 + Number(!!includeLineBreak);\n var ch = Math.min(Math.max(0, cur.ch), maxCh);\n var charCode = text.charCodeAt(ch);\n if (0xDC00 <= charCode && charCode <= 0xDFFF) {\n var direction = 1;\n if (oldCur && oldCur.line == line && oldCur.ch > ch) {\n direction = -1;\n }\n ch += direction;\n if (ch > maxCh)\n ch -= 2;\n }\n return new Pos(line, ch);\n}\nfunction copyArgs(args) {\n var ret = {};\n for (var prop in args) {\n if (args.hasOwnProperty(prop)) {\n ret[prop] = args[prop];\n }\n }\n return ret;\n}\nfunction offsetCursor(cur, offsetLine, offsetCh) {\n if (typeof offsetLine === 'object') {\n offsetCh = offsetLine.ch;\n offsetLine = offsetLine.line;\n }\n return new Pos(cur.line + offsetLine, cur.ch + offsetCh);\n}\nfunction commandMatches(keys, keyMap, context, inputState) {\n if (inputState.operator)\n context = \"operatorPending\";\n var match, partial = [], full = [];\n var startIndex = noremap ? keyMap.length - defaultKeymapLength : 0;\n for (var i = startIndex; i < keyMap.length; i++) {\n var command = keyMap[i];\n if (context == 'insert' && command.context != 'insert' ||\n (command.context && command.context != context) ||\n inputState.operator && command.type == 'action' ||\n !(match = commandMatch(keys, command.keys))) {\n continue;\n }\n if (match == 'partial') {\n partial.push(command);\n }\n if (match == 'full') {\n full.push(command);\n }\n }\n return {\n partial: partial.length && partial,\n full: full.length && full\n };\n}\nfunction commandMatch(pressed, mapped) {\n var isLastCharacter = mapped.slice(-11) == '';\n var isLastRegister = mapped.slice(-10) == '';\n if (isLastCharacter || isLastRegister) {\n var prefixLen = mapped.length - (isLastCharacter ? 11 : 10);\n var pressedPrefix = pressed.slice(0, prefixLen);\n var mappedPrefix = mapped.slice(0, prefixLen);\n return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n }\n else {\n return pressed == mapped ? 'full' :\n mapped.indexOf(pressed) == 0 ? 'partial' : false;\n }\n}\nfunction lastChar(keys) {\n var match = /^.*(<[^>]+>)$/.exec(keys);\n var selectedCharacter = match ? match[1] : keys.slice(-1);\n if (selectedCharacter.length > 1) {\n switch (selectedCharacter) {\n case '':\n selectedCharacter = '\\n';\n break;\n case '':\n selectedCharacter = ' ';\n break;\n default:\n selectedCharacter = '';\n break;\n }\n }\n return selectedCharacter;\n}\nfunction repeatFn(cm, fn, repeat) {\n return function () {\n for (var i = 0; i < repeat; i++) {\n fn(cm);\n }\n };\n}\nfunction copyCursor(cur) {\n return new Pos(cur.line, cur.ch);\n}\nfunction cursorEqual(cur1, cur2) {\n return cur1.ch == cur2.ch && cur1.line == cur2.line;\n}\nfunction cursorIsBefore(cur1, cur2) {\n if (cur1.line < cur2.line) {\n return true;\n }\n if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n return true;\n }\n return false;\n}\nfunction cursorMin(cur1, cur2) {\n if (arguments.length > 2) {\n cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n }\n return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n}\nfunction cursorMax(cur1, cur2) {\n if (arguments.length > 2) {\n cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n }\n return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n}\nfunction cursorIsBetween(cur1, cur2, cur3) {\n var cur1before2 = cursorIsBefore(cur1, cur2);\n var cur2before3 = cursorIsBefore(cur2, cur3);\n return cur1before2 && cur2before3;\n}\nfunction lineLength(cm, lineNum) {\n return cm.getLine(lineNum).length;\n}\nfunction trim(s) {\n if (s.trim) {\n return s.trim();\n }\n return s.replace(/^\\s+|\\s+$/g, '');\n}\nfunction escapeRegex(s) {\n return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n}\nfunction extendLineToColumn(cm, lineNum, column) {\n var endCh = lineLength(cm, lineNum);\n var spaces = new Array(column - endCh + 1).join(' ');\n cm.setCursor(new Pos(lineNum, endCh));\n cm.replaceRange(spaces, cm.getCursor());\n}\nfunction selectBlock(cm, selectionEnd) {\n var selections = [], ranges = cm.listSelections();\n var head = copyCursor(cm.clipPos(selectionEnd));\n var isClipped = !cursorEqual(selectionEnd, head);\n var curHead = cm.getCursor('head');\n var primIndex = getIndex(ranges, curHead);\n var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n var max = ranges.length - 1;\n var index = max - primIndex > primIndex ? max : 0;\n var base = ranges[index].anchor;\n var firstLine = Math.min(base.line, head.line);\n var lastLine = Math.max(base.line, head.line);\n var baseCh = base.ch, headCh = head.ch;\n var dir = ranges[index].head.ch - baseCh;\n var newDir = headCh - baseCh;\n if (dir > 0 && newDir <= 0) {\n baseCh++;\n if (!isClipped) {\n headCh--;\n }\n }\n else if (dir < 0 && newDir >= 0) {\n baseCh--;\n if (!wasClipped) {\n headCh++;\n }\n }\n else if (dir < 0 && newDir == -1) {\n baseCh--;\n headCh++;\n }\n for (var line = firstLine; line <= lastLine; line++) {\n var range = { anchor: new Pos(line, baseCh), head: new Pos(line, headCh) };\n selections.push(range);\n }\n cm.setSelections(selections);\n selectionEnd.ch = headCh;\n base.ch = baseCh;\n return base;\n}\nfunction selectForInsert(cm, head, height) {\n var sel = [];\n for (var i = 0; i < height; i++) {\n var lineHead = offsetCursor(head, i, 0);\n sel.push({ anchor: lineHead, head: lineHead });\n }\n cm.setSelections(sel, 0);\n}\nfunction getIndex(ranges, cursor, end) {\n for (var i = 0; i < ranges.length; i++) {\n var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n if (atAnchor || atHead) {\n return i;\n }\n }\n return -1;\n}\nfunction getSelectedAreaRange(cm, vim) {\n var lastSelection = vim.lastSelection;\n var getCurrentSelectedAreaRange = function () {\n var selections = cm.listSelections();\n var start = selections[0];\n var end = selections[selections.length - 1];\n var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n return [selectionStart, selectionEnd];\n };\n var getLastSelectedAreaRange = function () {\n var selectionStart = cm.getCursor();\n var selectionEnd = cm.getCursor();\n var block = lastSelection.visualBlock;\n if (block) {\n var width = block.width;\n var height = block.height;\n selectionEnd = new Pos(selectionStart.line + height, selectionStart.ch + width);\n var selections = [];\n for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n var anchor = new Pos(i, selectionStart.ch);\n var head = new Pos(i, selectionEnd.ch);\n var range = { anchor: anchor, head: head };\n selections.push(range);\n }\n cm.setSelections(selections);\n }\n else {\n var start = lastSelection.anchorMark.find();\n var end = lastSelection.headMark.find();\n var line = end.line - start.line;\n var ch = end.ch - start.ch;\n selectionEnd = { line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch };\n if (lastSelection.visualLine) {\n selectionStart = new Pos(selectionStart.line, 0);\n selectionEnd = new Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n }\n cm.setSelection(selectionStart, selectionEnd);\n }\n return [selectionStart, selectionEnd];\n };\n if (!vim.visualMode) {\n return getLastSelectedAreaRange();\n }\n else {\n return getCurrentSelectedAreaRange();\n }\n}\nfunction updateLastSelection(cm, vim) {\n var anchor = vim.sel.anchor;\n var head = vim.sel.head;\n if (vim.lastPastedText) {\n head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n vim.lastPastedText = null;\n }\n vim.lastSelection = { 'anchorMark': cm.setBookmark(anchor),\n 'headMark': cm.setBookmark(head),\n 'anchor': copyCursor(anchor),\n 'head': copyCursor(head),\n 'visualMode': vim.visualMode,\n 'visualLine': vim.visualLine,\n 'visualBlock': vim.visualBlock };\n}\nfunction expandSelection(cm, start, end, move) {\n var sel = cm.state.vim.sel;\n var head = move ? start : sel.head;\n var anchor = move ? start : sel.anchor;\n var tmp;\n if (cursorIsBefore(end, start)) {\n tmp = end;\n end = start;\n start = tmp;\n }\n if (cursorIsBefore(head, anchor)) {\n head = cursorMin(start, head);\n anchor = cursorMax(anchor, end);\n }\n else {\n anchor = cursorMin(start, anchor);\n head = cursorMax(head, end);\n head = offsetCursor(head, 0, -1);\n if (head.ch == -1 && head.line != cm.firstLine()) {\n head = new Pos(head.line - 1, lineLength(cm, head.line - 1));\n }\n }\n return [anchor, head];\n}\nfunction updateCmSelection(cm, sel, mode) {\n var vim = cm.state.vim;\n sel = sel || vim.sel;\n var mode = mode ||\n vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n var cmSel = makeCmSelection(cm, sel, mode);\n cm.setSelections(cmSel.ranges, cmSel.primary);\n}\nfunction makeCmSelection(cm, sel, mode, exclusive) {\n var head = copyCursor(sel.head);\n var anchor = copyCursor(sel.anchor);\n if (mode == 'char') {\n var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n head = offsetCursor(sel.head, 0, headOffset);\n anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n return {\n ranges: [{ anchor: anchor, head: head }],\n primary: 0\n };\n }\n else if (mode == 'line') {\n if (!cursorIsBefore(sel.head, sel.anchor)) {\n anchor.ch = 0;\n var lastLine = cm.lastLine();\n if (head.line > lastLine) {\n head.line = lastLine;\n }\n head.ch = lineLength(cm, head.line);\n }\n else {\n head.ch = 0;\n anchor.ch = lineLength(cm, anchor.line);\n }\n return {\n ranges: [{ anchor: anchor, head: head }],\n primary: 0\n };\n }\n else if (mode == 'block') {\n var top = Math.min(anchor.line, head.line), fromCh = anchor.ch, bottom = Math.max(anchor.line, head.line), toCh = head.ch;\n if (fromCh < toCh) {\n toCh += 1;\n }\n else {\n fromCh += 1;\n }\n ;\n var height = bottom - top + 1;\n var primary = head.line == top ? 0 : height - 1;\n var ranges = [];\n for (var i = 0; i < height; i++) {\n ranges.push({\n anchor: new Pos(top + i, fromCh),\n head: new Pos(top + i, toCh)\n });\n }\n return {\n ranges: ranges,\n primary: primary\n };\n }\n}\nfunction getHead(cm) {\n var cur = cm.getCursor('head');\n if (cm.getSelection().length == 1) {\n cur = cursorMin(cur, cm.getCursor('anchor'));\n }\n return cur;\n}\nfunction exitVisualMode(cm, moveHead) {\n var vim = cm.state.vim;\n if (moveHead !== false) {\n cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n }\n updateLastSelection(cm, vim);\n vim.visualMode = false;\n vim.visualLine = false;\n vim.visualBlock = false;\n if (!vim.insertMode)\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n}\nfunction clipToLine(cm, curStart, curEnd) {\n var selection = cm.getRange(curStart, curEnd);\n if (/\\n\\s*$/.test(selection)) {\n var lines = selection.split('\\n');\n lines.pop();\n var line;\n for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n curEnd.line--;\n curEnd.ch = 0;\n }\n if (line) {\n curEnd.line--;\n curEnd.ch = lineLength(cm, curEnd.line);\n }\n else {\n curEnd.ch = 0;\n }\n }\n}\nfunction expandSelectionToLine(_cm, curStart, curEnd) {\n curStart.ch = 0;\n curEnd.ch = 0;\n curEnd.line++;\n}\nfunction findFirstNonWhiteSpaceCharacter(text) {\n if (!text) {\n return 0;\n }\n var firstNonWS = text.search(/\\S/);\n return firstNonWS == -1 ? text.length : firstNonWS;\n}\nfunction expandWordUnderCursor(cm, _a, cursor) {\n var inclusive = _a.inclusive, innerWord = _a.innerWord, bigWord = _a.bigWord, noSymbol = _a.noSymbol, multiline = _a.multiline;\n var cur = cursor || getHead(cm);\n var line = cm.getLine(cur.line);\n var endLine = line;\n var startLineNumber = cur.line;\n var endLineNumber = startLineNumber;\n var idx = cur.ch;\n var wordOnNextLine;\n var test = noSymbol ? wordCharTest[0] : bigWordCharTest[0];\n if (innerWord && /\\s/.test(line.charAt(idx))) {\n test = function (ch) { return /\\s/.test(ch); };\n }\n else {\n while (!test(line.charAt(idx))) {\n idx++;\n if (idx >= line.length) {\n if (!multiline)\n return null;\n idx--;\n wordOnNextLine = findWord(cm, cur, true, bigWord, true);\n break;\n }\n }\n if (bigWord) {\n test = bigWordCharTest[0];\n }\n else {\n test = wordCharTest[0];\n if (!test(line.charAt(idx))) {\n test = wordCharTest[1];\n }\n }\n }\n var end = idx, start = idx;\n while (test(line.charAt(start)) && start >= 0) {\n start--;\n }\n start++;\n if (wordOnNextLine) {\n end = wordOnNextLine.to;\n endLineNumber = wordOnNextLine.line;\n endLine = cm.getLine(endLineNumber);\n if (!endLine && end == 0)\n end++;\n }\n else {\n while (test(line.charAt(end)) && end < line.length) {\n end++;\n }\n }\n if (inclusive) {\n var wordEnd = end;\n var startsWithSpace = cur.ch <= start && /\\s/.test(line.charAt(cur.ch));\n if (!startsWithSpace) {\n while (/\\s/.test(endLine.charAt(end)) && end < endLine.length) {\n end++;\n }\n }\n if (wordEnd == end || startsWithSpace) {\n var wordStart = start;\n while (/\\s/.test(line.charAt(start - 1)) && start > 0) {\n start--;\n }\n if (!start && !startsWithSpace) {\n start = wordStart;\n }\n }\n }\n return { start: new Pos(startLineNumber, start), end: new Pos(endLineNumber, end) };\n}\nfunction expandTagUnderCursor(cm, head, inclusive) {\n var cur = head;\n if (!CodeMirror.findMatchingTag || !CodeMirror.findEnclosingTag) {\n return { start: cur, end: cur };\n }\n var tags = CodeMirror.findMatchingTag(cm, head) || CodeMirror.findEnclosingTag(cm, head);\n if (!tags || !tags.open || !tags.close) {\n return { start: cur, end: cur };\n }\n if (inclusive) {\n return { start: tags.open.from, end: tags.close.to };\n }\n return { start: tags.open.to, end: tags.close.from };\n}\nfunction recordJumpPosition(cm, oldCur, newCur) {\n if (!cursorEqual(oldCur, newCur)) {\n vimGlobalState.jumpList.add(cm, oldCur, newCur);\n }\n}\nfunction recordLastCharacterSearch(increment, args) {\n vimGlobalState.lastCharacterSearch.increment = increment;\n vimGlobalState.lastCharacterSearch.forward = args.forward;\n vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;\n}\nvar symbolToMode = {\n '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n '[': 'section', ']': 'section',\n '*': 'comment', '/': 'comment',\n 'm': 'method', 'M': 'method',\n '#': 'preprocess'\n};\nvar findSymbolModes = {\n bracket: {\n isComplete: function (state) {\n if (state.nextCh === state.symb) {\n state.depth++;\n if (state.depth >= 1)\n return true;\n }\n else if (state.nextCh === state.reverseSymb) {\n state.depth--;\n }\n return false;\n }\n },\n section: {\n init: function (state) {\n state.curMoveThrough = true;\n state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n },\n isComplete: function (state) {\n return state.index === 0 && state.nextCh === state.symb;\n }\n },\n comment: {\n isComplete: function (state) {\n var found = state.lastCh === '*' && state.nextCh === '/';\n state.lastCh = state.nextCh;\n return found;\n }\n },\n method: {\n init: function (state) {\n state.symb = (state.symb === 'm' ? '{' : '}');\n state.reverseSymb = state.symb === '{' ? '}' : '{';\n },\n isComplete: function (state) {\n if (state.nextCh === state.symb)\n return true;\n return false;\n }\n },\n preprocess: {\n init: function (state) {\n state.index = 0;\n },\n isComplete: function (state) {\n if (state.nextCh === '#') {\n var token = state.lineText.match(/^#(\\w+)/)[1];\n if (token === 'endif') {\n if (state.forward && state.depth === 0) {\n return true;\n }\n state.depth++;\n }\n else if (token === 'if') {\n if (!state.forward && state.depth === 0) {\n return true;\n }\n state.depth--;\n }\n if (token === 'else' && state.depth === 0)\n return true;\n }\n return false;\n }\n }\n};\nfunction findSymbol(cm, repeat, forward, symb) {\n var cur = copyCursor(cm.getCursor());\n var increment = forward ? 1 : -1;\n var endLine = forward ? cm.lineCount() : -1;\n var curCh = cur.ch;\n var line = cur.line;\n var lineText = cm.getLine(line);\n var state = {\n lineText: lineText,\n nextCh: lineText.charAt(curCh),\n lastCh: null,\n index: curCh,\n symb: symb,\n reverseSymb: (forward ? { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n forward: forward,\n depth: 0,\n curMoveThrough: false\n };\n var mode = symbolToMode[symb];\n if (!mode)\n return cur;\n var init = findSymbolModes[mode].init;\n var isComplete = findSymbolModes[mode].isComplete;\n if (init) {\n init(state);\n }\n while (line !== endLine && repeat) {\n state.index += increment;\n state.nextCh = state.lineText.charAt(state.index);\n if (!state.nextCh) {\n line += increment;\n state.lineText = cm.getLine(line) || '';\n if (increment > 0) {\n state.index = 0;\n }\n else {\n var lineLen = state.lineText.length;\n state.index = (lineLen > 0) ? (lineLen - 1) : 0;\n }\n state.nextCh = state.lineText.charAt(state.index);\n }\n if (isComplete(state)) {\n cur.line = line;\n cur.ch = state.index;\n repeat--;\n }\n }\n if (state.nextCh || state.curMoveThrough) {\n return new Pos(line, state.index);\n }\n return cur;\n}\nfunction findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n var lineNum = cur.line;\n var pos = cur.ch;\n var line = cm.getLine(lineNum);\n var dir = forward ? 1 : -1;\n var charTests = bigWord ? bigWordCharTest : wordCharTest;\n if (emptyLineIsWord && line == '') {\n lineNum += dir;\n line = cm.getLine(lineNum);\n if (!isLine(cm, lineNum)) {\n return null;\n }\n pos = (forward) ? 0 : line.length;\n }\n while (true) {\n if (emptyLineIsWord && line == '') {\n return { from: 0, to: 0, line: lineNum };\n }\n var stop = (dir > 0) ? line.length : -1;\n var wordStart = stop, wordEnd = stop;\n while (pos != stop) {\n var foundWord = false;\n for (var i = 0; i < charTests.length && !foundWord; ++i) {\n if (charTests[i](line.charAt(pos))) {\n wordStart = pos;\n while (pos != stop && charTests[i](line.charAt(pos))) {\n pos += dir;\n }\n wordEnd = pos;\n foundWord = wordStart != wordEnd;\n if (wordStart == cur.ch && lineNum == cur.line &&\n wordEnd == wordStart + dir) {\n continue;\n }\n else {\n return {\n from: Math.min(wordStart, wordEnd + 1),\n to: Math.max(wordStart, wordEnd),\n line: lineNum\n };\n }\n }\n }\n if (!foundWord) {\n pos += dir;\n }\n }\n lineNum += dir;\n if (!isLine(cm, lineNum)) {\n return null;\n }\n line = cm.getLine(lineNum);\n pos = (dir > 0) ? 0 : line.length;\n }\n}\nfunction moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n var curStart = copyCursor(cur);\n var words = [];\n if (forward && !wordEnd || !forward && wordEnd) {\n repeat++;\n }\n var emptyLineIsWord = !(forward && wordEnd);\n for (var i = 0; i < repeat; i++) {\n var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n if (!word) {\n var eodCh = lineLength(cm, cm.lastLine());\n words.push(forward\n ? { line: cm.lastLine(), from: eodCh, to: eodCh }\n : { line: 0, from: 0, to: 0 });\n break;\n }\n words.push(word);\n cur = new Pos(word.line, forward ? (word.to - 1) : word.from);\n }\n var shortCircuit = words.length != repeat;\n var firstWord = words[0];\n var lastWord = words.pop();\n if (forward && !wordEnd) {\n if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n lastWord = words.pop();\n }\n return new Pos(lastWord.line, lastWord.from);\n }\n else if (forward && wordEnd) {\n return new Pos(lastWord.line, lastWord.to - 1);\n }\n else if (!forward && wordEnd) {\n if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n lastWord = words.pop();\n }\n return new Pos(lastWord.line, lastWord.to);\n }\n else {\n return new Pos(lastWord.line, lastWord.from);\n }\n}\nfunction moveToEol(cm, head, motionArgs, vim, keepHPos) {\n var cur = head;\n var retval = new Pos(cur.line + motionArgs.repeat - 1, Infinity);\n var end = cm.clipPos(retval);\n end.ch--;\n if (!keepHPos) {\n vim.lastHPos = Infinity;\n vim.lastHSPos = cm.charCoords(end, 'div').left;\n }\n return retval;\n}\nfunction moveToCharacter(cm, repeat, forward, character, head) {\n var cur = head || cm.getCursor();\n var start = cur.ch;\n var idx;\n for (var i = 0; i < repeat; i++) {\n var line = cm.getLine(cur.line);\n idx = charIdxInLine(start, line, character, forward, true);\n if (idx == -1) {\n return null;\n }\n start = idx;\n }\n return new Pos(cm.getCursor().line, idx);\n}\nfunction moveToColumn(cm, repeat) {\n var line = cm.getCursor().line;\n return clipCursorToContent(cm, new Pos(line, repeat - 1));\n}\nfunction updateMark(cm, vim, markName, pos) {\n if (!inArray(markName, validMarks) && !latinCharRegex.test(markName)) {\n return;\n }\n if (vim.marks[markName]) {\n vim.marks[markName].clear();\n }\n vim.marks[markName] = cm.setBookmark(pos);\n}\nfunction charIdxInLine(start, line, character, forward, includeChar) {\n var idx;\n if (forward) {\n idx = line.indexOf(character, start + 1);\n if (idx != -1 && !includeChar) {\n idx -= 1;\n }\n }\n else {\n idx = line.lastIndexOf(character, start - 1);\n if (idx != -1 && !includeChar) {\n idx += 1;\n }\n }\n return idx;\n}\nfunction findParagraph(cm, head, repeat, dir, inclusive) {\n var line = head.line;\n var min = cm.firstLine();\n var max = cm.lastLine();\n var start, end, i = line;\n function isEmpty(i) { return !/\\S/.test(cm.getLine(i)); } // ace_patch\n function isBoundary(i, dir, any) {\n if (any) {\n return isEmpty(i) != isEmpty(i + dir);\n }\n return !isEmpty(i) && isEmpty(i + dir);\n }\n function skipFold(i) {\n dir = dir > 0 ? 1 : -1;\n var foldLine = cm.ace.session.getFoldLine(i);\n if (foldLine) {\n if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)\n dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;\n }\n }\n if (dir) {\n while (min <= i && i <= max && repeat > 0) {\n skipFold(i);\n if (isBoundary(i, dir)) {\n repeat--;\n }\n i += dir;\n }\n return new Pos(i, 0);\n }\n var vim = cm.state.vim;\n if (vim.visualLine && isBoundary(line, 1, true)) {\n var anchor = vim.sel.anchor;\n if (isBoundary(anchor.line, -1, true)) {\n if (!inclusive || anchor.line != line) {\n line += 1;\n }\n }\n }\n var startState = isEmpty(line);\n for (i = line; i <= max && repeat; i++) {\n if (isBoundary(i, 1, true)) {\n if (!inclusive || isEmpty(i) != startState) {\n repeat--;\n }\n }\n }\n end = new Pos(i, 0);\n if (i > max && !startState) {\n startState = true;\n }\n else {\n inclusive = false;\n }\n for (i = line; i > min; i--) {\n if (!inclusive || isEmpty(i) == startState || i == line) {\n if (isBoundary(i, -1, true)) {\n break;\n }\n }\n }\n start = new Pos(i, 0);\n return { start: start, end: end };\n}\nfunction getSentence(cm, cur, repeat, dir, inclusive /*includes whitespace*/) {\n function nextChar(curr) {\n if (curr.pos + curr.dir < 0 || curr.pos + curr.dir >= curr.line.length) {\n curr.line = null;\n }\n else {\n curr.pos += curr.dir;\n }\n }\n function forward(cm, ln, pos, dir) {\n var line = cm.getLine(ln);\n var curr = {\n line: line,\n ln: ln,\n pos: pos,\n dir: dir,\n };\n if (curr.line === \"\") {\n return { ln: curr.ln, pos: curr.pos };\n }\n var lastSentencePos = curr.pos;\n nextChar(curr);\n while (curr.line !== null) {\n lastSentencePos = curr.pos;\n if (isEndOfSentenceSymbol(curr.line[curr.pos])) {\n if (!inclusive) {\n return { ln: curr.ln, pos: curr.pos + 1 };\n }\n else {\n nextChar(curr);\n while (curr.line !== null) {\n if (isWhiteSpaceString(curr.line[curr.pos])) {\n lastSentencePos = curr.pos;\n nextChar(curr);\n }\n else {\n break;\n }\n }\n return { ln: curr.ln, pos: lastSentencePos + 1 };\n }\n }\n nextChar(curr);\n }\n return { ln: curr.ln, pos: lastSentencePos + 1 };\n }\n function reverse(cm, ln, pos, dir) {\n var line = cm.getLine(ln);\n var curr = {\n line: line,\n ln: ln,\n pos: pos,\n dir: dir,\n };\n if (curr.line === \"\") {\n return { ln: curr.ln, pos: curr.pos };\n }\n var lastSentencePos = curr.pos;\n nextChar(curr);\n while (curr.line !== null) {\n if (!isWhiteSpaceString(curr.line[curr.pos]) && !isEndOfSentenceSymbol(curr.line[curr.pos])) {\n lastSentencePos = curr.pos;\n }\n else if (isEndOfSentenceSymbol(curr.line[curr.pos])) {\n if (!inclusive) {\n return { ln: curr.ln, pos: lastSentencePos };\n }\n else {\n if (isWhiteSpaceString(curr.line[curr.pos + 1])) {\n return { ln: curr.ln, pos: curr.pos + 1 };\n }\n else {\n return { ln: curr.ln, pos: lastSentencePos };\n }\n }\n }\n nextChar(curr);\n }\n curr.line = line;\n if (inclusive && isWhiteSpaceString(curr.line[curr.pos])) {\n return { ln: curr.ln, pos: curr.pos };\n }\n else {\n return { ln: curr.ln, pos: lastSentencePos };\n }\n }\n var curr_index = {\n ln: cur.line,\n pos: cur.ch,\n };\n while (repeat > 0) {\n if (dir < 0) {\n curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir);\n }\n else {\n curr_index = forward(cm, curr_index.ln, curr_index.pos, dir);\n }\n repeat--;\n }\n return new Pos(curr_index.ln, curr_index.pos);\n}\nfunction findSentence(cm, cur, repeat, dir) {\n function nextChar(cm, idx) {\n if (idx.pos + idx.dir < 0 || idx.pos + idx.dir >= idx.line.length) {\n idx.ln += idx.dir;\n if (!isLine(cm, idx.ln)) {\n idx.line = null;\n idx.ln = null;\n idx.pos = null;\n return;\n }\n idx.line = cm.getLine(idx.ln);\n idx.pos = (idx.dir > 0) ? 0 : idx.line.length - 1;\n }\n else {\n idx.pos += idx.dir;\n }\n }\n function forward(cm, ln, pos, dir) {\n var line = cm.getLine(ln);\n var stop = (line === \"\");\n var curr = {\n line: line,\n ln: ln,\n pos: pos,\n dir: dir,\n };\n var last_valid = {\n ln: curr.ln,\n pos: curr.pos,\n };\n var skip_empty_lines = (curr.line === \"\");\n nextChar(cm, curr);\n while (curr.line !== null) {\n last_valid.ln = curr.ln;\n last_valid.pos = curr.pos;\n if (curr.line === \"\" && !skip_empty_lines) {\n return { ln: curr.ln, pos: curr.pos, };\n }\n else if (stop && curr.line !== \"\" && !isWhiteSpaceString(curr.line[curr.pos])) {\n return { ln: curr.ln, pos: curr.pos, };\n }\n else if (isEndOfSentenceSymbol(curr.line[curr.pos])\n && !stop\n && (curr.pos === curr.line.length - 1\n || isWhiteSpaceString(curr.line[curr.pos + 1]))) {\n stop = true;\n }\n nextChar(cm, curr);\n }\n var line = cm.getLine(last_valid.ln);\n last_valid.pos = 0;\n for (var i = line.length - 1; i >= 0; --i) {\n if (!isWhiteSpaceString(line[i])) {\n last_valid.pos = i;\n break;\n }\n }\n return last_valid;\n }\n function reverse(cm, ln, pos, dir) {\n var line = cm.getLine(ln);\n var curr = {\n line: line,\n ln: ln,\n pos: pos,\n dir: dir,\n };\n var last_valid = {\n ln: curr.ln,\n pos: null,\n };\n var skip_empty_lines = (curr.line === \"\");\n nextChar(cm, curr);\n while (curr.line !== null) {\n if (curr.line === \"\" && !skip_empty_lines) {\n if (last_valid.pos !== null) {\n return last_valid;\n }\n else {\n return { ln: curr.ln, pos: curr.pos };\n }\n }\n else if (isEndOfSentenceSymbol(curr.line[curr.pos])\n && last_valid.pos !== null\n && !(curr.ln === last_valid.ln && curr.pos + 1 === last_valid.pos)) {\n return last_valid;\n }\n else if (curr.line !== \"\" && !isWhiteSpaceString(curr.line[curr.pos])) {\n skip_empty_lines = false;\n last_valid = { ln: curr.ln, pos: curr.pos };\n }\n nextChar(cm, curr);\n }\n var line = cm.getLine(last_valid.ln);\n last_valid.pos = 0;\n for (var i = 0; i < line.length; ++i) {\n if (!isWhiteSpaceString(line[i])) {\n last_valid.pos = i;\n break;\n }\n }\n return last_valid;\n }\n var curr_index = {\n ln: cur.line,\n pos: cur.ch,\n };\n while (repeat > 0) {\n if (dir < 0) {\n curr_index = reverse(cm, curr_index.ln, curr_index.pos, dir);\n }\n else {\n curr_index = forward(cm, curr_index.ln, curr_index.pos, dir);\n }\n repeat--;\n }\n return new Pos(curr_index.ln, curr_index.pos);\n}\nfunction selectCompanionObject(cm, head, symb, inclusive) {\n var cur = head, start, end;\n var bracketRegexp = ({\n '(': /[()]/, ')': /[()]/,\n '[': /[[\\]]/, ']': /[[\\]]/,\n '{': /[{}]/, '}': /[{}]/,\n '<': /[<>]/, '>': /[<>]/\n })[symb];\n var openSym = ({\n '(': '(', ')': '(',\n '[': '[', ']': '[',\n '{': '{', '}': '{',\n '<': '<', '>': '<'\n })[symb];\n var curChar = cm.getLine(cur.line).charAt(cur.ch);\n var offset = curChar === openSym ? 1 : 0;\n start = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), -1, undefined, { 'bracketRegex': bracketRegexp });\n end = cm.scanForBracket(new Pos(cur.line, cur.ch + offset), 1, undefined, { 'bracketRegex': bracketRegexp });\n if (!start || !end)\n return null;\n start = start.pos;\n end = end.pos;\n if ((start.line == end.line && start.ch > end.ch)\n || (start.line > end.line)) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n if (inclusive) {\n end.ch += 1;\n }\n else {\n start.ch += 1;\n }\n return { start: start, end: end };\n}\nfunction findBeginningAndEnd(cm, head, symb, inclusive) {\n var cur = copyCursor(head);\n var line = cm.getLine(cur.line);\n var chars = line.split('');\n var start, end, i, len;\n var firstIndex = chars.indexOf(symb);\n if (cur.ch < firstIndex) {\n cur.ch = firstIndex;\n }\n else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n var stringAfter = /string/.test(cm.getTokenTypeAt(offsetCursor(head, 0, 1)));\n var stringBefore = /string/.test(cm.getTokenTypeAt(head));\n var isStringStart = stringAfter && !stringBefore;\n if (!isStringStart) {\n end = cur.ch; // assign end to the current cursor\n --cur.ch; // make sure to look backwards\n }\n }\n if (chars[cur.ch] == symb && !end) {\n start = cur.ch + 1; // assign start to ahead of the cursor\n }\n else {\n for (i = cur.ch; i > -1 && !start; i--) {\n if (chars[i] == symb) {\n start = i + 1;\n }\n }\n }\n if (start && !end) {\n for (i = start, len = chars.length; i < len && !end; i++) {\n if (chars[i] == symb) {\n end = i;\n }\n }\n }\n if (!start || !end) {\n return { start: cur, end: cur };\n }\n if (inclusive) {\n --start;\n ++end;\n }\n return {\n start: new Pos(cur.line, start),\n end: new Pos(cur.line, end)\n };\n}\ndefineOption('pcre', true, 'boolean');\nfunction SearchState() { }\nSearchState.prototype = {\n getQuery: function () {\n return vimGlobalState.query;\n },\n setQuery: function (query) {\n vimGlobalState.query = query;\n },\n getOverlay: function () {\n return this.searchOverlay;\n },\n setOverlay: function (overlay) {\n this.searchOverlay = overlay;\n },\n isReversed: function () {\n return vimGlobalState.isReversed;\n },\n setReversed: function (reversed) {\n vimGlobalState.isReversed = reversed;\n },\n getScrollbarAnnotate: function () {\n return this.annotate;\n },\n setScrollbarAnnotate: function (annotate) {\n this.annotate = annotate;\n }\n};\nfunction getSearchState(cm) {\n var vim = cm.state.vim;\n return vim.searchState_ || (vim.searchState_ = new SearchState());\n}\nfunction splitBySlash(argString) {\n return splitBySeparator(argString, '/');\n}\nfunction findUnescapedSlashes(argString) {\n return findUnescapedSeparators(argString, '/');\n}\nfunction splitBySeparator(argString, separator) {\n var slashes = findUnescapedSeparators(argString, separator) || [];\n if (!slashes.length)\n return [];\n var tokens = [];\n if (slashes[0] !== 0)\n return;\n for (var i = 0; i < slashes.length; i++) {\n if (typeof slashes[i] == 'number')\n tokens.push(argString.substring(slashes[i] + 1, slashes[i + 1]));\n }\n return tokens;\n}\nfunction findUnescapedSeparators(str, separator) {\n if (!separator)\n separator = '/';\n var escapeNextChar = false;\n var slashes = [];\n for (var i = 0; i < str.length; i++) {\n var c = str.charAt(i);\n if (!escapeNextChar && c == separator) {\n slashes.push(i);\n }\n escapeNextChar = !escapeNextChar && (c == '\\\\');\n }\n return slashes;\n}\nfunction translateRegex(str) {\n var specials = '|(){';\n var unescape = '}';\n var escapeNextChar = false;\n var out = [];\n for (var i = -1; i < str.length; i++) {\n var c = str.charAt(i) || '';\n var n = str.charAt(i + 1) || '';\n var specialComesNext = (n && specials.indexOf(n) != -1);\n if (escapeNextChar) {\n if (c !== '\\\\' || !specialComesNext) {\n out.push(c);\n }\n escapeNextChar = false;\n }\n else {\n if (c === '\\\\') {\n escapeNextChar = true;\n if (n && unescape.indexOf(n) != -1) {\n specialComesNext = true;\n }\n if (!specialComesNext || n === '\\\\') {\n out.push(c);\n }\n }\n else {\n out.push(c);\n if (specialComesNext && n !== '\\\\') {\n out.push('\\\\');\n }\n }\n }\n }\n return out.join('');\n}\nvar charUnescapes = { '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t' };\nfunction translateRegexReplace(str) {\n var escapeNextChar = false;\n var out = [];\n for (var i = -1; i < str.length; i++) {\n var c = str.charAt(i) || '';\n var n = str.charAt(i + 1) || '';\n if (charUnescapes[c + n]) {\n out.push(charUnescapes[c + n]);\n i++;\n }\n else if (escapeNextChar) {\n out.push(c);\n escapeNextChar = false;\n }\n else {\n if (c === '\\\\') {\n escapeNextChar = true;\n if ((isNumber(n) || n === '$')) {\n out.push('$');\n }\n else if (n !== '/' && n !== '\\\\') {\n out.push('\\\\');\n }\n }\n else {\n if (c === '$') {\n out.push('$');\n }\n out.push(c);\n if (n === '/') {\n out.push('\\\\');\n }\n }\n }\n }\n return out.join('');\n}\nvar unescapes = { '\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t', '\\\\&': '&' };\nfunction unescapeRegexReplace(str) {\n var stream = new CodeMirror.StringStream(str);\n var output = [];\n while (!stream.eol()) {\n while (stream.peek() && stream.peek() != '\\\\') {\n output.push(stream.next());\n }\n var matched = false;\n for (var matcher in unescapes) {\n if (stream.match(matcher, true)) {\n matched = true;\n output.push(unescapes[matcher]);\n break;\n }\n }\n if (!matched) {\n output.push(stream.next());\n }\n }\n return output.join('');\n}\nfunction parseQuery(query, ignoreCase, smartCase) {\n var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n lastSearchRegister.setText(query);\n if (query instanceof RegExp) {\n return query;\n }\n var slashes = findUnescapedSlashes(query);\n var regexPart;\n var forceIgnoreCase;\n if (!slashes.length) {\n regexPart = query;\n }\n else {\n regexPart = query.substring(0, slashes[0]);\n var flagsPart = query.substring(slashes[0]);\n forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n }\n if (!regexPart) {\n return null;\n }\n if (!getOption('pcre')) {\n regexPart = translateRegex(regexPart);\n }\n if (smartCase) {\n ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n }\n var regexp = new RegExp(regexPart, (ignoreCase || forceIgnoreCase) ? 'im' : 'm');\n return regexp;\n}\nfunction dom(n) {\n if (typeof n === 'string')\n n = document.createElement(n);\n for (var a, i = 1; i < arguments.length; i++) {\n if (!(a = arguments[i]))\n continue;\n if (typeof a !== 'object')\n a = document.createTextNode(a);\n if (a.nodeType)\n n.appendChild(a);\n else\n for (var key in a) {\n if (!Object.prototype.hasOwnProperty.call(a, key))\n continue;\n if (key[0] === '$')\n n.style[key.slice(1)] = a[key];\n else\n n.setAttribute(key, a[key]);\n }\n }\n return n;\n}\nfunction showConfirm(cm, template) {\n var pre = dom('div', { $color: 'red', $whiteSpace: 'pre', class: 'cm-vim-message' }, template);\n if (cm.openNotification) {\n cm.openNotification(pre, { bottom: true, duration: 5000 });\n }\n else {\n alert(pre.innerText);\n }\n}\nfunction makePrompt(prefix, desc) {\n return dom('div', { $display: 'flex' }, dom('span', { $fontFamily: 'monospace', $whiteSpace: 'pre', $flex: 1 }, prefix, dom('input', { type: 'text', autocorrect: 'off',\n autocapitalize: 'off', spellcheck: 'false', $width: '100%' })), desc && dom('span', { $color: '#888' }, desc));\n}\nfunction showPrompt(cm, options) {\n if (keyToKeyStack.length) {\n if (!options.value)\n options.value = '';\n virtualPrompt = options;\n return;\n }\n var template = makePrompt(options.prefix, options.desc);\n if (cm.openDialog) {\n cm.openDialog(template, options.onClose, {\n onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n bottom: true, selectValueOnOpen: false, value: options.value\n });\n }\n else {\n var shortText = '';\n if (typeof options.prefix != \"string\" && options.prefix)\n shortText += options.prefix.textContent;\n if (options.desc)\n shortText += \" \" + options.desc;\n options.onClose(prompt(shortText, ''));\n }\n}\nfunction regexEqual(r1, r2) {\n if (r1 instanceof RegExp && r2 instanceof RegExp) {\n var props = ['global', 'multiline', 'ignoreCase', 'source'];\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n if (r1[prop] !== r2[prop]) {\n return false;\n }\n }\n return true;\n }\n return false;\n}\nfunction updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n if (!rawQuery) {\n return;\n }\n var state = getSearchState(cm);\n var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n if (!query) {\n return;\n }\n highlightSearchMatches(cm, query);\n if (regexEqual(query, state.getQuery())) {\n return query;\n }\n state.setQuery(query);\n return query;\n}\nfunction searchOverlay(query) {\n if (query.source.charAt(0) == '^') {\n var matchSol = true;\n }\n return {\n token: function (stream) {\n if (matchSol && !stream.sol()) {\n stream.skipToEnd();\n return;\n }\n var match = stream.match(query, false);\n if (match) {\n if (match[0].length == 0) {\n stream.next();\n return 'searching';\n }\n if (!stream.sol()) {\n stream.backUp(1);\n if (!query.exec(stream.next() + match[0])) {\n stream.next();\n return null;\n }\n }\n stream.match(query);\n return 'searching';\n }\n while (!stream.eol()) {\n stream.next();\n if (stream.match(query, false))\n break;\n }\n },\n query: query\n };\n}\nvar highlightTimeout = 0;\nfunction highlightSearchMatches(cm, query) {\n clearTimeout(highlightTimeout);\n var searchState = getSearchState(cm);\n searchState.highlightTimeout = highlightTimeout;\n highlightTimeout = setTimeout(function () {\n if (!cm.state.vim)\n return;\n var searchState = getSearchState(cm);\n searchState.highlightTimeout = null;\n var overlay = searchState.getOverlay();\n if (!overlay || query != overlay.query) {\n if (overlay) {\n cm.removeOverlay(overlay);\n }\n overlay = searchOverlay(query);\n cm.addOverlay(overlay);\n if (cm.showMatchesOnScrollbar) {\n if (searchState.getScrollbarAnnotate()) {\n searchState.getScrollbarAnnotate().clear();\n }\n searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n }\n searchState.setOverlay(overlay);\n }\n }, 50);\n}\nfunction findNext(cm, prev, query, repeat) {\n if (repeat === undefined) {\n repeat = 1;\n }\n return cm.operation(function () {\n var pos = cm.getCursor();\n var cursor = cm.getSearchCursor(query, pos);\n for (var i = 0; i < repeat; i++) {\n var found = cursor.find(prev);\n if (i == 0 && found && cursorEqual(cursor.from(), pos)) {\n var lastEndPos = prev ? cursor.from() : cursor.to();\n found = cursor.find(prev);\n if (found && !found[0] && cursorEqual(cursor.from(), lastEndPos)) {\n if (cm.getLine(lastEndPos.line).length == lastEndPos.ch)\n found = cursor.find(prev);\n }\n }\n if (!found) {\n cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0));\n if (!cursor.find(prev)) {\n return;\n }\n }\n }\n return cursor.from();\n });\n}\nfunction findNextFromAndToInclusive(cm, prev, query, repeat, vim) {\n if (repeat === undefined) {\n repeat = 1;\n }\n return cm.operation(function () {\n var pos = cm.getCursor();\n var cursor = cm.getSearchCursor(query, pos);\n var found = cursor.find(!prev);\n if (!vim.visualMode && found && cursorEqual(cursor.from(), pos)) {\n cursor.find(!prev);\n }\n for (var i = 0; i < repeat; i++) {\n found = cursor.find(prev);\n if (!found) {\n cursor = cm.getSearchCursor(query, (prev) ? new Pos(cm.lastLine()) : new Pos(cm.firstLine(), 0));\n if (!cursor.find(prev)) {\n return;\n }\n }\n }\n return [cursor.from(), cursor.to()];\n });\n}\nfunction clearSearchHighlight(cm) {\n var state = getSearchState(cm);\n if (state.highlightTimeout) {\n clearTimeout(state.highlightTimeout);\n state.highlightTimeout = null;\n }\n cm.removeOverlay(getSearchState(cm).getOverlay());\n state.setOverlay(null);\n if (state.getScrollbarAnnotate()) {\n state.getScrollbarAnnotate().clear();\n state.setScrollbarAnnotate(null);\n }\n}\nfunction isInRange(pos, start, end) {\n if (typeof pos != 'number') {\n pos = pos.line;\n }\n if (start instanceof Array) {\n return inArray(pos, start);\n }\n else {\n if (typeof end == 'number') {\n return (pos >= start && pos <= end);\n }\n else {\n return pos == start;\n }\n }\n}\nfunction getUserVisibleLines(cm) {\n var renderer = cm.ace.renderer;\n return {\n top: renderer.getFirstFullyVisibleRow(),\n bottom: renderer.getLastFullyVisibleRow()\n };\n}\nfunction getMarkPos(cm, vim, markName) {\n if (markName == '\\'' || markName == '`') {\n return vimGlobalState.jumpList.find(cm, -1) || new Pos(0, 0);\n }\n else if (markName == '.') {\n return getLastEditPos(cm);\n }\n var mark = vim.marks[markName];\n return mark && mark.find();\n}\nfunction getLastEditPos(cm) {\n if (cm.getLastEditEnd) {\n return cm.getLastEditEnd();\n }\n var done = cm.doc.history.done;\n for (var i = done.length; i--;) {\n if (done[i].changes) {\n return copyCursor(done[i].changes[0].to);\n }\n }\n}\nvar ExCommandDispatcher = function () {\n this.buildCommandMap_();\n};\nExCommandDispatcher.prototype = {\n processCommand: function (cm, input, opt_params) {\n var that = this;\n cm.operation(function () {\n cm.curOp.isVimOp = true;\n that._processCommand(cm, input, opt_params);\n });\n },\n _processCommand: function (cm, input, opt_params) {\n var vim = cm.state.vim;\n var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n var previousCommand = commandHistoryRegister.toString();\n var inputStream = new CodeMirror.StringStream(input);\n commandHistoryRegister.setText(input);\n var params = opt_params || {};\n params.input = input;\n try {\n this.parseInput_(cm, inputStream, params);\n }\n catch (e) {\n showConfirm(cm, e.toString());\n throw e;\n }\n if (vim.visualMode) {\n exitVisualMode(cm);\n }\n var command;\n var commandName;\n if (!params.commandName) {\n if (params.line !== undefined) {\n commandName = 'move';\n }\n }\n else {\n command = this.matchCommand_(params.commandName);\n if (command) {\n commandName = command.name;\n if (command.excludeFromCommandHistory) {\n commandHistoryRegister.setText(previousCommand);\n }\n this.parseCommandArgs_(inputStream, params, command);\n if (command.type == 'exToKey') {\n doKeyToKey(cm, command.toKeys, command);\n return;\n }\n else if (command.type == 'exToEx') {\n this.processCommand(cm, command.toInput);\n return;\n }\n }\n }\n if (!commandName) {\n showConfirm(cm, 'Not an editor command \":' + input + '\"');\n return;\n }\n try {\n exCommands[commandName](cm, params);\n if ((!command || !command.possiblyAsync) && params.callback) {\n params.callback();\n }\n }\n catch (e) {\n showConfirm(cm, e.toString());\n throw e;\n }\n },\n parseInput_: function (cm, inputStream, result) {\n inputStream.eatWhile(':');\n if (inputStream.eat('%')) {\n result.line = cm.firstLine();\n result.lineEnd = cm.lastLine();\n }\n else {\n result.line = this.parseLineSpec_(cm, inputStream);\n if (result.line !== undefined && inputStream.eat(',')) {\n result.lineEnd = this.parseLineSpec_(cm, inputStream);\n }\n }\n if (result.line == undefined) {\n if (cm.state.vim.visualMode) {\n var pos = getMarkPos(cm, cm.state.vim, '<');\n result.selectionLine = pos && pos.line;\n pos = getMarkPos(cm, cm.state.vim, '>');\n result.selectionLineEnd = pos && pos.line;\n }\n else {\n result.selectionLine = cm.getCursor().line;\n }\n }\n else {\n result.selectionLine = result.line;\n result.selectionLineEnd = result.lineEnd;\n }\n var commandMatch = inputStream.match(/^(\\w+|!!|@@|[!#&*<=>@~])/);\n if (commandMatch) {\n result.commandName = commandMatch[1];\n }\n else {\n result.commandName = inputStream.match(/.*/)[0];\n }\n return result;\n },\n parseLineSpec_: function (cm, inputStream) {\n var numberMatch = inputStream.match(/^(\\d+)/);\n if (numberMatch) {\n return parseInt(numberMatch[1], 10) - 1;\n }\n switch (inputStream.next()) {\n case '.':\n return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n case '$':\n return this.parseLineSpecOffset_(inputStream, cm.lastLine());\n case '\\'':\n var markName = inputStream.next();\n var markPos = getMarkPos(cm, cm.state.vim, markName);\n if (!markPos)\n throw new Error('Mark not set');\n return this.parseLineSpecOffset_(inputStream, markPos.line);\n case '-':\n case '+':\n inputStream.backUp(1);\n return this.parseLineSpecOffset_(inputStream, cm.getCursor().line);\n default:\n inputStream.backUp(1);\n return undefined;\n }\n },\n parseLineSpecOffset_: function (inputStream, line) {\n var offsetMatch = inputStream.match(/^([+-])?(\\d+)/);\n if (offsetMatch) {\n var offset = parseInt(offsetMatch[2], 10);\n if (offsetMatch[1] == \"-\") {\n line -= offset;\n }\n else {\n line += offset;\n }\n }\n return line;\n },\n parseCommandArgs_: function (inputStream, params, command) {\n if (inputStream.eol()) {\n return;\n }\n params.argString = inputStream.match(/.*/)[0];\n var delim = command.argDelimiter || /\\s+/;\n var args = trim(params.argString).split(delim);\n if (args.length && args[0]) {\n params.args = args;\n }\n },\n matchCommand_: function (commandName) {\n for (var i = commandName.length; i > 0; i--) {\n var prefix = commandName.substring(0, i);\n if (this.commandMap_[prefix]) {\n var command = this.commandMap_[prefix];\n if (command.name.indexOf(commandName) === 0) {\n return command;\n }\n }\n }\n return null;\n },\n buildCommandMap_: function () {\n this.commandMap_ = {};\n for (var i = 0; i < defaultExCommandMap.length; i++) {\n var command = defaultExCommandMap[i];\n var key = command.shortName || command.name;\n this.commandMap_[key] = command;\n }\n },\n map: function (lhs, rhs, ctx, noremap) {\n if (lhs != ':' && lhs.charAt(0) == ':') {\n if (ctx) {\n throw Error('Mode not supported for ex mappings');\n }\n var commandName = lhs.substring(1);\n if (rhs != ':' && rhs.charAt(0) == ':') {\n this.commandMap_[commandName] = {\n name: commandName,\n type: 'exToEx',\n toInput: rhs.substring(1),\n user: true\n };\n }\n else {\n this.commandMap_[commandName] = {\n name: commandName,\n type: 'exToKey',\n toKeys: rhs,\n user: true\n };\n }\n }\n else {\n var mapping = {\n keys: lhs,\n type: 'keyToKey',\n toKeys: rhs,\n noremap: !!noremap\n };\n if (ctx) {\n mapping.context = ctx;\n }\n defaultKeymap.unshift(mapping);\n }\n },\n unmap: function (lhs, ctx) {\n if (lhs != ':' && lhs.charAt(0) == ':') {\n if (ctx) {\n throw Error('Mode not supported for ex mappings');\n }\n var commandName = lhs.substring(1);\n if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n delete this.commandMap_[commandName];\n return true;\n }\n }\n else {\n var keys = lhs;\n for (var i = 0; i < defaultKeymap.length; i++) {\n if (keys == defaultKeymap[i].keys\n && defaultKeymap[i].context === ctx) {\n defaultKeymap.splice(i, 1);\n return true;\n }\n }\n }\n }\n};\nvar exCommands = {\n colorscheme: function (cm, params) {\n if (!params.args || params.args.length < 1) {\n showConfirm(cm, cm.getOption('theme'));\n return;\n }\n cm.setOption('theme', params.args[0]);\n },\n map: function (cm, params, ctx, defaultOnly) {\n var mapArgs = params.args;\n if (!mapArgs || mapArgs.length < 2) {\n if (cm) {\n showConfirm(cm, 'Invalid mapping: ' + params.input);\n }\n return;\n }\n exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx, defaultOnly);\n },\n imap: function (cm, params) { this.map(cm, params, 'insert'); },\n nmap: function (cm, params) { this.map(cm, params, 'normal'); },\n vmap: function (cm, params) { this.map(cm, params, 'visual'); },\n omap: function (cm, params) { this.map(cm, params, 'operatorPending'); },\n noremap: function (cm, params) { this.map(cm, params, undefined, true); },\n inoremap: function (cm, params) { this.map(cm, params, 'insert', true); },\n nnoremap: function (cm, params) { this.map(cm, params, 'normal', true); },\n vnoremap: function (cm, params) { this.map(cm, params, 'visual', true); },\n onoremap: function (cm, params) { this.map(cm, params, 'operatorPending', true); },\n unmap: function (cm, params, ctx) {\n var mapArgs = params.args;\n if (!mapArgs || mapArgs.length < 1 || !exCommandDispatcher.unmap(mapArgs[0], ctx)) {\n if (cm) {\n showConfirm(cm, 'No such mapping: ' + params.input);\n }\n }\n },\n mapclear: function (cm, params) { vimApi.mapclear(); },\n imapclear: function (cm, params) { vimApi.mapclear('insert'); },\n nmapclear: function (cm, params) { vimApi.mapclear('normal'); },\n vmapclear: function (cm, params) { vimApi.mapclear('visual'); },\n omapclear: function (cm, params) { vimApi.mapclear('operatorPending'); },\n move: function (cm, params) {\n commandDispatcher.processCommand(cm, cm.state.vim, {\n type: 'motion',\n motion: 'moveToLineOrEdgeOfDocument',\n motionArgs: { forward: false, explicitRepeat: true,\n linewise: true },\n repeatOverride: params.line + 1\n });\n },\n set: function (cm, params) {\n var setArgs = params.args;\n var setCfg = params.setCfg || {};\n if (!setArgs || setArgs.length < 1) {\n if (cm) {\n showConfirm(cm, 'Invalid mapping: ' + params.input);\n }\n return;\n }\n var expr = setArgs[0].split('=');\n var optionName = expr[0];\n var value = expr[1];\n var forceGet = false;\n var forceToggle = false;\n if (optionName.charAt(optionName.length - 1) == '?') {\n if (value) {\n throw Error('Trailing characters: ' + params.argString);\n }\n optionName = optionName.substring(0, optionName.length - 1);\n forceGet = true;\n }\n else if (optionName.charAt(optionName.length - 1) == '!') {\n optionName = optionName.substring(0, optionName.length - 1);\n forceToggle = true;\n }\n if (value === undefined && optionName.substring(0, 2) == 'no') {\n optionName = optionName.substring(2);\n value = false;\n }\n var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n if (optionIsBoolean) {\n if (forceToggle) {\n value = !getOption(optionName, cm, setCfg);\n }\n else if (value == undefined) {\n value = true;\n }\n }\n if (!optionIsBoolean && value === undefined || forceGet) {\n var oldValue = getOption(optionName, cm, setCfg);\n if (oldValue instanceof Error) {\n showConfirm(cm, oldValue.message);\n }\n else if (oldValue === true || oldValue === false) {\n showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n }\n else {\n showConfirm(cm, ' ' + optionName + '=' + oldValue);\n }\n }\n else {\n var setOptionReturn = setOption(optionName, value, cm, setCfg);\n if (setOptionReturn instanceof Error) {\n showConfirm(cm, setOptionReturn.message);\n }\n }\n },\n setlocal: function (cm, params) {\n params.setCfg = { scope: 'local' };\n this.set(cm, params);\n },\n setglobal: function (cm, params) {\n params.setCfg = { scope: 'global' };\n this.set(cm, params);\n },\n registers: function (cm, params) {\n var regArgs = params.args;\n var registers = vimGlobalState.registerController.registers;\n var regInfo = '----------Registers----------\\n\\n';\n if (!regArgs) {\n for (var registerName in registers) {\n var text = registers[registerName].toString();\n if (text.length) {\n regInfo += '\"' + registerName + ' ' + text + '\\n';\n }\n }\n }\n else {\n var registerName;\n regArgs = regArgs.join('');\n for (var i = 0; i < regArgs.length; i++) {\n registerName = regArgs.charAt(i);\n if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n continue;\n }\n var register = registers[registerName] || new Register();\n regInfo += '\"' + registerName + ' ' + register.toString() + '\\n';\n }\n }\n showConfirm(cm, regInfo);\n },\n sort: function (cm, params) {\n var reverse, ignoreCase, unique, number, pattern;\n function parseArgs() {\n if (params.argString) {\n var args = new CodeMirror.StringStream(params.argString);\n if (args.eat('!')) {\n reverse = true;\n }\n if (args.eol()) {\n return;\n }\n if (!args.eatSpace()) {\n return 'Invalid arguments';\n }\n var opts = args.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);\n if (!opts && !args.eol()) {\n return 'Invalid arguments';\n }\n if (opts[1]) {\n ignoreCase = opts[1].indexOf('i') != -1;\n unique = opts[1].indexOf('u') != -1;\n var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;\n var hex = opts[1].indexOf('x') != -1 && 1;\n var octal = opts[1].indexOf('o') != -1 && 1;\n if (decimal + hex + octal > 1) {\n return 'Invalid arguments';\n }\n number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n }\n if (opts[2]) {\n pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');\n }\n }\n }\n var err = parseArgs();\n if (err) {\n showConfirm(cm, err + ': ' + params.argString);\n return;\n }\n var lineStart = params.line || cm.firstLine();\n var lineEnd = params.lineEnd || params.line || cm.lastLine();\n if (lineStart == lineEnd) {\n return;\n }\n var curStart = new Pos(lineStart, 0);\n var curEnd = new Pos(lineEnd, lineLength(cm, lineEnd));\n var text = cm.getRange(curStart, curEnd).split('\\n');\n var numberRegex = pattern ? pattern :\n (number == 'decimal') ? /(-?)([\\d]+)/ :\n (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n (number == 'octal') ? /([0-7]+)/ : null;\n var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n var numPart = [], textPart = [];\n if (number || pattern) {\n for (var i = 0; i < text.length; i++) {\n var matchPart = pattern ? text[i].match(pattern) : null;\n if (matchPart && matchPart[0] != '') {\n numPart.push(matchPart);\n }\n else if (!pattern && numberRegex.exec(text[i])) {\n numPart.push(text[i]);\n }\n else {\n textPart.push(text[i]);\n }\n }\n }\n else {\n textPart = text;\n }\n function compareFn(a, b) {\n if (reverse) {\n var tmp;\n tmp = a;\n a = b;\n b = tmp;\n }\n if (ignoreCase) {\n a = a.toLowerCase();\n b = b.toLowerCase();\n }\n var anum = number && numberRegex.exec(a);\n var bnum = number && numberRegex.exec(b);\n if (!anum) {\n return a < b ? -1 : 1;\n }\n anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n return anum - bnum;\n }\n function comparePatternFn(a, b) {\n if (reverse) {\n var tmp;\n tmp = a;\n a = b;\n b = tmp;\n }\n if (ignoreCase) {\n a[0] = a[0].toLowerCase();\n b[0] = b[0].toLowerCase();\n }\n return (a[0] < b[0]) ? -1 : 1;\n }\n numPart.sort(pattern ? comparePatternFn : compareFn);\n if (pattern) {\n for (var i = 0; i < numPart.length; i++) {\n numPart[i] = numPart[i].input;\n }\n }\n else if (!number) {\n textPart.sort(compareFn);\n }\n text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n if (unique) { // Remove duplicate lines\n var textOld = text;\n var lastLine;\n text = [];\n for (var i = 0; i < textOld.length; i++) {\n if (textOld[i] != lastLine) {\n text.push(textOld[i]);\n }\n lastLine = textOld[i];\n }\n }\n cm.replaceRange(text.join('\\n'), curStart, curEnd);\n },\n vglobal: function (cm, params) {\n this.global(cm, params);\n },\n normal: function (cm, params) {\n var argString = params.argString;\n if (argString && argString[0] == '!') {\n argString = argString.slice(1);\n noremap = true;\n }\n argString = argString.trimStart();\n if (!argString) {\n showConfirm(cm, 'Argument is required.');\n return;\n }\n var line = params.line;\n if (typeof line == 'number') {\n var lineEnd = isNaN(params.lineEnd) ? line : params.lineEnd;\n for (var i = line; i <= lineEnd; i++) {\n cm.setCursor(i, 0);\n doKeyToKey(cm, params.argString.trimStart());\n if (cm.state.vim.insertMode) {\n exitInsertMode(cm, true);\n }\n }\n }\n else {\n doKeyToKey(cm, params.argString.trimStart());\n if (cm.state.vim.insertMode) {\n exitInsertMode(cm, true);\n }\n }\n },\n global: function (cm, params) {\n var argString = params.argString;\n if (!argString) {\n showConfirm(cm, 'Regular Expression missing from global');\n return;\n }\n var inverted = params.commandName[0] === 'v';\n if (argString[0] === '!' && params.commandName[0] === 'g') {\n inverted = true;\n argString = argString.slice(1);\n }\n var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n var lineEnd = params.lineEnd || params.line || cm.lastLine();\n var tokens = splitBySlash(argString);\n var regexPart = argString, cmd;\n if (tokens.length) {\n regexPart = tokens[0];\n cmd = tokens.slice(1, tokens.length).join('/');\n }\n if (regexPart) {\n try {\n updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */);\n }\n catch (e) {\n showConfirm(cm, 'Invalid regex: ' + regexPart);\n return;\n }\n }\n var query = getSearchState(cm).getQuery();\n var matchedLines = [];\n for (var i = lineStart; i <= lineEnd; i++) {\n var line = cm.getLine(i);\n var matched = query.test(line);\n if (matched !== inverted) {\n matchedLines.push(cmd ? cm.getLineHandle(i) : line);\n }\n }\n if (!cmd) {\n showConfirm(cm, matchedLines.join('\\n'));\n return;\n }\n var index = 0;\n var nextCommand = function () {\n if (index < matchedLines.length) {\n var lineHandle = matchedLines[index++];\n var lineNum = cm.getLineNumber(lineHandle);\n if (lineNum == null) {\n nextCommand();\n return;\n }\n var command = (lineNum + 1) + cmd;\n exCommandDispatcher.processCommand(cm, command, {\n callback: nextCommand\n });\n }\n else if (cm.releaseLineHandles) {\n cm.releaseLineHandles();\n }\n };\n nextCommand();\n },\n substitute: function (cm, params) {\n if (!cm.getSearchCursor) {\n throw new Error('Search feature not available. Requires searchcursor.js or ' +\n 'any other getSearchCursor implementation.');\n }\n var argString = params.argString;\n var tokens = argString ? splitBySeparator(argString, argString[0]) : [];\n var regexPart, replacePart = '', trailing, flagsPart, count;\n var confirm = false; // Whether to confirm each replace.\n var global = false; // True to replace all instances on a line, false to replace only 1.\n if (tokens.length) {\n regexPart = tokens[0];\n if (getOption('pcre') && regexPart !== '') {\n regexPart = new RegExp(regexPart).source; //normalize not escaped characters\n }\n replacePart = tokens[1];\n if (replacePart !== undefined) {\n if (getOption('pcre')) {\n replacePart = unescapeRegexReplace(replacePart.replace(/([^\\\\])&/g, \"$1$$&\"));\n }\n else {\n replacePart = translateRegexReplace(replacePart);\n }\n vimGlobalState.lastSubstituteReplacePart = replacePart;\n }\n trailing = tokens[2] ? tokens[2].split(' ') : [];\n }\n else {\n if (argString && argString.length) {\n showConfirm(cm, 'Substitutions should be of the form ' +\n ':s/pattern/replace/');\n return;\n }\n }\n if (trailing) {\n flagsPart = trailing[0];\n count = parseInt(trailing[1]);\n if (flagsPart) {\n if (flagsPart.indexOf('c') != -1) {\n confirm = true;\n }\n if (flagsPart.indexOf('g') != -1) {\n global = true;\n }\n if (getOption('pcre')) {\n regexPart = regexPart + '/' + flagsPart;\n }\n else {\n regexPart = regexPart.replace(/\\//g, \"\\\\/\") + '/' + flagsPart;\n }\n }\n }\n if (regexPart) {\n try {\n updateSearchQuery(cm, regexPart, true /** ignoreCase */, true /** smartCase */);\n }\n catch (e) {\n showConfirm(cm, 'Invalid regex: ' + regexPart);\n return;\n }\n }\n replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n if (replacePart === undefined) {\n showConfirm(cm, 'No previous substitute regular expression');\n return;\n }\n var state = getSearchState(cm);\n var query = state.getQuery();\n var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n var lineEnd = params.lineEnd || lineStart;\n if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n lineEnd = Infinity;\n }\n if (count) {\n lineStart = lineEnd;\n lineEnd = lineStart + count - 1;\n }\n var startPos = clipCursorToContent(cm, new Pos(lineStart, 0));\n var cursor = cm.getSearchCursor(query, startPos);\n doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n },\n startinsert: function (cm, params) {\n doKeyToKey(cm, params.argString == '!' ? 'A' : 'i', {});\n },\n redo: CodeMirror.commands.redo,\n undo: CodeMirror.commands.undo,\n write: function (cm) {\n if (CodeMirror.commands.save) {\n CodeMirror.commands.save(cm);\n }\n else if (cm.save) {\n cm.save();\n }\n },\n nohlsearch: function (cm) {\n clearSearchHighlight(cm);\n },\n yank: function (cm) {\n var cur = copyCursor(cm.getCursor());\n var line = cur.line;\n var lineText = cm.getLine(line);\n vimGlobalState.registerController.pushText('0', 'yank', lineText, true, true);\n },\n delete: function (cm, params) {\n var line = params.selectionLine;\n var lineEnd = isNaN(params.selectionLineEnd) ? line : params.selectionLineEnd;\n operators.delete(cm, { linewise: true }, [\n { anchor: new Pos(line, 0),\n head: new Pos(lineEnd + 1, 0) }\n ]);\n },\n join: function (cm, params) {\n var line = params.selectionLine;\n var lineEnd = isNaN(params.selectionLineEnd) ? line : params.selectionLineEnd;\n cm.setCursor(new Pos(line, 0));\n actions.joinLines(cm, { repeat: lineEnd - line }, cm.state.vim);\n },\n delmarks: function (cm, params) {\n if (!params.argString || !trim(params.argString)) {\n showConfirm(cm, 'Argument required');\n return;\n }\n var state = cm.state.vim;\n var stream = new CodeMirror.StringStream(trim(params.argString));\n while (!stream.eol()) {\n stream.eatSpace();\n var count = stream.pos;\n if (!stream.match(/[a-zA-Z]/, false)) {\n showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n return;\n }\n var sym = stream.next();\n if (stream.match('-', true)) {\n if (!stream.match(/[a-zA-Z]/, false)) {\n showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n return;\n }\n var startMark = sym;\n var finishMark = stream.next();\n if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n isUpperCase(startMark) && isUpperCase(finishMark)) {\n var start = startMark.charCodeAt(0);\n var finish = finishMark.charCodeAt(0);\n if (start >= finish) {\n showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n return;\n }\n for (var j = 0; j <= finish - start; j++) {\n var mark = String.fromCharCode(start + j);\n delete state.marks[mark];\n }\n }\n else {\n showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n return;\n }\n }\n else {\n delete state.marks[sym];\n }\n }\n }\n};\nvar exCommandDispatcher = new ExCommandDispatcher();\nfunction doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query, replaceWith, callback) {\n cm.state.vim.exMode = true;\n var done = false;\n var lastPos, modifiedLineNumber, joined;\n function replaceAll() {\n cm.operation(function () {\n while (!done) {\n replace();\n next();\n }\n stop();\n });\n }\n function replace() {\n var text = cm.getRange(searchCursor.from(), searchCursor.to());\n var newText = text.replace(query, replaceWith);\n var unmodifiedLineNumber = searchCursor.to().line;\n searchCursor.replace(newText);\n modifiedLineNumber = searchCursor.to().line;\n lineEnd += modifiedLineNumber - unmodifiedLineNumber;\n joined = modifiedLineNumber < unmodifiedLineNumber;\n }\n function findNextValidMatch() {\n var lastMatchTo = lastPos && copyCursor(searchCursor.to());\n var match = searchCursor.findNext();\n if (match && !match[0] && lastMatchTo && cursorEqual(searchCursor.from(), lastMatchTo)) {\n match = searchCursor.findNext();\n }\n return match;\n }\n function next() {\n while (findNextValidMatch() &&\n isInRange(searchCursor.from(), lineStart, lineEnd)) {\n if (!global && searchCursor.from().line == modifiedLineNumber && !joined) {\n continue;\n }\n cm.scrollIntoView(searchCursor.from(), 30);\n cm.setSelection(searchCursor.from(), searchCursor.to());\n lastPos = searchCursor.from();\n done = false;\n return;\n }\n done = true;\n }\n function stop(close) {\n if (close) {\n close();\n }\n cm.focus();\n if (lastPos) {\n cm.setCursor(lastPos);\n var vim = cm.state.vim;\n vim.exMode = false;\n vim.lastHPos = vim.lastHSPos = lastPos.ch;\n }\n if (callback) {\n callback();\n }\n }\n function onPromptKeyDown(e, _value, close) {\n CodeMirror.e_stop(e);\n var keyName = vimKeyFromEvent(e);\n switch (keyName) {\n case 'y':\n replace();\n next();\n break;\n case 'n':\n next();\n break;\n case 'a':\n var savedCallback = callback;\n callback = undefined;\n cm.operation(replaceAll);\n callback = savedCallback;\n break;\n case 'l':\n replace();\n case 'q':\n case '':\n case '':\n case '':\n stop(close);\n break;\n }\n if (done) {\n stop(close);\n }\n return true;\n }\n next();\n if (done) {\n showConfirm(cm, 'No matches for ' + query.source);\n return;\n }\n if (!confirm) {\n replaceAll();\n if (callback) {\n callback();\n }\n return;\n }\n showPrompt(cm, {\n prefix: dom('span', 'replace with ', dom('strong', replaceWith), ' (y/n/a/q/l)'),\n onKeyDown: onPromptKeyDown\n });\n}\nfunction exitInsertMode(cm, keepCursor) {\n var vim = cm.state.vim;\n var macroModeState = vimGlobalState.macroModeState;\n var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n var isPlaying = macroModeState.isPlaying;\n var lastChange = macroModeState.lastInsertModeChanges;\n if (!isPlaying) {\n cm.off('change', onChange);\n if (vim.insertEnd)\n vim.insertEnd.clear();\n vim.insertEnd = null;\n CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n }\n if (!isPlaying && vim.insertModeRepeat > 1) {\n repeatLastEdit(cm, vim, vim.insertModeRepeat - 1, true /** repeatForInsert */);\n vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n }\n delete vim.insertModeRepeat;\n vim.insertMode = false;\n if (!keepCursor) {\n cm.setCursor(cm.getCursor().line, cm.getCursor().ch - 1);\n }\n cm.setOption('keyMap', 'vim');\n cm.setOption('disableInput', true);\n cm.toggleOverwrite(false); // exit replace mode if we were in it.\n insertModeChangeRegister.setText(lastChange.changes.join(''));\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"normal\" });\n if (macroModeState.isRecording) {\n logInsertModeChange(macroModeState);\n }\n}\nfunction _mapCommand(command) {\n defaultKeymap.unshift(command);\n}\nfunction mapCommand(keys, type, name, args, extra) {\n var command = { keys: keys, type: type };\n command[type] = name;\n command[type + \"Args\"] = args;\n for (var key in extra)\n command[key] = extra[key];\n _mapCommand(command);\n}\ndefineOption('insertModeEscKeysTimeout', 200, 'number');\nfunction executeMacroRegister(cm, vim, macroModeState, registerName) {\n var register = vimGlobalState.registerController.getRegister(registerName);\n if (registerName == ':') {\n if (register.keyBuffer[0]) {\n exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n }\n macroModeState.isPlaying = false;\n return;\n }\n var keyBuffer = register.keyBuffer;\n var imc = 0;\n macroModeState.isPlaying = true;\n macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n for (var i = 0; i < keyBuffer.length; i++) {\n var text = keyBuffer[i];\n var match, key;\n while (text) {\n match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n key = match[0];\n text = text.substring(match.index + key.length);\n vimApi.handleKey(cm, key, 'macro');\n if (vim.insertMode) {\n var changes = register.insertModeChanges[imc++].changes;\n vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n changes;\n repeatInsertModeChanges(cm, changes, 1);\n exitInsertMode(cm);\n }\n }\n }\n macroModeState.isPlaying = false;\n}\nfunction logKey(macroModeState, key) {\n if (macroModeState.isPlaying) {\n return;\n }\n var registerName = macroModeState.latestRegister;\n var register = vimGlobalState.registerController.getRegister(registerName);\n if (register) {\n register.pushText(key);\n }\n}\nfunction logInsertModeChange(macroModeState) {\n if (macroModeState.isPlaying) {\n return;\n }\n var registerName = macroModeState.latestRegister;\n var register = vimGlobalState.registerController.getRegister(registerName);\n if (register && register.pushInsertModeChanges) {\n register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n }\n}\nfunction logSearchQuery(macroModeState, query) {\n if (macroModeState.isPlaying) {\n return;\n }\n var registerName = macroModeState.latestRegister;\n var register = vimGlobalState.registerController.getRegister(registerName);\n if (register && register.pushSearchQuery) {\n register.pushSearchQuery(query);\n }\n}\nfunction onChange(cm, changeObj) {\n var macroModeState = vimGlobalState.macroModeState;\n var lastChange = macroModeState.lastInsertModeChanges;\n if (!macroModeState.isPlaying) {\n var vim = cm.state.vim;\n while (changeObj) {\n lastChange.expectCursorActivityForChange = true;\n if (lastChange.ignoreCount > 1) {\n lastChange.ignoreCount--;\n }\n else if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n || changeObj.origin === undefined /* only in testing */) {\n var selectionCount = cm.listSelections().length;\n if (selectionCount > 1)\n lastChange.ignoreCount = selectionCount;\n var text = changeObj.text.join('\\n');\n if (lastChange.maybeReset) {\n lastChange.changes = [];\n lastChange.maybeReset = false;\n }\n if (text) {\n if (cm.state.overwrite && !/\\n/.test(text)) {\n lastChange.changes.push([text]);\n }\n else {\n if (text.length > 1) {\n var insertEnd = vim && vim.insertEnd && vim.insertEnd.find();\n var cursor = cm.getCursor();\n if (insertEnd && insertEnd.line == cursor.line) {\n var offset = insertEnd.ch - cursor.ch;\n if (offset > 0 && offset < text.length) {\n lastChange.changes.push([text, offset]);\n text = '';\n }\n }\n }\n if (text)\n lastChange.changes.push(text);\n }\n }\n }\n changeObj = changeObj.next;\n }\n }\n}\nfunction onCursorActivity(cm) {\n var vim = cm.state.vim;\n if (vim.insertMode) {\n var macroModeState = vimGlobalState.macroModeState;\n if (macroModeState.isPlaying) {\n return;\n }\n var lastChange = macroModeState.lastInsertModeChanges;\n if (lastChange.expectCursorActivityForChange) {\n lastChange.expectCursorActivityForChange = false;\n }\n else {\n lastChange.maybeReset = true;\n if (vim.insertEnd)\n vim.insertEnd.clear();\n vim.insertEnd = cm.setBookmark(cm.getCursor(), { insertLeft: true });\n }\n }\n else if (!cm.curOp.isVimOp) {\n handleExternalSelection(cm, vim);\n }\n}\nfunction handleExternalSelection(cm, vim, keepHPos) {\n var anchor = cm.getCursor('anchor');\n var head = cm.getCursor('head');\n if (vim.visualMode && !cm.somethingSelected()) {\n exitVisualMode(cm, false);\n }\n else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n vim.visualMode = true;\n vim.visualLine = false;\n CodeMirror.signal(cm, \"vim-mode-change\", { mode: \"visual\" });\n }\n if (vim.visualMode) {\n var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n head = offsetCursor(head, 0, headOffset);\n anchor = offsetCursor(anchor, 0, anchorOffset);\n vim.sel = {\n anchor: anchor,\n head: head\n };\n updateMark(cm, vim, '<', cursorMin(head, anchor));\n updateMark(cm, vim, '>', cursorMax(head, anchor));\n }\n else if (!vim.insertMode && !keepHPos) {\n vim.lastHPos = cm.getCursor().ch;\n }\n}\nfunction InsertModeKey(keyName, e) {\n this.keyName = keyName;\n this.key = e.key;\n this.ctrlKey = e.ctrlKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n this.shiftKey = e.shiftKey;\n}\nfunction onKeyEventTargetKeyDown(e) {\n var macroModeState = vimGlobalState.macroModeState;\n var lastChange = macroModeState.lastInsertModeChanges;\n var keyName = CodeMirror.keyName ? CodeMirror.keyName(e) : e.key;\n if (!keyName) {\n return;\n }\n if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n if (lastChange.maybeReset) {\n lastChange.changes = [];\n lastChange.maybeReset = false;\n }\n lastChange.changes.push(new InsertModeKey(keyName, e));\n }\n}\nfunction repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n var macroModeState = vimGlobalState.macroModeState;\n macroModeState.isPlaying = true;\n var isAction = !!vim.lastEditActionCommand;\n var cachedInputState = vim.inputState;\n function repeatCommand() {\n if (isAction) {\n commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n }\n else {\n commandDispatcher.evalInput(cm, vim);\n }\n }\n function repeatInsert(repeat) {\n if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n repeat = !vim.lastEditActionCommand ? 1 : repeat;\n var changeObject = macroModeState.lastInsertModeChanges;\n repeatInsertModeChanges(cm, changeObject.changes, repeat);\n }\n }\n vim.inputState = vim.lastEditInputState;\n if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n for (var i = 0; i < repeat; i++) {\n repeatCommand();\n repeatInsert(1);\n }\n }\n else {\n if (!repeatForInsert) {\n repeatCommand();\n }\n repeatInsert(repeat);\n }\n vim.inputState = cachedInputState;\n if (vim.insertMode && !repeatForInsert) {\n exitInsertMode(cm);\n }\n macroModeState.isPlaying = false;\n}\nfunction sendCmKey(cm, key) {\n CodeMirror.lookupKey(key, 'vim-insert', function keyHandler(binding) {\n if (typeof binding == 'string') {\n CodeMirror.commands[binding](cm);\n }\n else {\n binding(cm);\n }\n return true;\n });\n}\nfunction repeatInsertModeChanges(cm, changes, repeat) {\n var head = cm.getCursor('head');\n var visualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.visualBlock;\n if (visualBlock) {\n selectForInsert(cm, head, visualBlock + 1);\n repeat = cm.listSelections().length;\n cm.setCursor(head);\n }\n for (var i = 0; i < repeat; i++) {\n if (visualBlock) {\n cm.setCursor(offsetCursor(head, i, 0));\n }\n for (var j = 0; j < changes.length; j++) {\n var change = changes[j];\n if (change instanceof InsertModeKey) {\n sendCmKey(cm, change.keyName, change);\n }\n else if (typeof change == \"string\") {\n cm.replaceSelection(change);\n }\n else {\n var start = cm.getCursor();\n var end = offsetCursor(start, 0, change[0].length - (change[1] || 0));\n cm.replaceRange(change[0], start, change[1] ? start : end);\n cm.setCursor(end);\n }\n }\n }\n if (visualBlock) {\n cm.setCursor(offsetCursor(head, 0, 1));\n }\n}\nCodeMirror.Vim = vimApi;\nvar specialKeyAce = { 'return': 'CR', backspace: 'BS', 'delete': 'Del', esc: 'Esc',\n left: 'Left', right: 'Right', up: 'Up', down: 'Down', space: 'Space', insert: 'Ins',\n home: 'Home', end: 'End', pageup: 'PageUp', pagedown: 'PageDown', enter: 'CR'\n};\nfunction lookupKey(hashId, key, e, vim) {\n if (key.length > 1 && key[0] == \"n\") {\n key = key.replace(\"numpad\", \"\");\n }\n key = specialKeyAce[key] || key;\n var name = '';\n if (e.ctrlKey) {\n name += 'C-';\n }\n if (e.altKey) {\n name += 'A-';\n }\n if ((name || key.length > 1) && e.shiftKey) {\n name += 'S-';\n }\n if (vim && !vim.expectLiteralNext && key.length == 1) {\n if (langmap.keymap && key in langmap.keymap) {\n if (langmap.remapCtrl !== false || !name)\n key = langmap.keymap[key];\n }\n else if (key.charCodeAt(0) > 255) {\n var code = e.code && e.code.slice(-1) || \"\";\n if (!e.shiftKey)\n code = code.toLowerCase();\n if (code)\n key = code;\n }\n }\n name += key;\n if (name.length > 1) {\n name = '<' + name + '>';\n }\n return name;\n}\nvar handleKey = vimApi.handleKey.bind(vimApi);\nvimApi.handleKey = function (cm, key, origin) {\n return cm.operation(function () {\n return handleKey(cm, key, origin);\n }, true);\n};\nfunction cloneVimState(state) {\n var n = new state.constructor();\n Object.keys(state).forEach(function (key) {\n if (key == \"insertEnd\")\n return;\n var o = state[key];\n if (Array.isArray(o))\n o = o.slice();\n else if (o && typeof o == \"object\" && o.constructor != Object)\n o = cloneVimState(o);\n n[key] = o;\n });\n if (state.sel) {\n n.sel = {\n head: state.sel.head && copyCursor(state.sel.head),\n anchor: state.sel.anchor && copyCursor(state.sel.anchor)\n };\n }\n return n;\n}\nfunction multiSelectHandleKey(cm, key, origin) {\n var isHandled = false;\n var vim = vimApi.maybeInitVimState_(cm);\n var visualBlock = vim.visualBlock || vim.wasInVisualBlock;\n var wasMultiselect = cm.ace.inMultiSelectMode;\n if (vim.wasInVisualBlock && !wasMultiselect) {\n vim.wasInVisualBlock = false;\n }\n else if (wasMultiselect && vim.visualBlock) {\n vim.wasInVisualBlock = true;\n }\n if (key == '' && !vim.insertMode && !vim.visualMode && wasMultiselect) {\n cm.ace.exitMultiSelectMode();\n }\n else if (visualBlock || !wasMultiselect || cm.ace.inVirtualSelectionMode) {\n isHandled = vimApi.handleKey(cm, key, origin);\n }\n else {\n var old = cloneVimState(vim);\n var changeQueueList = vim.inputState.changeQueueList || [];\n cm.operation(function () {\n cm.curOp.isVimOp = true;\n var index = 0;\n cm.ace.forEachSelection(function () {\n var sel = cm.ace.selection;\n cm.state.vim.lastHPos = sel.$desiredColumn == null ? sel.lead.column : sel.$desiredColumn;\n cm.state.vim.inputState.changeQueue = changeQueueList[index];\n var head = cm.getCursor(\"head\");\n var anchor = cm.getCursor(\"anchor\");\n var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n head = offsetCursor(head, 0, headOffset);\n anchor = offsetCursor(anchor, 0, anchorOffset);\n cm.state.vim.sel.head = head;\n cm.state.vim.sel.anchor = anchor;\n isHandled = handleKey(cm, key, origin);\n sel.$desiredColumn = cm.state.vim.lastHPos == -1 ? null : cm.state.vim.lastHPos;\n if (cm.ace.inVirtualSelectionMode) {\n changeQueueList[index] = cm.state.vim.inputState.changeQueue;\n }\n if (cm.virtualSelectionMode()) {\n cm.state.vim = cloneVimState(old);\n }\n index++;\n });\n if (cm.curOp.cursorActivity && !isHandled)\n cm.curOp.cursorActivity = false;\n vim.status = cm.state.vim.status;\n cm.state.vim = vim;\n vim.inputState.changeQueueList = changeQueueList;\n vim.inputState.changeQueue = null;\n }, true);\n }\n if (isHandled && !vim.visualMode && !vim.insert && vim.visualMode != cm.somethingSelected()) {\n handleExternalSelection(cm, vim, true);\n }\n return isHandled;\n}\nresetVimGlobalState();\nexports.CodeMirror = CodeMirror;\nvar getVim = vimApi.maybeInitVimState_;\nexports.handler = {\n $id: \"ace/keyboard/vim\",\n drawCursor: function (element, pixelPos, config, sel, session) {\n var vim = this.state.vim || {};\n var w = config.characterWidth;\n var h = config.lineHeight;\n var top = pixelPos.top;\n var left = pixelPos.left;\n if (!vim.insertMode) {\n var isbackwards = !sel.cursor\n ? session.selection.isBackwards() || session.selection.isEmpty()\n : Range.comparePoints(sel.cursor, sel.start) <= 0;\n if (!isbackwards && left > w)\n left -= w;\n }\n if (!vim.insertMode && vim.status) {\n h = h / 2;\n top += h;\n }\n domLib.translate(element, left, top);\n domLib.setStyle(element.style, \"width\", w + \"px\");\n domLib.setStyle(element.style, \"height\", h + \"px\");\n },\n $getDirectionForHighlight: function (editor) {\n var cm = editor.state.cm;\n var vim = getVim(cm);\n if (!vim.insertMode) {\n return editor.session.selection.isBackwards() || editor.session.selection.isEmpty();\n }\n },\n handleKeyboard: function (data, hashId, key, keyCode, e) {\n var editor = data.editor;\n var cm = editor.state.cm;\n var vim = getVim(cm);\n if (keyCode == -1)\n return;\n if (!vim.insertMode) {\n if (hashId == -1) {\n if (key.charCodeAt(0) > 0xFF) {\n if (data.inputKey) {\n key = data.inputKey;\n if (key && data.inputHash == 4)\n key = key.toUpperCase();\n }\n }\n data.inputChar = key;\n }\n else if (hashId == 4 || hashId == 0) {\n if (data.inputKey == key && data.inputHash == hashId && data.inputChar) {\n key = data.inputChar;\n hashId = -1;\n }\n else {\n data.inputChar = null;\n data.inputKey = key;\n data.inputHash = hashId;\n }\n }\n else {\n data.inputChar = data.inputKey = null;\n }\n }\n if (cm.state.overwrite && vim.insertMode && key == \"backspace\" && hashId == 0) {\n return { command: \"gotoleft\" };\n }\n if (key == \"c\" && hashId == 1) { // key == \"ctrl-c\"\n if (!useragent.isMac && editor.getCopyText()) {\n editor.once(\"copy\", function () {\n if (vim.insertMode)\n editor.selection.clearSelection();\n else\n cm.operation(function () { exitVisualMode(cm); });\n });\n return { command: \"null\", passEvent: true };\n }\n }\n if (key == \"esc\" && !vim.insertMode && !vim.visualMode && !cm.ace.inMultiSelectMode) {\n var searchState = getSearchState(cm);\n var overlay = searchState.getOverlay();\n if (overlay)\n cm.removeOverlay(overlay);\n }\n if (hashId == -1 || hashId & 1 || hashId === 0 && key.length > 1) {\n var insertMode = vim.insertMode;\n var name = lookupKey(hashId, key, e || {}, vim);\n if (vim.status == null)\n vim.status = \"\";\n var isHandled = multiSelectHandleKey(cm, name, 'user');\n vim = getVim(cm); // may be changed by multiSelectHandleKey\n if (isHandled && vim.status != null)\n vim.status += name;\n else if (vim.status == null)\n vim.status = \"\";\n cm._signal(\"changeStatus\");\n if (!isHandled && (hashId != -1 || insertMode))\n return;\n return { command: \"null\", passEvent: !isHandled };\n }\n },\n attach: function (editor) {\n if (!editor.state)\n editor.state = {};\n var cm = new CodeMirror(editor);\n editor.state.cm = cm;\n editor.$vimModeHandler = this;\n enterVimMode(cm);\n getVim(cm).status = null;\n cm.on('vim-command-done', function () {\n if (cm.virtualSelectionMode())\n return;\n getVim(cm).status = null;\n cm.ace._signal(\"changeStatus\");\n cm.ace.session.markUndoGroup();\n });\n cm.on(\"changeStatus\", function () {\n cm.ace.renderer.updateCursor();\n cm.ace._signal(\"changeStatus\");\n });\n cm.on(\"vim-mode-change\", function () {\n if (cm.virtualSelectionMode())\n return;\n updateInputMode();\n cm._signal(\"changeStatus\");\n });\n function updateInputMode() {\n var isIntsert = getVim(cm).insertMode;\n cm.ace.renderer.setStyle(\"normal-mode\", !isIntsert);\n editor.textInput.setCommandMode(!isIntsert);\n editor.renderer.$keepTextAreaAtCursor = isIntsert;\n editor.renderer.$blockCursor = !isIntsert;\n }\n updateInputMode();\n editor.renderer.$cursorLayer.drawCursor = this.drawCursor.bind(cm);\n },\n detach: function (editor) {\n var cm = editor.state.cm;\n leaveVimMode(cm);\n cm.destroy();\n editor.state.cm = null;\n editor.$vimModeHandler = null;\n editor.renderer.$cursorLayer.drawCursor = null;\n editor.renderer.setStyle(\"normal-mode\", false);\n editor.textInput.setCommandMode(false);\n editor.renderer.$keepTextAreaAtCursor = true;\n },\n getStatusText: function (editor) {\n var cm = editor.state.cm;\n var vim = getVim(cm);\n if (vim.insertMode)\n return \"INSERT\";\n var status = \"\";\n if (vim.visualMode) {\n status += \"VISUAL\";\n if (vim.visualLine)\n status += \" LINE\";\n if (vim.visualBlock)\n status += \" BLOCK\";\n }\n if (vim.status)\n status += (status ? \" \" : \"\") + vim.status;\n return status;\n }\n};\nvimApi.defineOption({\n name: \"wrap\",\n set: function (value, cm) {\n if (cm) {\n cm.ace.setOption(\"wrap\", value);\n }\n },\n type: \"boolean\"\n}, false);\nvimApi.defineEx('write', 'w', function () {\n console.log(':write is not implemented');\n});\ndefaultKeymap.push({ keys: 'zc', type: 'action', action: 'fold', actionArgs: { open: false } }, { keys: 'zC', type: 'action', action: 'fold', actionArgs: { open: false, all: true } }, { keys: 'zo', type: 'action', action: 'fold', actionArgs: { open: true } }, { keys: 'zO', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'za', type: 'action', action: 'fold', actionArgs: { toggle: true } }, { keys: 'zA', type: 'action', action: 'fold', actionArgs: { toggle: true, all: true } }, { keys: 'zf', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: 'zd', type: 'action', action: 'fold', actionArgs: { open: true, all: true } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAbove\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelow\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorAboveSkipCurrent\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"addCursorBelowSkipCurrent\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreBefore\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectMoreAfter\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextBefore\" } }, { keys: '', type: 'action', action: 'aceCommand', actionArgs: { name: \"selectNextAfter\" } });\ndefaultKeymap.push({\n keys: 'gq',\n type: 'operator',\n operator: 'hardWrap'\n});\nvimApi.defineOperator(\"hardWrap\", function (cm, operatorArgs, ranges, oldAnchor, newHead) {\n var anchor = ranges[0].anchor.line;\n var head = ranges[0].head.line;\n if (operatorArgs.linewise)\n head--;\n hardWrap(cm.ace, { startRow: anchor, endRow: head });\n return Pos(head, 0);\n});\ndefineOption('textwidth', undefined, 'number', ['tw'], function (width, cm) {\n if (cm === undefined) {\n return;\n }\n if (width === undefined) {\n var value = cm.ace.getOption('printMarginColumn');\n return value;\n }\n else {\n var column = Math.round(width);\n if (column > 1) {\n cm.ace.setOption('printMarginColumn', column);\n }\n }\n});\nactions.aceCommand = function (cm, actionArgs, vim) {\n cm.vimCmd = actionArgs;\n if (cm.ace.inVirtualSelectionMode)\n cm.ace.on(\"beforeEndOperation\", delayedExecAceCommand);\n else\n delayedExecAceCommand(null, cm.ace);\n};\nfunction delayedExecAceCommand(op, ace) {\n ace.off(\"beforeEndOperation\", delayedExecAceCommand);\n var cmd = ace.state.cm.vimCmd;\n if (cmd) {\n ace.execCommand(cmd.exec ? cmd : cmd.name, cmd.args);\n }\n ace.curOp = ace.prevOp;\n}\nactions.fold = function (cm, actionArgs, vim) {\n cm.ace.execCommand(['toggleFoldWidget', 'toggleFoldWidget', 'foldOther', 'unfoldall'\n ][(actionArgs.all ? 2 : 0) + (actionArgs.open ? 1 : 0)]);\n};\ndefaultKeymapLength = defaultKeymap.length; // ace_patch\nexports.handler.defaultKeymap = defaultKeymap;\nexports.handler.actions = actions;\nexports.Vim = vimApi;\n\n}); (function() {\n ace.require([\"ace/keyboard/vim\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n "],"mappings":"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","names":["require_d09463c099fb2c44719380623a5c68fb","__commonJSMin","exports","module","require","Range","hardWrap","editor","options","max","allowMerge","row","endRow","session","line","space","findSpace","indentation","nextLine","trimmedLine","trimmedNextLine","mergedLine","replaceRange","min","before","after","spaceAfter","spaceBefore","start","end","wrapAfterInput","e","cursor","lastDelta","Editor","val","log","d","format","p","x","i","f","EventEmitter","domLib","oop","KEYS","event","Search","useragent","SearchHighlight","multiSelectCommands","TextModeTokenRe","CodeMirror","ace","ch","Pos","name","setter","cm","key","m","cmd","lookupKey","map","handle","found","result","head","o","delta","change","curOp","fn","force","prevOp","op","eventName","handlers","listeners","shouldScroll","sel","pos","toCmPos","ranges","r","primIndex","anchor","toAcePos","range","a","h","isInsert","rowShift","colShift","point","cmp","cmp2","Marker","id","column","bm","increment","unit","amount","goalColumn","renderer","config","screenPos","mode","sc","lh","cw","top","col","query","caseFold","caseSensitive","isRegexp","search","acePos","last","back","text","y","maxHeight","margin","viewMargin","s","strings","optMap","aceOpt","on","highlight","marker","re","v","token","method","index","dir","_","tokenRe","deltas","undoManager","cmPos","StringStream","string","tabSize","match","ok","n","pattern","consume","caseInsensitive","cased","str","substr","inner","dialogDiv","template","bottom","wrap","dialog","closeNotification","newVal","callback","closed","me","close","inp","button","doneTimer","duration","updateSelectionForSurrogateCharacters","curStart","curEnd","charCode","defaultKeymap","defaultKeymapLength","defaultExCommandMap","langmap","parseLangmap","enterVimMode","onCursorActivity","maybeInitVimState","getOnPasteFn","leaveVimMode","highlightTimeout","vim","offsetCursor","actions","numberRegex","wordCharTest","bigWordCharTest","validMarks","validRegisters","latinCharRegex","upperCaseChars","isLine","isLowerCase","k","isMatchableSymbol","isNumber","isUpperCase","isWhiteSpaceString","isEndOfSentenceSymbol","inArray","arr","defineOption","defaultValue","type","aliases","setOption","value","cfg","option","scope","getOption","local","width","createCircularJumpList","size","pointer","tail","buffer","add","oldCur","newCur","current","curMark","useNextSlot","next","trashMark","markPos","cursorEqual","move","offset","mark","inc","find","oldPointer","createInsertModeChanges","c","MacroModeState","macroModeState","vimGlobalState","registerName","register","dom","InputState","resetVimGlobalState","RegisterController","HistoryController","optionName","lastInsertModeKeyTimer","vimApi","InsertModeKey","lhs","rhs","ctx","exCommandDispatcher","actualLength","origLength","userKeymap","mapping","contexts","j","newMapping","updateLangmap","vimKeyFromEvent","prefix","func","exCommands","origin","command","multiSelectHandleKey","handleMacroRecording","clearInputState","logKey","handleEsc","exitVisualMode","exitInsertMode","handleKeyInsertMode","keys","keysAreChars","commandDispatcher","changeQueue","selections","ChangeQueue","from","cursorMin","to","cursorMax","here","handleKeyNonInsertMode","keysMatcher","context","mainKey","doKeyToKey","input","defineMotion","defineAction","defineOperator","mapCommand","_mapCommand","defineRegister","keyToKeyStack","noremap","virtualPrompt","sendKeyToPrompt","lowerKey","parts","vimToCmKeyMap","prompt","fromKey","noremapBefore","keyRe","wasInsert","sendCmKey","promptOptions","showPrompt","specialKey","ignoredKeys","code","langmapString","remapCtrl","keymap","getEscaped","list","part","semicolon","pairs","repeat","reason","Register","linewise","blockwise","changes","registers","operator","append","up","historyBuffer","element","keyMap","inputState","matches","commandMatches","bestMatch","character","lastChar","copyArgs","updateCmSelection","visualMode","operatorMotionArgs","repeatIsExplicit","actionArgs","forward","wholeWordOnly","getSearchState","promptPrefix","originalQuery","originalScrollPos","handleQuery","ignoreCase","smartCase","updateSearchQuery","showConfirm","onPromptClose","logSearchQuery","onPromptKeyUp","keyName","parsedQuery","findNext","clearSearchHighlight","onPromptKeyDown","word","expandWordUnderCursor","isKeyword","escapeRegex","motion","motionArgs","operatorArgs","origHead","copyCursor","clipCursorToContent","origAnchor","oldHead","oldAnchor","newHead","newAnchor","motionResult","motions","jumpList","cachedCursor","recordJumpPosition","updateMark","cursorIsBefore","lastSel","lineOffset","chOffset","cmSel","newPositions","makeCmSelection","lineLength","tmp","expandSelectionToLine","clipToLine","exclusive","operatorMoveTo","operators","actionCommand","_head","getUserVisibleLines","findFirstNonWhiteSpaceCharacter","_cm","cur","state","prev","highlightSearchMatches","prevInputState","findNextFromAndToInclusive","getMarkPos","best","isWrongDirection","equal","between","cursorIsBetween","endCh","first","moveToEol","fold","res","lastCharCoords","goalCoords","resCoords","findParagraph","findSentence","scrollbox","orig","dest","moveToWord","moveToCharacter","recordLastCharacterSearch","findSymbol","moveToColumn","lineText","symbol","style","matched","lineNum","mirroredPairs","selfPaired","inclusive","selectCompanionObject","findBeginningAndEnd","repeated","expandTagUnderCursor","content","getSentence","expandSelection","lastSearch","fillArray","times","args","finalHead","replacement","lastState","startLine","endLine","_args","swapped","toLower","toSwap","endPos","lineHeight","newPos","cursorCoords","newBottom","charCoords","height","lineLastCharPos","lineLastCharCoords","executeMacroRegister","insertAt","newPosition","getLastEditPos","onChange","onKeyEventTargetKeyDown","selectForInsert","_actionArgs","lastSelection","updateLastSelection","finalCh","nextStartCh","curFinalPos","newlineFn","_this","fallback","whitespaceLength","tabs","spaces","currentLine","indent","chompedText","wasChomped","firstIndent","wspace","newIndent","quotient","curPosFinal","lastSelectionCurEnd","selectedArea","getSelectedAreaRange","selectionStart","selectionEnd","selectedText","emptyStrings","selectBlock","lastCh","extendLineToColumn","repeatFn","handler","markName","replaceWith","replaceTo","replaceWithStr","lineStr","numberStr","baseStr","digits","base","number","zeroPadding","lastEditInputState","repeatLastEdit","includeLineBreak","maxCh","direction","ret","prop","offsetLine","offsetCh","partial","full","startIndex","commandMatch","pressed","mapped","isLastCharacter","isLastRegister","prefixLen","pressedPrefix","mappedPrefix","selectedCharacter","cur1","cur2","cur3","cur1before2","cur2before3","trim","isClipped","curHead","getIndex","wasClipped","firstLine","lastLine","baseCh","headCh","newDir","lineHead","atAnchor","atHead","getCurrentSelectedAreaRange","getLastSelectedAreaRange","block","headOffset","anchorOffset","fromCh","toCh","primary","getHead","moveHead","selection","lines","firstNonWS","_a","innerWord","bigWord","noSymbol","multiline","startLineNumber","endLineNumber","idx","wordOnNextLine","test","findWord","wordEnd","startsWithSpace","wordStart","tags","symbolToMode","findSymbolModes","symb","curCh","init","isComplete","lineLen","emptyLineIsWord","charTests","stop","foundWord","words","eodCh","shortCircuit","firstWord","lastWord","keepHPos","retval","charIdxInLine","includeChar","isEmpty","isBoundary","any","skipFold","foldLine","startState","nextChar","curr","ln","lastSentencePos","reverse","curr_index","last_valid","skip_empty_lines","bracketRegexp","openSym","curChar","chars","len","firstIndex","stringAfter","stringBefore","isStringStart","SearchState","overlay","reversed","annotate","splitBySlash","argString","splitBySeparator","findUnescapedSlashes","findUnescapedSeparators","separator","slashes","tokens","escapeNextChar","translateRegex","specials","unescape","out","specialComesNext","charUnescapes","translateRegexReplace","unescapes","unescapeRegexReplace","stream","output","matcher","parseQuery","lastSearchRegister","regexPart","forceIgnoreCase","flagsPart","regexp","pre","makePrompt","desc","shortText","regexEqual","r1","r2","props","rawQuery","searchOverlay","matchSol","searchState","lastEndPos","isInRange","done","ExCommandDispatcher","opt_params","that","commandHistoryRegister","previousCommand","inputStream","params","commandName","numberMatch","offsetMatch","delim","defaultOnly","mapArgs","setArgs","setCfg","expr","forceGet","forceToggle","optionIsBoolean","oldValue","setOptionReturn","regArgs","regInfo","unique","parseArgs","opts","decimal","hex","octal","err","lineStart","lineEnd","radix","numPart","textPart","matchPart","compareFn","b","anum","bnum","comparePatternFn","textOld","inverted","matchedLines","nextCommand","lineHandle","replacePart","trailing","count","confirm","global","startPos","doReplace","sym","startMark","finishMark","finish","searchCursor","lastPos","modifiedLineNumber","joined","replaceAll","replace","newText","unmodifiedLineNumber","findNextValidMatch","lastMatchTo","_value","savedCallback","keepCursor","insertModeChangeRegister","isPlaying","lastChange","logInsertModeChange","extra","keyBuffer","imc","repeatInsertModeChanges","changeObj","selectionCount","insertEnd","handleExternalSelection","repeatForInsert","isAction","cachedInputState","repeatCommand","repeatInsert","changeObject","binding","visualBlock","specialKeyAce","hashId","handleKey","cloneVimState","isHandled","wasMultiselect","old","changeQueueList","getVim","pixelPos","w","left","isbackwards","data","keyCode","insertMode","updateInputMode","isIntsert","status","delayedExecAceCommand"],"sourceRoot":"","file":"d09463c099fb2c44719380623a5c68fb.js"}