ace-rails-ap 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ace/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/ace/ace.js +993 -613
  4. data/vendor/assets/javascripts/ace/ext-chromevox.js +3 -4
  5. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +5 -6
  6. data/vendor/assets/javascripts/ace/ext-emmet.js +50 -21
  7. data/vendor/assets/javascripts/ace/ext-language_tools.js +21 -19
  8. data/vendor/assets/javascripts/ace/ext-modelist.js +11 -6
  9. data/vendor/assets/javascripts/ace/ext-old_ie.js +12 -5
  10. data/vendor/assets/javascripts/ace/ext-searchbox.js +12 -5
  11. data/vendor/assets/javascripts/ace/ext-settings_menu.js +14 -7
  12. data/vendor/assets/javascripts/ace/ext-static_highlight.js +5 -5
  13. data/vendor/assets/javascripts/ace/ext-statusbar.js +14 -12
  14. data/vendor/assets/javascripts/ace/ext-textarea.js +1 -2
  15. data/vendor/assets/javascripts/ace/ext-themelist.js +2 -0
  16. data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -13
  17. data/vendor/assets/javascripts/ace/keybinding-emacs.js +76 -78
  18. data/vendor/assets/javascripts/ace/keybinding-vim.js +221 -80
  19. data/vendor/assets/javascripts/ace/mode-abc.js +2 -3
  20. data/vendor/assets/javascripts/ace/mode-actionscript.js +2 -3
  21. data/vendor/assets/javascripts/ace/mode-apache_conf.js +2 -3
  22. data/vendor/assets/javascripts/ace/mode-applescript.js +2 -3
  23. data/vendor/assets/javascripts/ace/mode-autohotkey.js +2 -3
  24. data/vendor/assets/javascripts/ace/mode-batchfile.js +2 -3
  25. data/vendor/assets/javascripts/ace/mode-c_cpp.js +8 -5
  26. data/vendor/assets/javascripts/ace/mode-coffee.js +1 -1
  27. data/vendor/assets/javascripts/ace/mode-coldfusion.js +533 -139
  28. data/vendor/assets/javascripts/ace/mode-csharp.js +4 -5
  29. data/vendor/assets/javascripts/ace/mode-css.js +185 -6
  30. data/vendor/assets/javascripts/ace/mode-curly.js +495 -138
  31. data/vendor/assets/javascripts/ace/mode-d.js +2 -3
  32. data/vendor/assets/javascripts/ace/mode-dart.js +8 -5
  33. data/vendor/assets/javascripts/ace/mode-django.js +495 -138
  34. data/vendor/assets/javascripts/ace/mode-dockerfile.js +59 -14
  35. data/vendor/assets/javascripts/ace/mode-dot.js +2 -3
  36. data/vendor/assets/javascripts/ace/mode-ejs.js +497 -152
  37. data/vendor/assets/javascripts/ace/mode-elm.js +6 -4
  38. data/vendor/assets/javascripts/ace/mode-erlang.js +3 -4
  39. data/vendor/assets/javascripts/ace/mode-forth.js +3 -4
  40. data/vendor/assets/javascripts/ace/mode-ftl.js +145 -17
  41. data/vendor/assets/javascripts/ace/mode-gherkin.js +58 -25
  42. data/vendor/assets/javascripts/ace/mode-glsl.js +8 -5
  43. data/vendor/assets/javascripts/ace/mode-golang.js +36 -25
  44. data/vendor/assets/javascripts/ace/mode-groovy.js +145 -17
  45. data/vendor/assets/javascripts/ace/mode-handlebars.js +496 -140
  46. data/vendor/assets/javascripts/ace/mode-haskell.js +3 -4
  47. data/vendor/assets/javascripts/ace/mode-haxe.js +4 -5
  48. data/vendor/assets/javascripts/ace/mode-html.js +495 -138
  49. data/vendor/assets/javascripts/ace/mode-html_elixir.js +3372 -0
  50. data/vendor/assets/javascripts/ace/mode-html_ruby.js +495 -138
  51. data/vendor/assets/javascripts/ace/mode-ini.js +1 -1
  52. data/vendor/assets/javascripts/ace/mode-io.js +2 -3
  53. data/vendor/assets/javascripts/ace/mode-jack.js +4 -5
  54. data/vendor/assets/javascripts/ace/mode-jade.js +155 -25
  55. data/vendor/assets/javascripts/ace/mode-java.js +145 -17
  56. data/vendor/assets/javascripts/ace/mode-javascript.js +145 -17
  57. data/vendor/assets/javascripts/ace/mode-json.js +4 -5
  58. data/vendor/assets/javascripts/ace/mode-jsoniq.js +4 -5
  59. data/vendor/assets/javascripts/ace/mode-jsp.js +150 -23
  60. data/vendor/assets/javascripts/ace/mode-jsx.js +4 -5
  61. data/vendor/assets/javascripts/ace/mode-julia.js +2 -3
  62. data/vendor/assets/javascripts/ace/mode-less.js +5 -6
  63. data/vendor/assets/javascripts/ace/mode-liquid.js +145 -17
  64. data/vendor/assets/javascripts/ace/mode-logiql.js +2 -2
  65. data/vendor/assets/javascripts/ace/mode-lsl.js +8 -10
  66. data/vendor/assets/javascripts/ace/mode-lua.js +2 -2
  67. data/vendor/assets/javascripts/ace/mode-luapage.js +497 -140
  68. data/vendor/assets/javascripts/ace/mode-makefile.js +54 -8
  69. data/vendor/assets/javascripts/ace/mode-markdown.js +497 -139
  70. data/vendor/assets/javascripts/ace/mode-mask.js +150 -22
  71. data/vendor/assets/javascripts/ace/mode-maze.js +283 -0
  72. data/vendor/assets/javascripts/ace/mode-mel.js +4 -5
  73. data/vendor/assets/javascripts/ace/mode-mushcode.js +0 -1
  74. data/vendor/assets/javascripts/ace/mode-mysql.js +1 -1
  75. data/vendor/assets/javascripts/ace/mode-nix.js +8 -5
  76. data/vendor/assets/javascripts/ace/mode-objectivec.js +6 -3
  77. data/vendor/assets/javascripts/ace/mode-perl.js +4 -5
  78. data/vendor/assets/javascripts/ace/mode-pgsql.js +141 -12
  79. data/vendor/assets/javascripts/ace/mode-php.js +9872 -143
  80. data/vendor/assets/javascripts/ace/mode-powershell.js +4 -5
  81. data/vendor/assets/javascripts/ace/mode-praat.js +18 -14
  82. data/vendor/assets/javascripts/ace/mode-prolog.js +2 -3
  83. data/vendor/assets/javascripts/ace/mode-protobuf.js +8 -5
  84. data/vendor/assets/javascripts/ace/mode-rhtml.js +495 -138
  85. data/vendor/assets/javascripts/ace/mode-ruby.js +2 -2
  86. data/vendor/assets/javascripts/ace/mode-rust.js +32 -39
  87. data/vendor/assets/javascripts/ace/mode-scad.js +4 -5
  88. data/vendor/assets/javascripts/ace/mode-scala.js +158 -21
  89. data/vendor/assets/javascripts/ace/mode-scheme.js +118 -1
  90. data/vendor/assets/javascripts/ace/mode-scss.js +4 -5
  91. data/vendor/assets/javascripts/ace/mode-sh.js +58 -13
  92. data/vendor/assets/javascripts/ace/mode-sjs.js +145 -17
  93. data/vendor/assets/javascripts/ace/mode-smarty.js +495 -138
  94. data/vendor/assets/javascripts/ace/mode-soy_template.js +496 -140
  95. data/vendor/assets/javascripts/ace/mode-sql.js +12 -4
  96. data/vendor/assets/javascripts/ace/mode-sqlserver.js +437 -0
  97. data/vendor/assets/javascripts/ace/mode-svg.js +147 -20
  98. data/vendor/assets/javascripts/ace/mode-swift.js +738 -0
  99. data/vendor/assets/javascripts/ace/mode-swig.js +1099 -0
  100. data/vendor/assets/javascripts/ace/mode-tcl.js +2 -3
  101. data/vendor/assets/javascripts/ace/mode-tex.js +1 -0
  102. data/vendor/assets/javascripts/ace/mode-toml.js +4 -0
  103. data/vendor/assets/javascripts/ace/mode-twig.js +495 -138
  104. data/vendor/assets/javascripts/ace/mode-typescript.js +147 -19
  105. data/vendor/assets/javascripts/ace/mode-vala.js +4 -5
  106. data/vendor/assets/javascripts/ace/mode-vbscript.js +26 -13
  107. data/vendor/assets/javascripts/ace/mode-velocity.js +495 -138
  108. data/vendor/assets/javascripts/ace/mode-verilog.js +8 -0
  109. data/vendor/assets/javascripts/ace/mode-xml.js +2 -3
  110. data/vendor/assets/javascripts/ace/mode-xquery.js +4 -5
  111. data/vendor/assets/javascripts/ace/snippets/actionscript.js +5 -0
  112. data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
  113. data/vendor/assets/javascripts/ace/snippets/java.js +6 -0
  114. data/vendor/assets/javascripts/ace/snippets/javascript.js +13 -0
  115. data/vendor/assets/javascripts/ace/snippets/lsl.js +166 -0
  116. data/vendor/assets/javascripts/ace/snippets/maze.js +16 -0
  117. data/vendor/assets/javascripts/ace/snippets/php.js +105 -4
  118. data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
  119. data/vendor/assets/javascripts/ace/snippets/swift.js +7 -0
  120. data/vendor/assets/javascripts/ace/snippets/swig.js +7 -0
  121. data/vendor/assets/javascripts/ace/theme-clouds.js +0 -1
  122. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +0 -1
  123. data/vendor/assets/javascripts/ace/theme-cobalt.js +3 -3
  124. data/vendor/assets/javascripts/ace/theme-dawn.js +0 -1
  125. data/vendor/assets/javascripts/ace/theme-github.js +0 -1
  126. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +0 -1
  127. data/vendor/assets/javascripts/ace/theme-iplastic.js +121 -0
  128. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +1 -2
  129. data/vendor/assets/javascripts/ace/theme-kr_theme.js +0 -1
  130. data/vendor/assets/javascripts/ace/theme-kuroir.js +0 -1
  131. data/vendor/assets/javascripts/ace/theme-merbivore.js +0 -1
  132. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +0 -1
  133. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +0 -1
  134. data/vendor/assets/javascripts/ace/theme-monokai.js +0 -1
  135. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +0 -1
  136. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +0 -1
  137. data/vendor/assets/javascripts/ace/theme-solarized_light.js +0 -1
  138. data/vendor/assets/javascripts/ace/theme-sqlserver.js +138 -0
  139. data/vendor/assets/javascripts/ace/theme-terminal.js +0 -1
  140. data/vendor/assets/javascripts/ace/theme-textmate.js +0 -1
  141. data/vendor/assets/javascripts/ace/theme-tomorrow.js +0 -1
  142. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +0 -1
  143. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +0 -1
  144. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +0 -1
  145. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +0 -1
  146. data/vendor/assets/javascripts/ace/theme-twilight.js +0 -1
  147. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +0 -1
  148. data/vendor/assets/javascripts/ace/theme-xcode.js +0 -1
  149. data/vendor/assets/javascripts/ace/worker-coffee.js +576 -6015
  150. data/vendor/assets/javascripts/ace/worker-css.js +529 -449
  151. data/vendor/assets/javascripts/ace/worker-html.js +528 -448
  152. data/vendor/assets/javascripts/ace/worker-javascript.js +8719 -7656
  153. data/vendor/assets/javascripts/ace/worker-json.js +530 -450
  154. data/vendor/assets/javascripts/ace/worker-lua.js +530 -450
  155. data/vendor/assets/javascripts/ace/worker-php.js +530 -450
  156. data/vendor/assets/javascripts/ace/worker-xml.js +530 -450
  157. data/vendor/assets/javascripts/ace/worker-xquery.js +529 -449
  158. metadata +14 -2
