1{"version":3,"sources":["../../node_modules/codemirror/keymap/sublime.js"],"names":["mod","exports","module","require","define","amd","CodeMirror","cmds","commands","Pos","findPosSubword","doc","start","dir","ch","clipPos","line","getLine","length","state","type","startPos","pos","e","i","next","charAt","cat","isWordChar","toUpperCase","moveSubword","cm","extendSelectionsBy","range","display","shift","extend","empty","head","from","to","goSubwordLeft","goSubwordRight","scrollLineUp","info","getScrollInfo","somethingSelected","visibleBottomLine","lineAtHeight","top","clientHeight","getCursor","execCommand","scrollTo","defaultTextHeight","scrollLineDown","visibleTopLine","splitSelectionByLine","ranges","listSelections","lineRanges","push","anchor","setSelections","singleSelectionTop","setSelection","scroll","selectLine","extended","insertLine","above","isReadOnly","Pass","operation","len","newSelection","last","at","replaceRange","indentLine","insertLineAfter","insertLineBefore","wordAt","end","word","slice","selectNextOccurrence","fullWord","sublimeFindFullWord","sel","cmpPos","text","getRange","query","RegExp","cur","getSearchCursor","found","findNext","firstLine","isSelectedRange","addSelection","skipAndSelectNextOccurrence","prevAnchor","prevHead","filter","addCursorToSelection","newRanges","newAnchor","findPosV","goalColumn","newHead","cursorCoords","left","newRange","addCursorToPrevLine","addCursorToNextLine","mirror","selectBetweenBrackets","opening","scanForBracket","closing","indexOf","selectScope","puncType","test","undefined","goToBracket","getTokenTypeAt","prev","swapLineUp","linesToMove","newSels","lastLine","scrollIntoView","swapLineDown","toggleCommentIndented","toggleComment","indent","joinLines","joined","offset","obj","actual","exec","duplicateLine","rangeCount","sortLines","caseSensitive","toSort","selected","lines","sort","a","b","au","bu","sortLinesInsensitive","nextBookmark","marks","sublimeBookmarks","current","find","prevBookmark","unshift","pop","toggleBookmark","findMarksAt","findMarks","j","sublimeBookmark","clear","k","splice","markText","clearWhenEmpty","clearBookmarks","selectBookmarks","modifyWordOrSelection","indices","replacements","replaceSelections","smartBackspace","cursors","indentUnit","getOption","cursor","toStartOfLine","column","countColumn","deletePos","findPosH","prevIndent","findColumn","delLineRight","upcaseAtCursor","str","downcaseAtCursor","toLowerCase","setSublimeMark","sublimeMark","setBookmark","selectToSublimeMark","deleteToSublimeMark","tmp","sublimeKilled","swapWithSublimeMark","setCursor","sublimeYank","replaceSelection","showInCenter","bottom","getTarget","findAndGoTo","forward","target","findPrevious","findUnder","findUnderPrevious","findAllUnder","matches","primaryIndex","keyMap","macSublime","Cmd-Left","Shift-Tab","Shift-Ctrl-K","Alt-Q","Ctrl-Left","Ctrl-Right","Ctrl-Alt-Up","Ctrl-Alt-Down","Cmd-L","Shift-Cmd-L","Esc","Cmd-Enter","Shift-Cmd-Enter","Cmd-D","Shift-Cmd-Space","Shift-Cmd-M","Cmd-M","Cmd-Ctrl-Up","Cmd-Ctrl-Down","Cmd-/","Cmd-J","Shift-Cmd-D","F5","Cmd-F5","F2","Shift-F2","Cmd-F2","Shift-Cmd-F2","Alt-F2","Backspace","Cmd-K Cmd-D","Cmd-K Cmd-K","Cmd-K Cmd-U","Cmd-K Cmd-L","Cmd-K Cmd-Space","Cmd-K Cmd-A","Cmd-K Cmd-W","Cmd-K Cmd-X","Cmd-K Cmd-Y","Cmd-K Cmd-C","Cmd-K Cmd-G","Cmd-K Cmd-Backspace","Cmd-K Cmd-1","Cmd-K Cmd-0","Cmd-K Cmd-J","Ctrl-Shift-Up","Ctrl-Shift-Down","Cmd-F3","Shift-Cmd-F3","Alt-F3","Shift-Cmd-[","Shift-Cmd-]","Cmd-I","Shift-Cmd-I","Cmd-H","F3","Shift-F3","fallthrough","normalizeKeyMap","pcSublime","Ctrl-T","Alt-Left","Alt-Right","Ctrl-Up","Ctrl-Down","Ctrl-L","Shift-Ctrl-L","Ctrl-Enter","Shift-Ctrl-Enter","Ctrl-D","Shift-Ctrl-Space","Shift-Ctrl-M","Ctrl-M","Shift-Ctrl-Up","Shift-Ctrl-Down","Ctrl-/","Ctrl-J","Shift-Ctrl-D","F9","Ctrl-F9","Ctrl-F2","Shift-Ctrl-F2","Ctrl-K Ctrl-D","Ctrl-K Ctrl-K","Ctrl-K Ctrl-U","Ctrl-K Ctrl-L","Ctrl-K Ctrl-Space","Ctrl-K Ctrl-A","Ctrl-K Ctrl-W","Ctrl-K Ctrl-X","Ctrl-K Ctrl-Y","Ctrl-K Ctrl-C","Ctrl-K Ctrl-G","Ctrl-K Ctrl-Backspace","Ctrl-K Ctrl-1","Ctrl-K Ctrl-0","Ctrl-K Ctrl-J","Ctrl-F3","Shift-Ctrl-F3","Shift-Ctrl-[","Shift-Ctrl-]","Ctrl-I","Shift-Ctrl-I","Ctrl-H","mac","default","macDefault","sublime"],"mappings":"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","file":"sublime.min.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// A rough approximation of Sublime Text's keybindings\n// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"), require(\"../addon/search/searchcursor\"), require(\"../addon/edit/matchbrackets\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\", \"../addon/search/searchcursor\", \"../addon/edit/matchbrackets\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var cmds = CodeMirror.commands;\n  var Pos = CodeMirror.Pos;\n\n  // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that.\n  function findPosSubword(doc, start, dir) {\n    if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1));\n    var line = doc.getLine(start.line);\n    if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0));\n    var state = \"start\", type, startPos = start.ch;\n    for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) {\n      var next = line.charAt(dir < 0 ? pos - 1 : pos);\n      var cat = next != \"_\" && CodeMirror.isWordChar(next) ? \"w\" : \"o\";\n      if (cat == \"w\" && next.toUpperCase() == next) cat = \"W\";\n      if (state == \"start\") {\n        if (cat != \"o\") { state = \"in\"; type = cat; }\n        else startPos = pos + dir\n      } else if (state == \"in\") {\n        if (type != cat) {\n          if (type == \"w\" && cat == \"W\" && dir < 0) pos--;\n          if (type == \"W\" && cat == \"w\" && dir > 0) { // From uppercase to lowercase\n            if (pos == startPos + 1) { type = \"w\"; continue; }\n            else pos--;\n          }\n          break;\n        }\n      }\n    }\n    return Pos(start.line, pos);\n  }\n\n  function moveSubword(cm, dir) {\n    cm.extendSelectionsBy(function(range) {\n      if (cm.display.shift || cm.doc.extend || range.empty())\n        return findPosSubword(cm.doc, range.head, dir);\n      else\n        return dir < 0 ? range.from() : range.to();\n    });\n  }\n\n  cmds.goSubwordLeft = function(cm) { moveSubword(cm, -1); };\n  cmds.goSubwordRight = function(cm) { moveSubword(cm, 1); };\n\n  cmds.scrollLineUp = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, \"local\");\n      if (cm.getCursor().line >= visibleBottomLine)\n        cm.execCommand(\"goLineUp\");\n    }\n    cm.scrollTo(null, info.top - cm.defaultTextHeight());\n  };\n  cmds.scrollLineDown = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleTopLine = cm.lineAtHeight(info.top, \"local\")+1;\n      if (cm.getCursor().line <= visibleTopLine)\n        cm.execCommand(\"goLineDown\");\n    }\n    cm.scrollTo(null, info.top + cm.defaultTextHeight());\n  };\n\n  cmds.splitSelectionByLine = function(cm) {\n    var ranges = cm.listSelections(), lineRanges = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      for (var line = from.line; line <= to.line; ++line)\n        if (!(to.line > from.line && line == to.line && to.ch == 0))\n          lineRanges.push({anchor: line == from.line ? from : Pos(line, 0),\n                           head: line == to.line ? to : Pos(line)});\n    }\n    cm.setSelections(lineRanges, 0);\n  };\n\n  cmds.singleSelectionTop = function(cm) {\n    var range = cm.listSelections()[0];\n    cm.setSelection(range.anchor, range.head, {scroll: false});\n  };\n\n  cmds.selectLine = function(cm) {\n    var ranges = cm.listSelections(), extended = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      extended.push({anchor: Pos(range.from().line, 0),\n                     head: Pos(range.to().line + 1, 0)});\n    }\n    cm.setSelections(extended);\n  };\n\n  function insertLine(cm, above) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    cm.operation(function() {\n      var len = cm.listSelections().length, newSelection = [], last = -1;\n      for (var i = 0; i < len; i++) {\n        var head = cm.listSelections()[i].head;\n        if (head.line <= last) continue;\n        var at = Pos(head.line + (above ? 0 : 1), 0);\n        cm.replaceRange(\"\\n\", at, null, \"+insertLine\");\n        cm.indentLine(at.line, null, true);\n        newSelection.push({head: at, anchor: at});\n        last = head.line + 1;\n      }\n      cm.setSelections(newSelection);\n    });\n    cm.execCommand(\"indentAuto\");\n  }\n\n  cmds.insertLineAfter = function(cm) { return insertLine(cm, false); };\n\n  cmds.insertLineBefore = function(cm) { return insertLine(cm, true); };\n\n  function wordAt(cm, pos) {\n    var start = pos.ch, end = start, line = cm.getLine(pos.line);\n    while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start;\n    while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end;\n    return {from: Pos(pos.line, start), to: Pos(pos.line, end), word: line.slice(start, end)};\n  }\n\n  cmds.selectNextOccurrence = function(cm) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel;\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      cm.setSelection(word.from, word.to);\n      fullWord = true;\n    } else {\n      var text = cm.getRange(from, to);\n      var query = fullWord ? new RegExp(\"\\\\b\" + text + \"\\\\b\") : text;\n      var cur = cm.getSearchCursor(query, to);\n      var found = cur.findNext();\n      if (!found) {\n        cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0));\n        found = cur.findNext();\n      }\n      if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return\n      cm.addSelection(cur.from(), cur.to());\n    }\n    if (fullWord)\n      cm.state.sublimeFindFullWord = cm.doc.sel;\n  };\n\n  cmds.skipAndSelectNextOccurrence = function(cm) {\n    var prevAnchor = cm.getCursor(\"anchor\"), prevHead = cm.getCursor(\"head\");\n    cmds.selectNextOccurrence(cm);\n    if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) {\n      cm.doc.setSelections(cm.doc.listSelections()\n          .filter(function (sel) {\n            return sel.anchor != prevAnchor || sel.head != prevHead;\n          }));\n    }\n  }\n\n  function addCursorToSelection(cm, dir) {\n    var ranges = cm.listSelections(), newRanges = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      var newAnchor = cm.findPosV(\n          range.anchor, dir, \"line\", range.anchor.goalColumn);\n      var newHead = cm.findPosV(\n          range.head, dir, \"line\", range.head.goalColumn);\n      newAnchor.goalColumn = range.anchor.goalColumn != null ?\n          range.anchor.goalColumn : cm.cursorCoords(range.anchor, \"div\").left;\n      newHead.goalColumn = range.head.goalColumn != null ?\n          range.head.goalColumn : cm.cursorCoords(range.head, \"div\").left;\n      var newRange = {anchor: newAnchor, head: newHead};\n      newRanges.push(range);\n      newRanges.push(newRange);\n    }\n    cm.setSelections(newRanges);\n  }\n  cmds.addCursorToPrevLine = function(cm) { addCursorToSelection(cm, -1); };\n  cmds.addCursorToNextLine = function(cm) { addCursorToSelection(cm, 1); };\n\n  function isSelectedRange(ranges, from, to) {\n    for (var i = 0; i < ranges.length; i++)\n      if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 &&\n          CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true\n    return false\n  }\n\n  var mirror = \"(){}[]\";\n  function selectBetweenBrackets(cm) {\n    var ranges = cm.listSelections(), newRanges = []\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], pos = range.head, opening = cm.scanForBracket(pos, -1);\n      if (!opening) return false;\n      for (;;) {\n        var closing = cm.scanForBracket(pos, 1);\n        if (!closing) return false;\n        if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) {\n          var startPos = Pos(opening.pos.line, opening.pos.ch + 1);\n          if (CodeMirror.cmpPos(startPos, range.from()) == 0 &&\n              CodeMirror.cmpPos(closing.pos, range.to()) == 0) {\n            opening = cm.scanForBracket(opening.pos, -1);\n            if (!opening) return false;\n          } else {\n            newRanges.push({anchor: startPos, head: closing.pos});\n            break;\n          }\n        }\n        pos = Pos(closing.pos.line, closing.pos.ch + 1);\n      }\n    }\n    cm.setSelections(newRanges);\n    return true;\n  }\n\n  cmds.selectScope = function(cm) {\n    selectBetweenBrackets(cm) || cm.execCommand(\"selectAll\");\n  };\n  cmds.selectBetweenBrackets = function(cm) {\n    if (!selectBetweenBrackets(cm)) return CodeMirror.Pass;\n  };\n\n  function puncType(type) {\n    return !type ? null : /\\bpunctuation\\b/.test(type) ? type : undefined\n  }\n\n  cmds.goToBracket = function(cm) {\n    cm.extendSelectionsBy(function(range) {\n      var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head)));\n      if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos;\n      var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1))));\n      return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head;\n    });\n  };\n\n  cmds.swapLineUp = function(cm) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from().line - 1, to = range.to().line;\n      newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch),\n                    head: Pos(range.head.line - 1, range.head.ch)});\n      if (range.to().ch == 0 && !range.empty()) --to;\n      if (from > at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = 0; i < linesToMove.length; i += 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        if (to > cm.lastLine())\n          cm.replaceRange(\"\\n\" + line, Pos(cm.lastLine()), null, \"+swapLine\");\n        else\n          cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n      }\n      cm.setSelections(newSels);\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.swapLineDown = function(cm) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var range = ranges[i], from = range.to().line + 1, to = range.from().line;\n      if (range.to().ch == 0 && !range.empty()) from--;\n      if (from < at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = linesToMove.length - 2; i >= 0; i -= 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        if (from == cm.lastLine())\n          cm.replaceRange(\"\", Pos(from - 1), Pos(from), \"+swapLine\");\n        else\n          cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.toggleCommentIndented = function(cm) {\n    cm.toggleComment({ indent: true });\n  }\n\n  cmds.joinLines = function(cm) {\n    var ranges = cm.listSelections(), joined = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from();\n      var start = from.line, end = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == end)\n        end = ranges[++i].to().line;\n      joined.push({start: start, end: end, anchor: !range.empty() && from});\n    }\n    cm.operation(function() {\n      var offset = 0, ranges = [];\n      for (var i = 0; i < joined.length; i++) {\n        var obj = joined[i];\n        var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), head;\n        for (var line = obj.start; line <= obj.end; line++) {\n          var actual = line - offset;\n          if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1);\n          if (actual < cm.lastLine()) {\n            cm.replaceRange(\" \", Pos(actual), Pos(actual + 1, /^\\s*/.exec(cm.getLine(actual + 1))[0].length));\n            ++offset;\n          }\n        }\n        ranges.push({anchor: anchor || head, head: head});\n      }\n      cm.setSelections(ranges, 0);\n    });\n  };\n\n  cmds.duplicateLine = function(cm) {\n    cm.operation(function() {\n      var rangeCount = cm.listSelections().length;\n      for (var i = 0; i < rangeCount; i++) {\n        var range = cm.listSelections()[i];\n        if (range.empty())\n          cm.replaceRange(cm.getLine(range.head.line) + \"\\n\", Pos(range.head.line, 0));\n        else\n          cm.replaceRange(cm.getRange(range.from(), range.to()), range.from());\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n\n  function sortLines(cm, caseSensitive) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), toSort = [], selected;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      if (range.empty()) continue;\n      var from = range.from().line, to = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == to)\n        to = ranges[++i].to().line;\n      if (!ranges[i].to().ch) to--;\n      toSort.push(from, to);\n    }\n    if (toSort.length) selected = true;\n    else toSort.push(cm.firstLine(), cm.lastLine());\n\n    cm.operation(function() {\n      var ranges = [];\n      for (var i = 0; i < toSort.length; i += 2) {\n        var from = toSort[i], to = toSort[i + 1];\n        var start = Pos(from, 0), end = Pos(to);\n        var lines = cm.getRange(start, end, false);\n        if (caseSensitive)\n          lines.sort();\n        else\n          lines.sort(function(a, b) {\n            var au = a.toUpperCase(), bu = b.toUpperCase();\n            if (au != bu) { a = au; b = bu; }\n            return a < b ? -1 : a == b ? 0 : 1;\n          });\n        cm.replaceRange(lines, start, end);\n        if (selected) ranges.push({anchor: start, head: Pos(to + 1, 0)});\n      }\n      if (selected) cm.setSelections(ranges, 0);\n    });\n  }\n\n  cmds.sortLines = function(cm) { sortLines(cm, true); };\n  cmds.sortLinesInsensitive = function(cm) { sortLines(cm, false); };\n\n  cmds.nextBookmark = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      var current = marks.shift();\n      var found = current.find();\n      if (found) {\n        marks.push(current);\n        return cm.setSelection(found.from, found.to);\n      }\n    }\n  };\n\n  cmds.prevBookmark = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      marks.unshift(marks.pop());\n      var found = marks[marks.length - 1].find();\n      if (!found)\n        marks.pop();\n      else\n        return cm.setSelection(found.from, found.to);\n    }\n  };\n\n  cmds.toggleBookmark = function(cm) {\n    var ranges = cm.listSelections();\n    var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []);\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to);\n      for (var j = 0; j < found.length; j++) {\n        if (found[j].sublimeBookmark) {\n          found[j].clear();\n          for (var k = 0; k < marks.length; k++)\n            if (marks[k] == found[j])\n              marks.splice(k--, 1);\n          break;\n        }\n      }\n      if (j == found.length)\n        marks.push(cm.markText(from, to, {sublimeBookmark: true, clearWhenEmpty: false}));\n    }\n  };\n\n  cmds.clearBookmarks = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear();\n    marks.length = 0;\n  };\n\n  cmds.selectBookmarks = function(cm) {\n    var marks = cm.state.sublimeBookmarks, ranges = [];\n    if (marks) for (var i = 0; i < marks.length; i++) {\n      var found = marks[i].find();\n      if (!found)\n        marks.splice(i--, 0);\n      else\n        ranges.push({anchor: found.from, head: found.to});\n    }\n    if (ranges.length)\n      cm.setSelections(ranges, 0);\n  };\n\n  function modifyWordOrSelection(cm, mod) {\n    cm.operation(function() {\n      var ranges = cm.listSelections(), indices = [], replacements = [];\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.empty()) { indices.push(i); replacements.push(\"\"); }\n        else replacements.push(mod(cm.getRange(range.from(), range.to())));\n      }\n      cm.replaceSelections(replacements, \"around\", \"case\");\n      for (var i = indices.length - 1, at; i >= 0; i--) {\n        var range = ranges[indices[i]];\n        if (at && CodeMirror.cmpPos(range.head, at) > 0) continue;\n        var word = wordAt(cm, range.head);\n        at = word.from;\n        cm.replaceRange(mod(word.word), word.from, word.to);\n      }\n    });\n  }\n\n  cmds.smartBackspace = function(cm) {\n    if (cm.somethingSelected()) return CodeMirror.Pass;\n\n    cm.operation(function() {\n      var cursors = cm.listSelections();\n      var indentUnit = cm.getOption(\"indentUnit\");\n\n      for (var i = cursors.length - 1; i >= 0; i--) {\n        var cursor = cursors[i].head;\n        var toStartOfLine = cm.getRange({line: cursor.line, ch: 0}, cursor);\n        var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption(\"tabSize\"));\n\n        // Delete by one character by default\n        var deletePos = cm.findPosH(cursor, -1, \"char\", false);\n\n        if (toStartOfLine && !/\\S/.test(toStartOfLine) && column % indentUnit == 0) {\n          var prevIndent = new Pos(cursor.line,\n            CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit));\n\n          // Smart delete only if we found a valid prevIndent location\n          if (prevIndent.ch != cursor.ch) deletePos = prevIndent;\n        }\n\n        cm.replaceRange(\"\", deletePos, cursor, \"+delete\");\n      }\n    });\n  };\n\n  cmds.delLineRight = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(\"\", ranges[i].anchor, Pos(ranges[i].to().line), \"+delete\");\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.upcaseAtCursor = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toUpperCase(); });\n  };\n  cmds.downcaseAtCursor = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toLowerCase(); });\n  };\n\n  cmds.setSublimeMark = function(cm) {\n    if (cm.state.sublimeMark) cm.state.sublimeMark.clear();\n    cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n  };\n  cmds.selectToSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) cm.setSelection(cm.getCursor(), found);\n  };\n  cmds.deleteToSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      var from = cm.getCursor(), to = found;\n      if (CodeMirror.cmpPos(from, to) > 0) { var tmp = to; to = from; from = tmp; }\n      cm.state.sublimeKilled = cm.getRange(from, to);\n      cm.replaceRange(\"\", from, to);\n    }\n  };\n  cmds.swapWithSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      cm.state.sublimeMark.clear();\n      cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n      cm.setCursor(found);\n    }\n  };\n  cmds.sublimeYank = function(cm) {\n    if (cm.state.sublimeKilled != null)\n      cm.replaceSelection(cm.state.sublimeKilled, null, \"paste\");\n  };\n\n  cmds.showInCenter = function(cm) {\n    var pos = cm.cursorCoords(null, \"local\");\n    cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2);\n  };\n\n  function getTarget(cm) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      from = word.from;\n      to = word.to;\n    }\n    return {from: from, to: to, query: cm.getRange(from, to), word: word};\n  }\n\n  function findAndGoTo(cm, forward) {\n    var target = getTarget(cm);\n    if (!target) return;\n    var query = target.query;\n    var cur = cm.getSearchCursor(query, forward ? target.to : target.from);\n\n    if (forward ? cur.findNext() : cur.findPrevious()) {\n      cm.setSelection(cur.from(), cur.to());\n    } else {\n      cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0)\n                                              : cm.clipPos(Pos(cm.lastLine())));\n      if (forward ? cur.findNext() : cur.findPrevious())\n        cm.setSelection(cur.from(), cur.to());\n      else if (target.word)\n        cm.setSelection(target.from, target.to);\n    }\n  };\n  cmds.findUnder = function(cm) { findAndGoTo(cm, true); };\n  cmds.findUnderPrevious = function(cm) { findAndGoTo(cm,false); };\n  cmds.findAllUnder = function(cm) {\n    var target = getTarget(cm);\n    if (!target) return;\n    var cur = cm.getSearchCursor(target.query);\n    var matches = [];\n    var primaryIndex = -1;\n    while (cur.findNext()) {\n      matches.push({anchor: cur.from(), head: cur.to()});\n      if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch)\n        primaryIndex++;\n    }\n    cm.setSelections(matches, primaryIndex);\n  };\n\n\n  var keyMap = CodeMirror.keyMap;\n  keyMap.macSublime = {\n    \"Cmd-Left\": \"goLineStartSmart\",\n    \"Shift-Tab\": \"indentLess\",\n    \"Shift-Ctrl-K\": \"deleteLine\",\n    \"Alt-Q\": \"wrapLines\",\n    \"Ctrl-Left\": \"goSubwordLeft\",\n    \"Ctrl-Right\": \"goSubwordRight\",\n    \"Ctrl-Alt-Up\": \"scrollLineUp\",\n    \"Ctrl-Alt-Down\": \"scrollLineDown\",\n    \"Cmd-L\": \"selectLine\",\n    \"Shift-Cmd-L\": \"splitSelectionByLine\",\n    \"Esc\": \"singleSelectionTop\",\n    \"Cmd-Enter\": \"insertLineAfter\",\n    \"Shift-Cmd-Enter\": \"insertLineBefore\",\n    \"Cmd-D\": \"selectNextOccurrence\",\n    \"Shift-Cmd-Space\": \"selectScope\",\n    \"Shift-Cmd-M\": \"selectBetweenBrackets\",\n    \"Cmd-M\": \"goToBracket\",\n    \"Cmd-Ctrl-Up\": \"swapLineUp\",\n    \"Cmd-Ctrl-Down\": \"swapLineDown\",\n    \"Cmd-/\": \"toggleCommentIndented\",\n    \"Cmd-J\": \"joinLines\",\n    \"Shift-Cmd-D\": \"duplicateLine\",\n    \"F5\": \"sortLines\",\n    \"Cmd-F5\": \"sortLinesInsensitive\",\n    \"F2\": \"nextBookmark\",\n    \"Shift-F2\": \"prevBookmark\",\n    \"Cmd-F2\": \"toggleBookmark\",\n    \"Shift-Cmd-F2\": \"clearBookmarks\",\n    \"Alt-F2\": \"selectBookmarks\",\n    \"Backspace\": \"smartBackspace\",\n    \"Cmd-K Cmd-D\": \"skipAndSelectNextOccurrence\",\n    \"Cmd-K Cmd-K\": \"delLineRight\",\n    \"Cmd-K Cmd-U\": \"upcaseAtCursor\",\n    \"Cmd-K Cmd-L\": \"downcaseAtCursor\",\n    \"Cmd-K Cmd-Space\": \"setSublimeMark\",\n    \"Cmd-K Cmd-A\": \"selectToSublimeMark\",\n    \"Cmd-K Cmd-W\": \"deleteToSublimeMark\",\n    \"Cmd-K Cmd-X\": \"swapWithSublimeMark\",\n    \"Cmd-K Cmd-Y\": \"sublimeYank\",\n    \"Cmd-K Cmd-C\": \"showInCenter\",\n    \"Cmd-K Cmd-G\": \"clearBookmarks\",\n    \"Cmd-K Cmd-Backspace\": \"delLineLeft\",\n    \"Cmd-K Cmd-1\": \"foldAll\",\n    \"Cmd-K Cmd-0\": \"unfoldAll\",\n    \"Cmd-K Cmd-J\": \"unfoldAll\",\n    \"Ctrl-Shift-Up\": \"addCursorToPrevLine\",\n    \"Ctrl-Shift-Down\": \"addCursorToNextLine\",\n    \"Cmd-F3\": \"findUnder\",\n    \"Shift-Cmd-F3\": \"findUnderPrevious\",\n    \"Alt-F3\": \"findAllUnder\",\n    \"Shift-Cmd-[\": \"fold\",\n    \"Shift-Cmd-]\": \"unfold\",\n    \"Cmd-I\": \"findIncremental\",\n    \"Shift-Cmd-I\": \"findIncrementalReverse\",\n    \"Cmd-H\": \"replace\",\n    \"F3\": \"findNext\",\n    \"Shift-F3\": \"findPrev\",\n    \"fallthrough\": \"macDefault\"\n  };\n  CodeMirror.normalizeKeyMap(keyMap.macSublime);\n\n  keyMap.pcSublime = {\n    \"Shift-Tab\": \"indentLess\",\n    \"Shift-Ctrl-K\": \"deleteLine\",\n    \"Alt-Q\": \"wrapLines\",\n    \"Ctrl-T\": \"transposeChars\",\n    \"Alt-Left\": \"goSubwordLeft\",\n    \"Alt-Right\": \"goSubwordRight\",\n    \"Ctrl-Up\": \"scrollLineUp\",\n    \"Ctrl-Down\": \"scrollLineDown\",\n    \"Ctrl-L\": \"selectLine\",\n    \"Shift-Ctrl-L\": \"splitSelectionByLine\",\n    \"Esc\": \"singleSelectionTop\",\n    \"Ctrl-Enter\": \"insertLineAfter\",\n    \"Shift-Ctrl-Enter\": \"insertLineBefore\",\n    \"Ctrl-D\": \"selectNextOccurrence\",\n    \"Shift-Ctrl-Space\": \"selectScope\",\n    \"Shift-Ctrl-M\": \"selectBetweenBrackets\",\n    \"Ctrl-M\": \"goToBracket\",\n    \"Shift-Ctrl-Up\": \"swapLineUp\",\n    \"Shift-Ctrl-Down\": \"swapLineDown\",\n    \"Ctrl-/\": \"toggleCommentIndented\",\n    \"Ctrl-J\": \"joinLines\",\n    \"Shift-Ctrl-D\": \"duplicateLine\",\n    \"F9\": \"sortLines\",\n    \"Ctrl-F9\": \"sortLinesInsensitive\",\n    \"F2\": \"nextBookmark\",\n    \"Shift-F2\": \"prevBookmark\",\n    \"Ctrl-F2\": \"toggleBookmark\",\n    \"Shift-Ctrl-F2\": \"clearBookmarks\",\n    \"Alt-F2\": \"selectBookmarks\",\n    \"Backspace\": \"smartBackspace\",\n    \"Ctrl-K Ctrl-D\": \"skipAndSelectNextOccurrence\",\n    \"Ctrl-K Ctrl-K\": \"delLineRight\",\n    \"Ctrl-K Ctrl-U\": \"upcaseAtCursor\",\n    \"Ctrl-K Ctrl-L\": \"downcaseAtCursor\",\n    \"Ctrl-K Ctrl-Space\": \"setSublimeMark\",\n    \"Ctrl-K Ctrl-A\": \"selectToSublimeMark\",\n    \"Ctrl-K Ctrl-W\": \"deleteToSublimeMark\",\n    \"Ctrl-K Ctrl-X\": \"swapWithSublimeMark\",\n    \"Ctrl-K Ctrl-Y\": \"sublimeYank\",\n    \"Ctrl-K Ctrl-C\": \"showInCenter\",\n    \"Ctrl-K Ctrl-G\": \"clearBookmarks\",\n    \"Ctrl-K Ctrl-Backspace\": \"delLineLeft\",\n    \"Ctrl-K Ctrl-1\": \"foldAll\",\n    \"Ctrl-K Ctrl-0\": \"unfoldAll\",\n    \"Ctrl-K Ctrl-J\": \"unfoldAll\",\n    \"Ctrl-Alt-Up\": \"addCursorToPrevLine\",\n    \"Ctrl-Alt-Down\": \"addCursorToNextLine\",\n    \"Ctrl-F3\": \"findUnder\",\n    \"Shift-Ctrl-F3\": \"findUnderPrevious\",\n    \"Alt-F3\": \"findAllUnder\",\n    \"Shift-Ctrl-[\": \"fold\",\n    \"Shift-Ctrl-]\": \"unfold\",\n    \"Ctrl-I\": \"findIncremental\",\n    \"Shift-Ctrl-I\": \"findIncrementalReverse\",\n    \"Ctrl-H\": \"replace\",\n    \"F3\": \"findNext\",\n    \"Shift-F3\": \"findPrev\",\n    \"fallthrough\": \"pcDefault\"\n  };\n  CodeMirror.normalizeKeyMap(keyMap.pcSublime);\n\n  var mac = keyMap.default == keyMap.macDefault;\n  keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime;\n});\n"]}