@@ -100,6 +100,7 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
100
100
  CodeMirror.on = event.addListener;
101
101
  CodeMirror.off = event.removeListener;
102
102
  CodeMirror.isWordChar = function(ch) {
103
+ if (ch < "\x7f") return /^\w$/.test(ch);
103
104
  TextModeTokenRe.lastIndex = 0;
104
105
  return TextModeTokenRe.test(ch);
105
106
  };
@@ -117,13 +118,6 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
117
118
  return this.ace.inVirtualSelectionMode && this.ace.selection.index;
118
119
  };
119
120
  this.onChange = function(delta) {
120
- var oldDelta = delta.data;
121
- delta = {
122
- start: oldDelta.range.start,
123
- end: oldDelta.range.end,
124
- action: oldDelta.action,
125
- lines: oldDelta.lines || [oldDelta.text]
126
- };// v1.2 api compatibility
127
121
  if (delta.action[0] == 'i') {
128
122
  var change = { text: delta.lines };
129
123
  var curOp = this.curOp = this.curOp || {};
@@ -203,6 +197,7 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
203
197
  }
204
198
  if (!this.ace.inVirtualSelectionMode)
205
199
  this.ace.exitMultiSelectMode();
200
+ this.ace.session.unfold({row: line, column: ch});
206
201
  this.ace.selection.moveTo(line, ch);
207
202
  };
208
203
  this.getCursor = function(p) {
@@ -471,7 +466,9 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
471
466
  var optMap = {
472
467
  indentWithTabs: "useSoftTabs",
473
468
  indentUnit: "tabSize",
474
- firstLineNumber: "firstLineNumber"
469
+ tabSize: "tabSize",
470
+ firstLineNumber: "firstLineNumber",
471
+ readOnly: "readOnly"
475
472
  };
476
473
  this.setOption = function(name, val) {
477
474
  this.state[name] = val;
@@ -514,7 +511,6 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
514
511
  highlight.session = null;
515
512
  };
516
513
  highlight.updateOnChange = function(delta) {
517
- delta = delta.data.range;// v1.2 api compatibility
518
514
  var row = delta.start.row;
519
515
  if (row == delta.end.row) highlight.cache[row] = undefined;
520
516
  else highlight.cache.splice(row, highlight.cache.length);
@@ -591,6 +587,9 @@ define("ace/keyboard/vim",["require","exports","module","ace/range","ace/lib/eve
591
587
  this.refresh = function() {
592
588
  return this.ace.resize(true);
593
589
  };
590
+ this.getMode = function() {
591
+ return { name : this.getOption("mode") };
592
+ }
594
593
  }).call(CodeMirror.prototype);
595
594
  function toAcePos(cmPos) {
596
595
  return {row: cmPos.line, column: cmPos.ch};
@@ -669,10 +668,14 @@ CodeMirror.defineExtension = function(name, fn) {
669
668
  CodeMirror.prototype[name] = fn;
670
669
  };
671
670
  dom.importCssString(".normal-mode .ace_cursor{\
672
- border: 0!important;\
671
+ border: 1px solid red;\
673
672
  background-color: red;\
674
673
  opacity: 0.5;\
675
- }.ace_dialog {\
674
+ }\
675
+ .normal-mode .ace_hidden-cursors .ace_cursor{\
676
+ background-color: transparent;\
677
+ }\
678
+ .ace_dialog {\
676
679
  position: absolute;\
677
680
  left: 0; right: 0;\
678
681
  background: white;\
@@ -953,6 +956,27 @@ dom.importCssString(".normal-mode .ace_cursor{\
953
956
  { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},
954
957
  { keys: ':', type: 'ex' }
955
958
  ];
959
+ var defaultExCommandMap = [
960
+ { name: 'colorscheme', shortName: 'colo' },
961
+ { name: 'map' },
962
+ { name: 'imap', shortName: 'im' },
963
+ { name: 'nmap', shortName: 'nm' },
964
+ { name: 'vmap', shortName: 'vm' },
965
+ { name: 'unmap' },
966
+ { name: 'write', shortName: 'w' },
967
+ { name: 'undo', shortName: 'u' },
968
+ { name: 'redo', shortName: 'red' },
969
+ { name: 'set', shortName: 'se' },
970
+ { name: 'set', shortName: 'se' },
971
+ { name: 'setlocal', shortName: 'setl' },
972
+ { name: 'setglobal', shortName: 'setg' },
973
+ { name: 'sort', shortName: 'sor' },
974
+ { name: 'substitute', shortName: 's', possiblyAsync: true },
975
+ { name: 'nohlsearch', shortName: 'noh' },
976
+ { name: 'delmarks', shortName: 'delm' },
977
+ { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },
978
+ { name: 'global', shortName: 'g' }
979
+ ];
956
980
 
957
981
  var Pos = CodeMirror.Pos;
958
982
 
@@ -1099,18 +1123,30 @@ dom.importCssString(".normal-mode .ace_cursor{\
1099
1123
  }
1100
1124
 
1101
1125
  var options = {};
1102
- function defineOption(name, defaultValue, type) {
1103
- if (defaultValue === undefined) { throw Error('defaultValue is required'); }
1126
+ function defineOption(name, defaultValue, type, aliases, callback) {
1127
+ if (defaultValue === undefined && !callback) {
1128
+ throw Error('defaultValue is required unless callback is provided');
1129
+ }
1104
1130
  if (!type) { type = 'string'; }
1105
1131
  options[name] = {
1106
1132
  type: type,
1107
- defaultValue: defaultValue
1133
+ defaultValue: defaultValue,
1134
+ callback: callback
1108
1135
  };
1109
- setOption(name, defaultValue);
1136
+ if (aliases) {
1137
+ for (var i = 0; i < aliases.length; i++) {
1138
+ options[aliases[i]] = options[name];
1139
+ }
1140
+ }
1141
+ if (defaultValue) {
1142
+ setOption(name, defaultValue);
1143
+ }
1110
1144
  }
1111
1145
 
1112
- function setOption(name, value, cm) {
1146
+ function setOption(name, value, cm, cfg) {
1113
1147
  var option = options[name];
1148
+ cfg = cfg || {};
1149
+ var scope = cfg.scope;
1114
1150
  if (!option) {
1115
1151
  throw Error('Unknown option: ' + name);
1116
1152
  }
@@ -1121,17 +1157,58 @@ dom.importCssString(".normal-mode .ace_cursor{\
1121
1157
  value = true;
1122
1158
  }
1123
1159
  }
1124
- option.value = option.type == 'boolean' ? !!value : value;
1160
+ if (option.callback) {
1161
+ if (scope !== 'local') {
1162
+ option.callback(value, undefined);
1163
+ }
1164
+ if (scope !== 'global' && cm) {
1165
+ option.callback(value, cm);
1166
+ }
1167
+ } else {
1168
+ if (scope !== 'local') {
1169
+ option.value = option.type == 'boolean' ? !!value : value;
1170
+ }
1171
+ if (scope !== 'global' && cm) {
1172
+ cm.state.vim.options[name] = {value: value};
1173
+ }
1174
+ }
1125
1175
  }
1126
1176
 
1127
- function getOption(name) {
1177
+ function getOption(name, cm, cfg) {
1128
1178
  var option = options[name];
1179
+ cfg = cfg || {};
1180
+ var scope = cfg.scope;
1129
1181
  if (!option) {
1130
1182
  throw Error('Unknown option: ' + name);
1131
1183
  }
1132
- return option.value;
1184
+ if (option.callback) {
1185
+ var local = cm && option.callback(undefined, cm);
1186
+ if (scope !== 'global' && local !== undefined) {
1187
+ return local;
1188
+ }
1189
+ if (scope !== 'local') {
1190
+ return option.callback();
1191
+ }
1192
+ return;
1193
+ } else {
1194
+ var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);
1195
+ return (local || (scope !== 'local') && option || {}).value;
1196
+ }
1133
1197
  }
1134
1198
 
1199
+ defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) {
1200
+ if (cm === undefined) {
1201
+ return;
1202
+ }
1203
+ if (name === undefined) {
1204
+ var mode = cm.getOption('mode');
1205
+ return mode == 'null' ? '' : mode;
1206
+ } else {
1207
+ var mode = name == '' ? 'null' : name;
1208
+ cm.setOption('mode', mode);
1209
+ }
1210
+ });
1211
+
1135
1212
  var createCircularJumpList = function() {
1136
1213
  var size = 100;
1137
1214
  var pointer = -1;
@@ -1257,8 +1334,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1257
1334
  visualBlock: false,
1258
1335
  lastSelection: null,
1259
1336
  lastPastedText: null,
1260
- sel: {
1261
- }
1337
+ sel: {},
1338
+ options: {}
1262
1339
  };
1263
1340
  }
1264
1341
  return cm.state.vim;
@@ -1302,13 +1379,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
1302
1379
  exCommandDispatcher.map(lhs, rhs, ctx);
1303
1380
  },
1304
1381
  unmap: function(lhs, ctx) {
1305
- exCommandDispatcher.unmap(lhs, ctx);
1382
+ exCommandDispatcher.unmap(lhs, ctx || "normal");
1306
1383
  },
1307
1384
  setOption: setOption,
1308
1385
  getOption: getOption,
1309
1386
  defineOption: defineOption,
1310
1387
  defineEx: function(name, prefix, func){
1311
- if (name.indexOf(prefix) !== 0) {
1388
+ if (!prefix) {
1389
+ prefix = name;
1390
+ } else if (name.indexOf(prefix) !== 0) {
1312
1391
  throw new Error('(Vim.defineEx) "'+prefix+'" is not a prefix of "'+name+'", command not registered');
1313
1392
  }
1314
1393
  exCommands[name]=func;
@@ -1412,9 +1491,11 @@ dom.importCssString(".normal-mode .ace_cursor{\
1412
1491
  if (command === false) {
1413
1492
  return undefined;
1414
1493
  } else if (command === true) {
1415
- return function() {};
1494
+ return function() { return true; };
1416
1495
  } else {
1417
1496
  return function() {
1497
+ if ((command.operator || command.isEdit) && cm.getOption('readOnly'))
1498
+ return; // ace_patch
1418
1499
  return cm.operation(function() {
1419
1500
  cm.curOp.isVimOp = true;
1420
1501
  try {
@@ -1446,6 +1527,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1446
1527
  mapCommand: mapCommand,
1447
1528
  _mapCommand: _mapCommand,
1448
1529
 
1530
+ defineRegister: defineRegister,
1531
+
1449
1532
  exitVisualMode: exitVisualMode,
1450
1533
  exitInsertMode: exitInsertMode
1451
1534
  };
@@ -1524,6 +1607,14 @@ dom.importCssString(".normal-mode .ace_cursor{\
1524
1607
  return this.keyBuffer.join('');
1525
1608
  }
1526
1609
  };
1610
+ function defineRegister(name, register) {
1611
+ var registers = vimGlobalState.registerController.registers[name];
1612
+ if (!name || name.length != 1) {
1613
+ throw Error('Register name must be 1 character');
1614
+ }
1615
+ registers[name] = register;
1616
+ validRegisters.push(name);
1617
+ }
1527
1618
  function RegisterController(registers) {
1528
1619
  this.registers = registers;
1529
1620
  this.unnamedRegister = registers['"'] = new Register();
@@ -1790,7 +1881,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1790
1881
  }
1791
1882
  function onPromptKeyDown(e, query, close) {
1792
1883
  var keyName = CodeMirror.keyName(e);
1793
- if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {
1884
+ if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||
1885
+ (keyName == 'Backspace' && query == '')) {
1794
1886
  vimGlobalState.searchHistoryController.pushInput(query);
1795
1887
  vimGlobalState.searchHistoryController.reset();
1796
1888
  updateSearchQuery(cm, originalQuery);
@@ -1800,6 +1892,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
1800
1892
  clearInputState(cm);
1801
1893
  close();
1802
1894
  cm.focus();
1895
+ } else if (keyName == 'Ctrl-U') {
1896
+ CodeMirror.e_stop(e);
1897
+ close('');
1803
1898
  }
1804
1899
  }
1805
1900
  switch (command.searchArgs.querySrc) {
@@ -1854,7 +1949,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1854
1949
  }
1855
1950
  function onPromptKeyDown(e, input, close) {
1856
1951
  var keyName = CodeMirror.keyName(e), up;
1857
- if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[') {
1952
+ if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||
1953
+ (keyName == 'Backspace' && input == '')) {
1858
1954
  vimGlobalState.exCommandHistoryController.pushInput(input);
1859
1955
  vimGlobalState.exCommandHistoryController.reset();
1860
1956
  CodeMirror.e_stop(e);
@@ -1866,6 +1962,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
1866
1962
  up = keyName == 'Up' ? true : false;
1867
1963
  input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';
1868
1964
  close(input);
1965
+ } else if (keyName == 'Ctrl-U') {
1966
+ CodeMirror.e_stop(e);
1967
+ close('');
1869
1968
  } else {
1870
1969
  if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')
1871
1970
  vimGlobalState.exCommandHistoryController.reset();
@@ -1876,7 +1975,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
1876
1975
  } else {
1877
1976
  if (vim.visualMode) {
1878
1977
  showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\'<,\'>',
1879
- onKeyDown: onPromptKeyDown, select: false});
1978
+ onKeyDown: onPromptKeyDown});
1880
1979
  } else {
1881
1980
  showPrompt(cm, { onClose: onPromptClose, prefix: ':',
1882
1981
  onKeyDown: onPromptKeyDown});
@@ -1891,8 +1990,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1891
1990
  var operatorArgs = inputState.operatorArgs || {};
1892
1991
  var registerName = inputState.registerName;
1893
1992
  var sel = vim.sel;
1894
- var origHead = copyCursor(vim.visualMode ? sel.head: cm.getCursor('head'));
1895
- var origAnchor = copyCursor(vim.visualMode ? sel.anchor : cm.getCursor('anchor'));
1993
+ var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head'));
1994
+ var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));
1896
1995
  var oldHead = copyCursor(origHead);
1897
1996
  var oldAnchor = copyCursor(origAnchor);
1898
1997
  var newHead, newAnchor;
@@ -1925,6 +2024,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
1925
2024
  return;
1926
2025
  }
1927
2026
  if (motionArgs.toJumplist) {
2027
+ if (!operator)
2028
+ cm.ace.curOp.command.scrollIntoView = "center-animate"; // ace_patch
1928
2029
  var jumpList = vimGlobalState.jumpList;
1929
2030
  var cachedCursor = jumpList.cachedCursor;
1930
2031
  if (cachedCursor) {
@@ -2175,12 +2276,14 @@ dom.importCssString(".normal-mode .ace_cursor{\
2175
2276
  (line > last && cur.line == last)) {
2176
2277
  return;
2177
2278
  }
2178
- var fold = cm.ace.session.getFoldAt(line, endCh);
2279
+ var fold = cm.ace.session.getFoldLine(line);
2179
2280
  if (fold) {
2180
- if (motionArgs.forward)
2181
- line = fold.end.row + 1;
2182
- else
2183
- line = fold.start.row - 1;
2281
+ if (motionArgs.forward) {
2282
+ if (line > fold.start.row)
2283
+ line = fold.end.row + 1;
2284
+ } else {
2285
+ line = fold.start.row;
2286
+ }
2184
2287
  }
2185
2288
  if (motionArgs.toFirstChar){
2186
2289
  endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));
@@ -2404,9 +2507,10 @@ dom.importCssString(".normal-mode .ace_cursor{\
2404
2507
  var anchor = ranges[0].anchor,
2405
2508
  head = ranges[0].head;
2406
2509
  text = cm.getRange(anchor, head);
2407
- if (!isWhiteSpaceString(text)) {
2510
+ var lastState = vim.lastEditInputState || {};
2511
+ if (lastState.motion == "moveByWords" && !isWhiteSpaceString(text)) {
2408
2512
  var match = (/\s+$/).exec(text);
2409
- if (match) {
2513
+ if (match && lastState.motionArgs && lastState.motionArgs.forward) {
2410
2514
  head = offsetCursor(head, 0, - match[0].length);
2411
2515
  text = text.slice(0, - match[0].length);
2412
2516
  }
@@ -2540,6 +2644,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
2540
2644
  var markPos = mark ? mark.find() : undefined;
2541
2645
  markPos = markPos ? markPos : cm.getCursor();
2542
2646
  cm.setCursor(markPos);
2647
+ cm.ace.curOp.command.scrollIntoView = "center-animate"; // ace_patch
2543
2648
  },
2544
2649
  scroll: function(cm, actionArgs, vim) {
2545
2650
  if (vim.visualMode) {
@@ -2817,7 +2922,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
2817
2922
  }
2818
2923
  var linewise = register.linewise;
2819
2924
  var blockwise = register.blockwise;
2820
- if (linewise) {
2925
+ if (linewise && !blockwise) {
2821
2926
  if(vim.visualMode) {
2822
2927
  text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n';
2823
2928
  } else if (actionArgs.after) {
@@ -3707,13 +3812,22 @@ dom.importCssString(".normal-mode .ace_cursor{\
3707
3812
  var min = cm.firstLine();
3708
3813
  var max = cm.lastLine();
3709
3814
  var start, end, i = line;
3710
- function isEmpty(i) { return !/\S/.test(cm.getLine(i)); }
3815
+ function isEmpty(i) { return !/\S/.test(cm.getLine(i)); } // ace_patch
3711
3816
  function isBoundary(i, dir, any) {
3712
3817
  if (any) { return isEmpty(i) != isEmpty(i + dir); }
3713
3818
  return !isEmpty(i) && isEmpty(i + dir);
3714
3819
  }
3820
+ function skipFold(i) {
3821
+ dir = dir > 0 ? 1 : -1;
3822
+ var foldLine = cm.ace.session.getFoldLine(i);
3823
+ if (foldLine) {
3824
+ if (i + dir > foldLine.start.row && i + dir < foldLine.end.row)
3825
+ dir = (dir > 0 ? foldLine.end.row : foldLine.start.row) - i;
3826
+ }
3827
+ }
3715
3828
  if (dir) {
3716
3829
  while (min <= i && i <= max && repeat > 0) {
3830
+ skipFold(i);
3717
3831
  if (isBoundary(i, dir)) { repeat--; }
3718
3832
  i += dir;
3719
3833
  }
@@ -3863,7 +3977,8 @@ dom.importCssString(".normal-mode .ace_cursor{\
3863
3977
  function dialog(cm, template, shortText, onClose, options) {
3864
3978
  if (cm.openDialog) {
3865
3979
  cm.openDialog(template, onClose, { bottom: true, value: options.value,
3866
- onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp, select: options.select });
3980
+ onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,
3981
+ selectValueOnOpen: false});
3867
3982
  }
3868
3983
  else {
3869
3984
  onClose(prompt(shortText, ''));
@@ -3926,13 +4041,17 @@ dom.importCssString(".normal-mode .ace_cursor{\
3926
4041
  }
3927
4042
  return out.join('');
3928
4043
  }
4044
+ var charUnescapes = {'\\n': '\n', '\\r': '\r', '\\t': '\t'};
3929
4045
  function translateRegexReplace(str) {
3930
4046
  var escapeNextChar = false;
3931
4047
  var out = [];
3932
4048
  for (var i = -1; i < str.length; i++) {
3933
4049
  var c = str.charAt(i) || '';
3934
4050
  var n = str.charAt(i+1) || '';
3935
- if (escapeNextChar) {
4051
+ if (charUnescapes[c + n]) {
4052
+ out.push(charUnescapes[c+n]);
4053
+ i++;
4054
+ } else if (escapeNextChar) {
3936
4055
  out.push(c);
3937
4056
  escapeNextChar = false;
3938
4057
  } else {
@@ -3956,6 +4075,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
3956
4075
  }
3957
4076
  return out.join('');
3958
4077
  }
4078
+ var unescapes = {'\\/': '/', '\\\\': '\\', '\\n': '\n', '\\r': '\r', '\\t': '\t'};
3959
4079
  function unescapeRegexReplace(str) {
3960
4080
  var stream = new CodeMirror.StringStream(str);
3961
4081
  var output = [];
@@ -3963,11 +4083,15 @@ dom.importCssString(".normal-mode .ace_cursor{\
3963
4083
  while (stream.peek() && stream.peek() != '\\') {
3964
4084
  output.push(stream.next());
3965
4085
  }
3966
- if (stream.match('\\/', true)) {
3967
- output.push('/');
3968
- } else if (stream.match('\\\\', true)) {
3969
- output.push('\\');
3970
- } else {
4086
+ var matched = false;
4087
+ for (var matcher in unescapes) {
4088
+ if (stream.match(matcher, true)) {
4089
+ matched = true;
4090
+ output.push(unescapes[matcher]);
4091
+ break;
4092
+ }
4093
+ }
4094
+ if (!matched) {
3971
4095
  output.push(stream.next());
3972
4096
  }
3973
4097
  }
@@ -4158,28 +4282,19 @@ dom.importCssString(".normal-mode .ace_cursor{\
4158
4282
  bottom: renderer.getLastFullyVisibleRow()
4159
4283
  }
4160
4284
  }
4161
- var defaultExCommandMap = [
4162
- { name: 'map' },
4163
- { name: 'imap', shortName: 'im' },
4164
- { name: 'nmap', shortName: 'nm' },
4165
- { name: 'vmap', shortName: 'vm' },
4166
- { name: 'unmap' },
4167
- { name: 'write', shortName: 'w' },
4168
- { name: 'undo', shortName: 'u' },
4169
- { name: 'redo', shortName: 'red' },
4170
- { name: 'set', shortName: 'set' },
4171
- { name: 'sort', shortName: 'sor' },
4172
- { name: 'substitute', shortName: 's', possiblyAsync: true },
4173
- { name: 'nohlsearch', shortName: 'noh' },
4174
- { name: 'delmarks', shortName: 'delm' },
4175
- { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },
4176
- { name: 'global', shortName: 'g' }
4177
- ];
4285
+
4178
4286
  var ExCommandDispatcher = function() {
4179
4287
  this.buildCommandMap_();
4180
4288
  };
4181
4289
  ExCommandDispatcher.prototype = {
4182
4290
  processCommand: function(cm, input, opt_params) {
4291
+ var that = this;
4292
+ cm.operation(function () {
4293
+ cm.curOp.isVimOp = true;
4294
+ that._processCommand(cm, input, opt_params);
4295
+ });
4296
+ },
4297
+ _processCommand: function(cm, input, opt_params) {
4183
4298
  var vim = cm.state.vim;
4184
4299
  var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');
4185
4300
  var previousCommand = commandHistoryRegister.toString();
@@ -4371,6 +4486,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
4371
4486
  };
4372
4487
 
4373
4488
  var exCommands = {
4489
+ colorscheme: function(cm, params) {
4490
+ if (!params.args || params.args.length < 1) {
4491
+ showConfirm(cm, cm.getOption('theme'));
4492
+ return;
4493
+ }
4494
+ cm.setOption('theme', params.args[0]);
4495
+ },
4374
4496
  map: function(cm, params, ctx) {
4375
4497
  var mapArgs = params.args;
4376
4498
  if (!mapArgs || mapArgs.length < 2) {
@@ -4404,6 +4526,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4404
4526
  },
4405
4527
  set: function(cm, params) {
4406
4528
  var setArgs = params.args;
4529
+ var setCfg = params.setCfg || {};
4407
4530
  if (!setArgs || setArgs.length < 1) {
4408
4531
  if (cm) {
4409
4532
  showConfirm(cm, 'Invalid mapping: ' + params.input);
@@ -4424,22 +4547,31 @@ dom.importCssString(".normal-mode .ace_cursor{\
4424
4547
  optionName = optionName.substring(2);
4425
4548
  value = false;
4426
4549
  }
4550
+
4427
4551
  var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';
4428
4552
  if (optionIsBoolean && value == undefined) {
4429
4553
  value = true;
4430
4554
  }
4431
- if (!optionIsBoolean && !value || forceGet) {
4432
- var oldValue = getOption(optionName);
4555
+ if (!optionIsBoolean && value === undefined || forceGet) {
4556
+ var oldValue = getOption(optionName, cm, setCfg);
4433
4557
  if (oldValue === true || oldValue === false) {
4434
4558
  showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);
4435
4559
  } else {
4436
4560
  showConfirm(cm, ' ' + optionName + '=' + oldValue);
4437
4561
  }
4438
4562
  } else {
4439
- setOption(optionName, value, cm);
4563
+ setOption(optionName, value, cm, setCfg);
4440
4564
  }
4441
4565
  },
4442
- registers: function(cm,params) {
4566
+ setlocal: function (cm, params) {
4567
+ params.setCfg = {scope: 'local'};
4568
+ this.set(cm, params);
4569
+ },
4570
+ setglobal: function (cm, params) {
4571
+ params.setCfg = {scope: 'global'};
4572
+ this.set(cm, params);
4573
+ },
4574
+ registers: function(cm, params) {
4443
4575
  var regArgs = params.args;
4444
4576
  var registers = vimGlobalState.registerController.registers;
4445
4577
  var regInfo = '----------Registers----------<br><br>';
@@ -4649,6 +4781,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
4649
4781
  var query = state.getQuery();
4650
4782
  var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;
4651
4783
  var lineEnd = params.lineEnd || lineStart;
4784
+ if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {
4785
+ lineEnd = Infinity;
4786
+ }
4652
4787
  if (count) {
4653
4788
  lineStart = lineEnd;
4654
4789
  lineEnd = lineStart + count - 1;
@@ -4739,8 +4874,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4739
4874
  searchCursor.replace(newText);
4740
4875
  }
4741
4876
  function next() {
4742
- var found;
4743
- while(found = searchCursor.findNext() &&
4877
+ while(searchCursor.findNext() &&
4744
4878
  isInRange(searchCursor.from(), lineStart, lineEnd)) {
4745
4879
  if (!global && lastPos && searchCursor.from().line == lastPos.line) {
4746
4880
  continue;
@@ -4855,7 +4989,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4855
4989
  }
4856
4990
 
4857
4991
  function _mapCommand(command) {
4858
- defaultKeymap.push(command);
4992
+ defaultKeymap.unshift(command);
4859
4993
  }
4860
4994
 
4861
4995
  function mapCommand(keys, type, name, args, extra) {
@@ -4892,6 +5026,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
4892
5026
 
4893
5027
  function executeMacroRegister(cm, vim, macroModeState, registerName) {
4894
5028
  var register = vimGlobalState.registerController.getRegister(registerName);
5029
+ if (registerName == ':') {
5030
+ if (register.keyBuffer[0]) {
5031
+ exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);
5032
+ }
5033
+ macroModeState.isPlaying = false;
5034
+ return;
5035
+ }
4895
5036
  var keyBuffer = register.keyBuffer;
4896
5037
  var imc = 0;
4897
5038
  macroModeState.isPlaying = true;
@@ -4929,7 +5070,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4929
5070
  if (macroModeState.isPlaying) { return; }
4930
5071
  var registerName = macroModeState.latestRegister;
4931
5072
  var register = vimGlobalState.registerController.getRegister(registerName);
4932
- if (register) {
5073
+ if (register && register.pushInsertModeChanges) {
4933
5074
  register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);
4934
5075
  }
4935
5076
  }
@@ -4938,7 +5079,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4938
5079
  if (macroModeState.isPlaying) { return; }
4939
5080
  var registerName = macroModeState.latestRegister;
4940
5081
  var register = vimGlobalState.registerController.getRegister(registerName);
4941
- if (register) {
5082
+ if (register && register.pushSearchQuery) {
4942
5083
  register.pushSearchQuery(query);
4943
5084
  }
4944
5085
  }
@@ -4977,7 +5118,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4977
5118
  }
4978
5119
  function updateFakeCursor(cm) {
4979
5120
  var vim = cm.state.vim;
4980
- var from = copyCursor(vim.sel.head);
5121
+ var from = clipCursorToContent(cm, copyCursor(vim.sel.head));
4981
5122
  var to = offsetCursor(from, 0, 1);
4982
5123
  if (vim.fakeCursor) {
4983
5124
  vim.fakeCursor.clear();
@@ -4987,7 +5128,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
4987
5128
  function handleExternalSelection(cm, vim) {
4988
5129
  var anchor = cm.getCursor('anchor');
4989
5130
  var head = cm.getCursor('head');
4990
- if (vim.visualMode && cursorEqual(head, anchor) && lineLength(cm, head.line) > head.ch) {
5131
+ if (vim.visualMode && !cm.somethingSelected()) {
4991
5132
  exitVisualMode(cm, false);
4992
5133
  } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {
4993
5134
  vim.visualMode = true;
@@ -5188,7 +5329,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
5188
5329
  }, true);
5189
5330
  }
5190
5331
  return isHandled;
5191
- };
5332
+ }
5192
5333
  exports.CodeMirror = CodeMirror;
5193
5334
  var getVim = Vim.maybeInitVimState_;
5194
5335
  exports.handler = {
@@ -5202,9 +5343,9 @@ dom.importCssString(".normal-mode .ace_cursor{\
5202
5343
  if (!vim.insertMode) {
5203
5344
  var isbackwards = !sel.cursor
5204
5345
  ? session.selection.isBackwards() || session.selection.isEmpty()
5205
- : Range.comparePoints(sel.cursor, sel.start) <= 0
5346
+ : Range.comparePoints(sel.cursor, sel.start) <= 0;
5206
5347
  if (!isbackwards && left > w)
5207
- left -= w
5348
+ left -= w;
5208
5349
  }
5209
5350
  if (!vim.insertMode && vim.status) {
5210
5351
  h = h / 2;
@@ -5360,13 +5501,13 @@ dom.importCssString(".normal-mode .ace_cursor{\
5360
5501
  };
5361
5502
  var renderVirtualNumbers = {
5362
5503
  getText: function(session, row) {
5363
- return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + ""
5504
+ return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9? "\xb7" : "" ))) + "";
5364
5505
  },
5365
5506
  getWidth: function(session, lastLineNumber, config) {
5366
5507
  return session.getLength().toString().length * config.characterWidth;
5367
5508
  },
5368
5509
  update: function(e, editor) {
5369
- editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER)
5510
+ editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);
5370
5511
  },
5371
5512
  attach: function(editor) {
5372
5513
  editor.renderer.$gutterLayer.$renderer = this;
@@ -5411,7 +5552,7 @@ dom.importCssString(".normal-mode .ace_cursor{\
5411
5552
  if (cm.ace.inVirtualSelectionMode)
5412
5553
  cm.ace.on("beforeEndOperation", delayedExecAceCommand);
5413
5554
  else
5414
- delayedExecAceCommand(null, cm.ace)
5555
+ delayedExecAceCommand(null, cm.ace);
5415
5556
  };
5416
5557
  function delayedExecAceCommand(op, ace) {
5417
5558
  ace.off("beforeEndOperation", delayedExecAceCommand);
@@ -5430,5 +5571,5 @@ dom.importCssString(".normal-mode .ace_cursor{\
5430
5571
  exports.handler.actions = actions;
5431
5572
  exports.Vim = Vim;
5432
5573
 
5433
- Vim.map("Y", "yy");
5574
+ Vim.map("Y", "yy", "normal");
5434
5575
  });