ace-rails-ap 2.0.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (301) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/lib/ace/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/ace/ace.js +14194 -13349
  5. data/vendor/assets/javascripts/ace/ext-beautify.js +335 -0
  6. data/vendor/assets/javascripts/ace/ext-chromevox.js +6 -1
  7. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +8 -33
  8. data/vendor/assets/javascripts/ace/ext-emmet.js +487 -424
  9. data/vendor/assets/javascripts/ace/ext-error_marker.js +6 -0
  10. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +45 -72
  11. data/vendor/assets/javascripts/ace/ext-language_tools.js +734 -578
  12. data/vendor/assets/javascripts/ace/ext-linking.js +53 -0
  13. data/vendor/assets/javascripts/ace/ext-modelist.js +25 -10
  14. data/vendor/assets/javascripts/ace/ext-old_ie.js +93 -120
  15. data/vendor/assets/javascripts/ace/ext-searchbox.js +8 -41
  16. data/vendor/assets/javascripts/ace/ext-settings_menu.js +229 -234
  17. data/vendor/assets/javascripts/ace/ext-spellcheck.js +7 -3
  18. data/vendor/assets/javascripts/ace/ext-split.js +13 -37
  19. data/vendor/assets/javascripts/ace/ext-static_highlight.js +16 -39
  20. data/vendor/assets/javascripts/ace/ext-statusbar.js +8 -2
  21. data/vendor/assets/javascripts/ace/ext-textarea.js +254 -99
  22. data/vendor/assets/javascripts/ace/ext-themelist.js +13 -40
  23. data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -41
  24. data/vendor/assets/javascripts/ace/keybinding-emacs.js +803 -788
  25. data/vendor/assets/javascripts/ace/keybinding-vim.js +1559 -1560
  26. data/vendor/assets/javascripts/ace/mode-abap.js +52 -83
  27. data/vendor/assets/javascripts/ace/mode-actionscript.js +27 -63
  28. data/vendor/assets/javascripts/ace/mode-ada.js +27 -58
  29. data/vendor/assets/javascripts/ace/mode-apache_conf.js +310 -0
  30. data/vendor/assets/javascripts/ace/mode-applescript.js +226 -0
  31. data/vendor/assets/javascripts/ace/mode-asciidoc.js +39 -70
  32. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +26 -58
  33. data/vendor/assets/javascripts/ace/mode-autohotkey.js +27 -63
  34. data/vendor/assets/javascripts/ace/mode-batchfile.js +27 -63
  35. data/vendor/assets/javascripts/ace/mode-c9search.js +92 -112
  36. data/vendor/assets/javascripts/ace/mode-c_cpp.js +224 -223
  37. data/vendor/assets/javascripts/ace/mode-cirru.js +202 -0
  38. data/vendor/assets/javascripts/ace/mode-clojure.js +98 -92
  39. data/vendor/assets/javascripts/ace/mode-cobol.js +27 -58
  40. data/vendor/assets/javascripts/ace/mode-coffee.js +90 -122
  41. data/vendor/assets/javascripts/ace/mode-coldfusion.js +1908 -1464
  42. data/vendor/assets/javascripts/ace/mode-csharp.js +291 -264
  43. data/vendor/assets/javascripts/ace/mode-css.js +266 -267
  44. data/vendor/assets/javascripts/ace/mode-curly.js +796 -815
  45. data/vendor/assets/javascripts/ace/mode-d.js +64 -95
  46. data/vendor/assets/javascripts/ace/mode-dart.js +254 -256
  47. data/vendor/assets/javascripts/ace/mode-diff.js +27 -58
  48. data/vendor/assets/javascripts/ace/mode-django.js +856 -866
  49. data/vendor/assets/javascripts/ace/mode-dockerfile.js +759 -0
  50. data/vendor/assets/javascripts/ace/mode-dot.js +106 -106
  51. data/vendor/assets/javascripts/ace/mode-eiffel.js +135 -0
  52. data/vendor/assets/javascripts/ace/mode-ejs.js +931 -938
  53. data/vendor/assets/javascripts/ace/mode-erlang.js +27 -58
  54. data/vendor/assets/javascripts/ace/mode-forth.js +27 -63
  55. data/vendor/assets/javascripts/ace/mode-ftl.js +457 -508
  56. data/vendor/assets/javascripts/ace/mode-gcode.js +85 -0
  57. data/vendor/assets/javascripts/ace/mode-gherkin.js +129 -0
  58. data/vendor/assets/javascripts/ace/mode-gitignore.js +50 -0
  59. data/vendor/assets/javascripts/ace/mode-glsl.js +252 -248
  60. data/vendor/assets/javascripts/ace/mode-golang.js +206 -179
  61. data/vendor/assets/javascripts/ace/mode-groovy.js +310 -242
  62. data/vendor/assets/javascripts/ace/mode-haml.js +156 -190
  63. data/vendor/assets/javascripts/ace/mode-handlebars.js +815 -784
  64. data/vendor/assets/javascripts/ace/mode-haskell.js +27 -63
  65. data/vendor/assets/javascripts/ace/mode-haxe.js +206 -176
  66. data/vendor/assets/javascripts/ace/mode-html.js +779 -792
  67. data/vendor/assets/javascripts/ace/mode-html_ruby.js +916 -923
  68. data/vendor/assets/javascripts/ace/mode-ini.js +27 -58
  69. data/vendor/assets/javascripts/ace/mode-io.js +201 -0
  70. data/vendor/assets/javascripts/ace/mode-jack.js +169 -170
  71. data/vendor/assets/javascripts/ace/mode-jade.js +722 -774
  72. data/vendor/assets/javascripts/ace/mode-java.js +310 -245
  73. data/vendor/assets/javascripts/ace/mode-javascript.js +285 -247
  74. data/vendor/assets/javascripts/ace/mode-json.js +183 -184
  75. data/vendor/assets/javascripts/ace/mode-jsoniq.js +3211 -1274
  76. data/vendor/assets/javascripts/ace/mode-jsp.js +481 -504
  77. data/vendor/assets/javascripts/ace/mode-jsx.js +206 -176
  78. data/vendor/assets/javascripts/ace/mode-julia.js +33 -69
  79. data/vendor/assets/javascripts/ace/mode-latex.js +74 -41
  80. data/vendor/assets/javascripts/ace/mode-less.js +250 -251
  81. data/vendor/assets/javascripts/ace/mode-liquid.js +424 -475
  82. data/vendor/assets/javascripts/ace/mode-lisp.js +24 -57
  83. data/vendor/assets/javascripts/ace/mode-livescript.js +42 -41
  84. data/vendor/assets/javascripts/ace/mode-logiql.js +229 -230
  85. data/vendor/assets/javascripts/ace/mode-lsl.js +200 -441
  86. data/vendor/assets/javascripts/ace/mode-lua.js +136 -167
  87. data/vendor/assets/javascripts/ace/mode-luapage.js +904 -884
  88. data/vendor/assets/javascripts/ace/mode-lucene.js +22 -17
  89. data/vendor/assets/javascripts/ace/mode-makefile.js +162 -137
  90. data/vendor/assets/javascripts/ace/mode-markdown.js +846 -854
  91. data/vendor/assets/javascripts/ace/mode-matlab.js +98 -72
  92. data/vendor/assets/javascripts/ace/mode-mel.js +569 -0
  93. data/vendor/assets/javascripts/ace/mode-mushcode.js +84 -115
  94. data/vendor/assets/javascripts/ace/mode-mysql.js +49 -80
  95. data/vendor/assets/javascripts/ace/mode-nix.js +252 -256
  96. data/vendor/assets/javascripts/ace/mode-objectivec.js +242 -274
  97. data/vendor/assets/javascripts/ace/mode-ocaml.js +71 -102
  98. data/vendor/assets/javascripts/ace/mode-pascal.js +32 -68
  99. data/vendor/assets/javascripts/ace/mode-perl.js +67 -98
  100. data/vendor/assets/javascripts/ace/mode-pgsql.js +990 -982
  101. data/vendor/assets/javascripts/ace/mode-php.js +1878 -1900
  102. data/vendor/assets/javascripts/ace/mode-plain_text.js +3 -34
  103. data/vendor/assets/javascripts/ace/mode-powershell.js +181 -151
  104. data/vendor/assets/javascripts/ace/mode-praat.js +418 -0
  105. data/vendor/assets/javascripts/ace/mode-prolog.js +27 -63
  106. data/vendor/assets/javascripts/ace/mode-properties.js +20 -48
  107. data/vendor/assets/javascripts/ace/mode-protobuf.js +252 -259
  108. data/vendor/assets/javascripts/ace/mode-python.js +84 -115
  109. data/vendor/assets/javascripts/ace/mode-r.js +105 -140
  110. data/vendor/assets/javascripts/ace/mode-rdoc.js +84 -89
  111. data/vendor/assets/javascripts/ace/mode-rhtml.js +892 -908
  112. data/vendor/assets/javascripts/ace/mode-ruby.js +434 -98
  113. data/vendor/assets/javascripts/ace/mode-rust.js +27 -63
  114. data/vendor/assets/javascripts/ace/mode-sass.js +75 -106
  115. data/vendor/assets/javascripts/ace/mode-scad.js +219 -220
  116. data/vendor/assets/javascripts/ace/mode-scala.js +311 -243
  117. data/vendor/assets/javascripts/ace/mode-scheme.js +24 -60
  118. data/vendor/assets/javascripts/ace/mode-scss.js +250 -251
  119. data/vendor/assets/javascripts/ace/mode-sh.js +506 -118
  120. data/vendor/assets/javascripts/ace/mode-sjs.js +314 -280
  121. data/vendor/assets/javascripts/ace/mode-smarty.js +2474 -0
  122. data/vendor/assets/javascripts/ace/mode-snippets.js +89 -89
  123. data/vendor/assets/javascripts/ace/mode-soy_template.js +792 -811
  124. data/vendor/assets/javascripts/ace/mode-space.js +22 -23
  125. data/vendor/assets/javascripts/ace/mode-sql.js +31 -58
  126. data/vendor/assets/javascripts/ace/mode-stylus.js +161 -197
  127. data/vendor/assets/javascripts/ace/mode-svg.js +906 -836
  128. data/vendor/assets/javascripts/ace/mode-tcl.js +61 -92
  129. data/vendor/assets/javascripts/ace/mode-tex.js +36 -73
  130. data/vendor/assets/javascripts/ace/mode-text.js +1 -0
  131. data/vendor/assets/javascripts/ace/mode-textile.js +41 -72
  132. data/vendor/assets/javascripts/ace/mode-toml.js +26 -62
  133. data/vendor/assets/javascripts/ace/mode-twig.js +1196 -892
  134. data/vendor/assets/javascripts/ace/mode-typescript.js +313 -277
  135. data/vendor/assets/javascripts/ace/mode-vala.js +982 -0
  136. data/vendor/assets/javascripts/ace/mode-vbscript.js +25 -62
  137. data/vendor/assets/javascripts/ace/mode-velocity.js +2251 -1242
  138. data/vendor/assets/javascripts/ace/mode-verilog.js +27 -59
  139. data/vendor/assets/javascripts/ace/mode-vhdl.js +26 -55
  140. data/vendor/assets/javascripts/ace/mode-xml.js +319 -644
  141. data/vendor/assets/javascripts/ace/mode-xquery.js +2503 -588
  142. data/vendor/assets/javascripts/ace/mode-yaml.js +56 -90
  143. data/vendor/assets/javascripts/ace/snippets/abap.js +7 -0
  144. data/vendor/assets/javascripts/ace/snippets/actionscript.js +159 -0
  145. data/vendor/assets/javascripts/ace/snippets/ada.js +7 -0
  146. data/vendor/assets/javascripts/ace/snippets/apache_conf.js +7 -0
  147. data/vendor/assets/javascripts/ace/snippets/applescript.js +7 -0
  148. data/vendor/assets/javascripts/ace/snippets/asciidoc.js +7 -0
  149. data/vendor/assets/javascripts/ace/snippets/assembly_x86.js +7 -0
  150. data/vendor/assets/javascripts/ace/snippets/autohotkey.js +7 -0
  151. data/vendor/assets/javascripts/ace/snippets/batchfile.js +7 -0
  152. data/vendor/assets/javascripts/ace/snippets/c9search.js +7 -0
  153. data/vendor/assets/javascripts/ace/snippets/c_cpp.js +138 -0
  154. data/vendor/assets/javascripts/ace/snippets/cirru.js +7 -0
  155. data/vendor/assets/javascripts/ace/snippets/clojure.js +97 -0
  156. data/vendor/assets/javascripts/ace/snippets/cobol.js +7 -0
  157. data/vendor/assets/javascripts/ace/snippets/coffee.js +102 -0
  158. data/vendor/assets/javascripts/ace/snippets/coldfusion.js +7 -0
  159. data/vendor/assets/javascripts/ace/snippets/csharp.js +7 -0
  160. data/vendor/assets/javascripts/ace/snippets/css.js +974 -0
  161. data/vendor/assets/javascripts/ace/snippets/curly.js +7 -0
  162. data/vendor/assets/javascripts/ace/snippets/d.js +7 -0
  163. data/vendor/assets/javascripts/ace/snippets/dart.js +90 -0
  164. data/vendor/assets/javascripts/ace/snippets/diff.js +18 -0
  165. data/vendor/assets/javascripts/ace/snippets/django.js +115 -0
  166. data/vendor/assets/javascripts/ace/snippets/dockerfile.js +7 -0
  167. data/vendor/assets/javascripts/ace/snippets/dot.js +7 -0
  168. data/vendor/assets/javascripts/ace/snippets/eiffel.js +7 -0
  169. data/vendor/assets/javascripts/ace/snippets/ejs.js +7 -0
  170. data/vendor/assets/javascripts/ace/snippets/erlang.js +167 -0
  171. data/vendor/assets/javascripts/ace/snippets/forth.js +7 -0
  172. data/vendor/assets/javascripts/ace/snippets/ftl.js +7 -0
  173. data/vendor/assets/javascripts/ace/snippets/gcode.js +7 -0
  174. data/vendor/assets/javascripts/ace/snippets/gherkin.js +7 -0
  175. data/vendor/assets/javascripts/ace/snippets/gitignore.js +7 -0
  176. data/vendor/assets/javascripts/ace/snippets/glsl.js +7 -0
  177. data/vendor/assets/javascripts/ace/snippets/golang.js +7 -0
  178. data/vendor/assets/javascripts/ace/snippets/groovy.js +7 -0
  179. data/vendor/assets/javascripts/ace/snippets/haml.js +27 -0
  180. data/vendor/assets/javascripts/ace/snippets/handlebars.js +7 -0
  181. data/vendor/assets/javascripts/ace/snippets/haskell.js +89 -0
  182. data/vendor/assets/javascripts/ace/snippets/haxe.js +7 -0
  183. data/vendor/assets/javascripts/ace/snippets/html.js +835 -0
  184. data/vendor/assets/javascripts/ace/snippets/html_ruby.js +7 -0
  185. data/vendor/assets/javascripts/ace/snippets/ini.js +7 -0
  186. data/vendor/assets/javascripts/ace/snippets/io.js +69 -0
  187. data/vendor/assets/javascripts/ace/snippets/jack.js +7 -0
  188. data/vendor/assets/javascripts/ace/snippets/jade.js +7 -0
  189. data/vendor/assets/javascripts/ace/snippets/java.js +241 -0
  190. data/vendor/assets/javascripts/ace/snippets/javascript.js +189 -0
  191. data/vendor/assets/javascripts/ace/snippets/json.js +7 -0
  192. data/vendor/assets/javascripts/ace/snippets/jsoniq.js +68 -0
  193. data/vendor/assets/javascripts/ace/snippets/jsp.js +106 -0
  194. data/vendor/assets/javascripts/ace/snippets/jsx.js +7 -0
  195. data/vendor/assets/javascripts/ace/snippets/julia.js +7 -0
  196. data/vendor/assets/javascripts/ace/snippets/latex.js +7 -0
  197. data/vendor/assets/javascripts/ace/snippets/less.js +7 -0
  198. data/vendor/assets/javascripts/ace/snippets/liquid.js +7 -0
  199. data/vendor/assets/javascripts/ace/snippets/lisp.js +7 -0
  200. data/vendor/assets/javascripts/ace/snippets/livescript.js +7 -0
  201. data/vendor/assets/javascripts/ace/snippets/logiql.js +7 -0
  202. data/vendor/assets/javascripts/ace/snippets/lsl.js +1073 -0
  203. data/vendor/assets/javascripts/ace/snippets/lua.js +28 -0
  204. data/vendor/assets/javascripts/ace/snippets/luapage.js +7 -0
  205. data/vendor/assets/javascripts/ace/snippets/lucene.js +7 -0
  206. data/vendor/assets/javascripts/ace/snippets/makefile.js +11 -0
  207. data/vendor/assets/javascripts/ace/snippets/markdown.js +95 -0
  208. data/vendor/assets/javascripts/ace/snippets/matlab.js +7 -0
  209. data/vendor/assets/javascripts/ace/snippets/mel.js +7 -0
  210. data/vendor/assets/javascripts/ace/snippets/mushcode.js +7 -0
  211. data/vendor/assets/javascripts/ace/snippets/mysql.js +7 -0
  212. data/vendor/assets/javascripts/ace/snippets/nix.js +7 -0
  213. data/vendor/assets/javascripts/ace/snippets/objectivec.js +7 -0
  214. data/vendor/assets/javascripts/ace/snippets/ocaml.js +7 -0
  215. data/vendor/assets/javascripts/ace/snippets/pascal.js +7 -0
  216. data/vendor/assets/javascripts/ace/snippets/perl.js +354 -0
  217. data/vendor/assets/javascripts/ace/snippets/pgsql.js +7 -0
  218. data/vendor/assets/javascripts/ace/snippets/php.js +283 -0
  219. data/vendor/assets/javascripts/ace/snippets/plain_text.js +7 -0
  220. data/vendor/assets/javascripts/ace/snippets/powershell.js +7 -0
  221. data/vendor/assets/javascripts/ace/snippets/praat.js +7 -0
  222. data/vendor/assets/javascripts/ace/snippets/prolog.js +7 -0
  223. data/vendor/assets/javascripts/ace/snippets/properties.js +7 -0
  224. data/vendor/assets/javascripts/ace/snippets/protobuf.js +7 -0
  225. data/vendor/assets/javascripts/ace/snippets/python.js +165 -0
  226. data/vendor/assets/javascripts/ace/snippets/r.js +128 -0
  227. data/vendor/assets/javascripts/ace/snippets/rdoc.js +7 -0
  228. data/vendor/assets/javascripts/ace/snippets/rhtml.js +7 -0
  229. data/vendor/assets/javascripts/ace/snippets/ruby.js +935 -0
  230. data/vendor/assets/javascripts/ace/snippets/rust.js +7 -0
  231. data/vendor/assets/javascripts/ace/snippets/sass.js +7 -0
  232. data/vendor/assets/javascripts/ace/snippets/scad.js +7 -0
  233. data/vendor/assets/javascripts/ace/snippets/scala.js +7 -0
  234. data/vendor/assets/javascripts/ace/snippets/scheme.js +7 -0
  235. data/vendor/assets/javascripts/ace/snippets/scss.js +7 -0
  236. data/vendor/assets/javascripts/ace/snippets/sh.js +90 -0
  237. data/vendor/assets/javascripts/ace/snippets/sjs.js +7 -0
  238. data/vendor/assets/javascripts/ace/snippets/smarty.js +7 -0
  239. data/vendor/assets/javascripts/ace/snippets/snippets.js +16 -0
  240. data/vendor/assets/javascripts/ace/snippets/soy_template.js +7 -0
  241. data/vendor/assets/javascripts/ace/snippets/space.js +7 -0
  242. data/vendor/assets/javascripts/ace/snippets/sql.js +33 -0
  243. data/vendor/assets/javascripts/ace/snippets/stylus.js +7 -0
  244. data/vendor/assets/javascripts/ace/snippets/svg.js +7 -0
  245. data/vendor/assets/javascripts/ace/snippets/tcl.js +99 -0
  246. data/vendor/assets/javascripts/ace/snippets/tex.js +197 -0
  247. data/vendor/assets/javascripts/ace/snippets/text.js +7 -0
  248. data/vendor/assets/javascripts/ace/snippets/textile.js +37 -0
  249. data/vendor/assets/javascripts/ace/snippets/toml.js +7 -0
  250. data/vendor/assets/javascripts/ace/snippets/twig.js +7 -0
  251. data/vendor/assets/javascripts/ace/snippets/typescript.js +7 -0
  252. data/vendor/assets/javascripts/ace/snippets/vala.js +193 -0
  253. data/vendor/assets/javascripts/ace/snippets/vbscript.js +7 -0
  254. data/vendor/assets/javascripts/ace/snippets/velocity.js +36 -0
  255. data/vendor/assets/javascripts/ace/snippets/verilog.js +7 -0
  256. data/vendor/assets/javascripts/ace/snippets/vhdl.js +7 -0
  257. data/vendor/assets/javascripts/ace/snippets/xml.js +7 -0
  258. data/vendor/assets/javascripts/ace/snippets/xquery.js +68 -0
  259. data/vendor/assets/javascripts/ace/snippets/yaml.js +7 -0
  260. data/vendor/assets/javascripts/ace/theme-ambiance.js +4 -24
  261. data/vendor/assets/javascripts/ace/theme-chaos.js +2 -25
  262. data/vendor/assets/javascripts/ace/theme-chrome.js +2 -31
  263. data/vendor/assets/javascripts/ace/theme-clouds.js +1 -31
  264. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +1 -31
  265. data/vendor/assets/javascripts/ace/theme-cobalt.js +1 -31
  266. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +1 -31
  267. data/vendor/assets/javascripts/ace/theme-dawn.js +1 -31
  268. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +5 -31
  269. data/vendor/assets/javascripts/ace/theme-eclipse.js +7 -33
  270. data/vendor/assets/javascripts/ace/theme-github.js +2 -35
  271. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +1 -31
  272. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +119 -0
  273. data/vendor/assets/javascripts/ace/theme-kr.js +1 -31
  274. data/vendor/assets/javascripts/ace/theme-kr_theme.js +57 -141
  275. data/vendor/assets/javascripts/ace/theme-kuroir.js +59 -0
  276. data/vendor/assets/javascripts/ace/theme-merbivore.js +1 -31
  277. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +1 -31
  278. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +1 -31
  279. data/vendor/assets/javascripts/ace/theme-monokai.js +1 -31
  280. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +1 -31
  281. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +1 -31
  282. data/vendor/assets/javascripts/ace/theme-solarized_light.js +1 -31
  283. data/vendor/assets/javascripts/ace/theme-terminal.js +1 -31
  284. data/vendor/assets/javascripts/ace/theme-textmate.js +3 -32
  285. data/vendor/assets/javascripts/ace/theme-tomorrow.js +1 -31
  286. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +1 -31
  287. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +1 -31
  288. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +1 -31
  289. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +1 -31
  290. data/vendor/assets/javascripts/ace/theme-twilight.js +1 -31
  291. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +1 -31
  292. data/vendor/assets/javascripts/ace/theme-xcode.js +2 -33
  293. data/vendor/assets/javascripts/ace/worker-coffee.js +5026 -5008
  294. data/vendor/assets/javascripts/ace/worker-css.js +5489 -5134
  295. data/vendor/assets/javascripts/ace/worker-html.js +11517 -0
  296. data/vendor/assets/javascripts/ace/worker-javascript.js +9810 -9501
  297. data/vendor/assets/javascripts/ace/worker-json.js +1583 -1564
  298. data/vendor/assets/javascripts/ace/worker-lua.js +2631 -2612
  299. data/vendor/assets/javascripts/ace/worker-php.js +2385 -2341
  300. data/vendor/assets/javascripts/ace/worker-xquery.js +31643 -3993
  301. metadata +147 -11
@@ -1,37 +1,6 @@
1
- /* ***** BEGIN LICENSE BLOCK *****
2
- * Distributed under the BSD license:
3
- *
4
- * Copyright (c) 2013 Matthew Christopher Kastor-Inare III, Atropa Inc. Intl
5
- * All rights reserved.
6
- *
7
- * Contributed to Ajax.org under the BSD license.
8
- *
9
- * Redistribution and use in source and binary forms, with or without
10
- * modification, are permitted provided that the following conditions are met:
11
- * * Redistributions of source code must retain the above copyright
12
- * notice, this list of conditions and the following disclaimer.
13
- * * Redistributions in binary form must reproduce the above copyright
14
- * notice, this list of conditions and the following disclaimer in the
15
- * documentation and/or other materials provided with the distribution.
16
- * * Neither the name of Ajax.org B.V. nor the
17
- * names of its contributors may be used to endorse or promote products
18
- * derived from this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
24
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- *
31
- * ***** END LICENSE BLOCK ***** */
32
-
33
- define('ace/ext/themelist', ['require', 'exports', 'module' ], function(require, exports, module) {
34
-
1
+ define("ace/ext/themelist",["require","exports","module","ace/lib/fixoldbrowsers"], function(require, exports, module) {
2
+ "use strict";
3
+ require("ace/lib/fixoldbrowsers");
35
4
 
36
5
  var themeData = [
37
6
  ["Chrome" ],
@@ -66,21 +35,25 @@ var themeData = [
66
35
  ["Tomorrow Night 80s" ,"tomorrow_night_eighties" , "dark"],
67
36
  ["Twilight" ,"twilight" , "dark"],
68
37
  ["Vibrant Ink" ,"vibrant_ink" , "dark"]
69
- ]
38
+ ];
70
39
 
71
40
 
72
41
  exports.themesByName = {};
73
42
  exports.themes = themeData.map(function(data) {
74
43
  var name = data[1] || data[0].replace(/ /g, "_").toLowerCase();
75
44
  var theme = {
76
- caption: data[0],
77
- theme: "ace/theme/" + name,
78
- isDark: data[2] == "dark",
79
- name: name
45
+ caption: data[0],
46
+ theme: "ace/theme/" + name,
47
+ isDark: data[2] == "dark",
48
+ name: name
80
49
  };
81
50
  exports.themesByName[name] = theme;
82
51
  return theme;
83
52
  });
84
53
 
85
54
  });
86
-
55
+ ;
56
+ (function() {
57
+ window.require(["ace/ext/themelist"], function() {});
58
+ })();
59
+
@@ -1,35 +1,5 @@
1
- /* ***** BEGIN LICENSE BLOCK *****
2
- * Distributed under the BSD license:
3
- *
4
- * Copyright (c) 2010, Ajax.org B.V.
5
- * All rights reserved.
6
- *
7
- * Redistribution and use in source and binary forms, with or without
8
- * modification, are permitted provided that the following conditions are met:
9
- * * Redistributions of source code must retain the above copyright
10
- * notice, this list of conditions and the following disclaimer.
11
- * * Redistributions in binary form must reproduce the above copyright
12
- * notice, this list of conditions and the following disclaimer in the
13
- * documentation and/or other materials provided with the distribution.
14
- * * Neither the name of Ajax.org B.V. nor the
15
- * names of its contributors may be used to endorse or promote products
16
- * derived from this software without specific prior written permission.
17
- *
18
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- *
29
- * ***** END LICENSE BLOCK ***** */
30
-
31
- define('ace/ext/whitespace', ['require', 'exports', 'module' , 'ace/lib/lang'], function(require, exports, module) {
32
-
1
+ define("ace/ext/whitespace",["require","exports","module","ace/lib/lang"], function(require, exports, module) {
2
+ "use strict";
33
3
 
34
4
  var lang = require("../lib/lang");
35
5
  exports.$detectIndentation = function(lines, fallback) {
@@ -43,7 +13,6 @@ exports.$detectIndentation = function(lines, fallback) {
43
13
  if (!/^\s*[^*+\-\s]/.test(line))
44
14
  continue;
45
15
 
46
- var tabs = line.match(/^\t*/)[0].length;
47
16
  if (line[0] == "\t")
48
17
  tabIndents++;
49
18
 
@@ -56,10 +25,10 @@ exports.$detectIndentation = function(lines, fallback) {
56
25
  stats[spaces] = (stats[spaces] || 0) + 1;
57
26
  }
58
27
  prevSpaces = spaces;
59
- while (line[line.length - 1] == "\\")
28
+ while (i < max && line[line.length - 1] == "\\")
60
29
  line = lines[i++];
61
30
  }
62
-
31
+
63
32
  function getScore(indent) {
64
33
  var score = 0;
65
34
  for (var i = indent; i < stats.length; i += indent)
@@ -72,15 +41,17 @@ exports.$detectIndentation = function(lines, fallback) {
72
41
  var first = {score: 0, length: 0};
73
42
  var spaceIndents = 0;
74
43
  for (var i = 1; i < 12; i++) {
44
+ var score = getScore(i);
75
45
  if (i == 1) {
76
- spaceIndents = getScore(i);
77
- var score = 1;
46
+ spaceIndents = score;
47
+ score = stats[1] ? 0.9 : 0.8;
48
+ if (!stats.length)
49
+ score = 0
78
50
  } else
79
- var score = getScore(i) / spaceIndents;
51
+ score /= spaceIndents;
80
52
 
81
- if (changes[i]) {
53
+ if (changes[i])
82
54
  score += changes[i] / changesTotal;
83
- }
84
55
 
85
56
  if (score > first.score)
86
57
  first = {score: score, length: i};
@@ -92,7 +63,7 @@ exports.$detectIndentation = function(lines, fallback) {
92
63
  if (tabIndents > spaceIndents + 1)
93
64
  return {ch: "\t", length: tabLength};
94
65
 
95
- if (spaceIndents + 1 > tabIndents)
66
+ if (spaceIndents > tabIndents + 1)
96
67
  return {ch: " ", length: tabLength};
97
68
  };
98
69
 
@@ -204,3 +175,8 @@ exports.commands = [{
204
175
  }];
205
176
 
206
177
  });
178
+ ;
179
+ (function() {
180
+ window.require(["ace/ext/whitespace"], function() {});
181
+ })();
182
+
@@ -1,548 +1,369 @@
1
- /* ***** BEGIN LICENSE BLOCK *****
2
- * Distributed under the BSD license:
3
- *
4
- * Copyright (c) 2010, Ajax.org B.V.
5
- * All rights reserved.
6
- *
7
- * Redistribution and use in source and binary forms, with or without
8
- * modification, are permitted provided that the following conditions are met:
9
- * * Redistributions of source code must retain the above copyright
10
- * notice, this list of conditions and the following disclaimer.
11
- * * Redistributions in binary form must reproduce the above copyright
12
- * notice, this list of conditions and the following disclaimer in the
13
- * documentation and/or other materials provided with the distribution.
14
- * * Neither the name of Ajax.org B.V. nor the
15
- * names of its contributors may be used to endorse or promote products
16
- * derived from this software without specific prior written permission.
17
- *
18
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- *
29
- * ***** END LICENSE BLOCK ***** */
30
-
31
- define('ace/keyboard/emacs', ['require', 'exports', 'module' , 'ace/lib/dom', 'ace/incremental_search', 'ace/commands/incremental_search_commands', 'ace/keyboard/hash_handler', 'ace/lib/keys'], function(require, exports, module) {
1
+ define("ace/occur",["require","exports","module","ace/lib/oop","ace/range","ace/search","ace/edit_session","ace/search_highlight","ace/lib/dom"], function(require, exports, module) {
2
+ "use strict";
32
3
 
4
+ var oop = require("./lib/oop");
5
+ var Range = require("./range").Range;
6
+ var Search = require("./search").Search;
7
+ var EditSession = require("./edit_session").EditSession;
8
+ var SearchHighlight = require("./search_highlight").SearchHighlight;
9
+ function Occur() {}
33
10
 
34
- var dom = require("../lib/dom");
35
- require("../incremental_search");
36
- var iSearchCommandModule = require("../commands/incremental_search_commands");
11
+ oop.inherits(Occur, Search);
37
12
 
13
+ (function() {
14
+ this.enter = function(editor, options) {
15
+ if (!options.needle) return false;
16
+ var pos = editor.getCursorPosition();
17
+ this.displayOccurContent(editor, options);
18
+ var translatedPos = this.originalToOccurPosition(editor.session, pos);
19
+ editor.moveCursorToPosition(translatedPos);
20
+ return true;
21
+ }
22
+ this.exit = function(editor, options) {
23
+ var pos = options.translatePosition && editor.getCursorPosition();
24
+ var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);
25
+ this.displayOriginalContent(editor);
26
+ if (translatedPos)
27
+ editor.moveCursorToPosition(translatedPos);
28
+ return true;
29
+ }
38
30
 
39
- var screenToTextBlockCoordinates = function(x, y) {
40
- var canvasPos = this.scroller.getBoundingClientRect();
31
+ this.highlight = function(sess, regexp) {
32
+ var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(
33
+ new SearchHighlight(null, "ace_occur-highlight", "text"));
34
+ hl.setRegexp(regexp);
35
+ sess._emit("changeBackMarker"); // force highlight layer redraw
36
+ }
41
37
 
42
- var col = Math.floor(
43
- (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth
44
- );
45
- var row = Math.floor(
46
- (y + this.scrollTop - canvasPos.top) / this.lineHeight
47
- );
38
+ this.displayOccurContent = function(editor, options) {
39
+ this.$originalSession = editor.session;
40
+ var found = this.matchingLines(editor.session, options);
41
+ var lines = found.map(function(foundLine) { return foundLine.content; });
42
+ var occurSession = new EditSession(lines.join('\n'));
43
+ occurSession.$occur = this;
44
+ occurSession.$occurMatchingLines = found;
45
+ editor.setSession(occurSession);
46
+ this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;
47
+ occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;
48
+ this.highlight(occurSession, options.re);
49
+ occurSession._emit('changeBackMarker');
50
+ }
48
51
 
49
- return this.session.screenToDocumentPosition(row, col);
50
- };
52
+ this.displayOriginalContent = function(editor) {
53
+ editor.setSession(this.$originalSession);
54
+ this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;
55
+ }
56
+ this.originalToOccurPosition = function(session, pos) {
57
+ var lines = session.$occurMatchingLines;
58
+ var nullPos = {row: 0, column: 0};
59
+ if (!lines) return nullPos;
60
+ for (var i = 0; i < lines.length; i++) {
61
+ if (lines[i].row === pos.row)
62
+ return {row: i, column: pos.column};
63
+ }
64
+ return nullPos;
65
+ }
66
+ this.occurToOriginalPosition = function(session, pos) {
67
+ var lines = session.$occurMatchingLines;
68
+ if (!lines || !lines[pos.row])
69
+ return pos;
70
+ return {row: lines[pos.row].row, column: pos.column};
71
+ }
51
72
 
52
- var HashHandler = require("./hash_handler").HashHandler;
53
- exports.handler = new HashHandler();
73
+ this.matchingLines = function(session, options) {
74
+ options = oop.mixin({}, options);
75
+ if (!session || !options.needle) return [];
76
+ var search = new Search();
77
+ search.set(options);
78
+ return search.findAll(session).reduce(function(lines, range) {
79
+ var row = range.start.row;
80
+ var last = lines[lines.length-1];
81
+ return last && last.row === row ?
82
+ lines :
83
+ lines.concat({row: row, content: session.getLine(row)});
84
+ }, []);
85
+ }
54
86
 
55
- exports.handler.isEmacs = true;
56
- exports.handler.$id = "ace/keyboard/emacs";
87
+ }).call(Occur.prototype);
57
88
 
58
- var initialized = false;
59
- var $formerLongWords;
60
- var $formerLineStart;
89
+ var dom = require('./lib/dom');
90
+ dom.importCssString(".ace_occur-highlight {\n\
91
+ border-radius: 4px;\n\
92
+ background-color: rgba(87, 255, 8, 0.25);\n\
93
+ position: absolute;\n\
94
+ z-index: 4;\n\
95
+ -moz-box-sizing: border-box;\n\
96
+ -webkit-box-sizing: border-box;\n\
97
+ box-sizing: border-box;\n\
98
+ box-shadow: 0 0 4px rgb(91, 255, 50);\n\
99
+ }\n\
100
+ .ace_dark .ace_occur-highlight {\n\
101
+ background-color: rgb(80, 140, 85);\n\
102
+ box-shadow: 0 0 4px rgb(60, 120, 70);\n\
103
+ }\n", "incremental-occur-highlighting");
61
104
 
62
- exports.handler.attach = function(editor) {
63
- if (!initialized) {
64
- initialized = true;
65
- dom.importCssString('\
66
- .emacs-mode .ace_cursor{\
67
- border: 2px rgba(50,250,50,0.8) solid!important;\
68
- -moz-box-sizing: border-box!important;\
69
- -webkit-box-sizing: border-box!important;\
70
- box-sizing: border-box!important;\
71
- background-color: rgba(0,250,0,0.9);\
72
- opacity: 0.5;\
73
- }\
74
- .emacs-mode .ace_hidden-cursors .ace_cursor{\
75
- opacity: 1;\
76
- background-color: transparent;\
77
- }\
78
- .emacs-mode .ace_overwrite-cursors .ace_cursor {\
79
- opacity: 1;\
80
- background-color: transparent;\
81
- border-width: 0 0 2px 2px !important;\
82
- }\
83
- .emacs-mode .ace_text-layer {\
84
- z-index: 4\
85
- }\
86
- .emacs-mode .ace_cursor-layer {\
87
- z-index: 2\
88
- }', 'emacsMode'
89
- );
90
- }
91
- $formerLongWords = editor.session.$selectLongWords;
92
- editor.session.$selectLongWords = true;
93
- $formerLineStart = editor.session.$useEmacsStyleLineStart;
94
- editor.session.$useEmacsStyleLineStart = true;
105
+ exports.Occur = Occur;
95
106
 
96
- editor.session.$emacsMark = null; // the active mark
97
- editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];
107
+ });
98
108
 
99
- editor.emacsMark = function() {
100
- return this.session.$emacsMark;
101
- }
109
+ define("ace/commands/occur_commands",["require","exports","module","ace/config","ace/occur","ace/keyboard/hash_handler","ace/lib/oop"], function(require, exports, module) {
102
110
 
103
- editor.setEmacsMark = function(p) {
104
- this.session.$emacsMark = p;
105
- }
111
+ var config = require("../config"),
112
+ Occur = require("../occur").Occur;
113
+ var occurStartCommand = {
114
+ name: "occur",
115
+ exec: function(editor, options) {
116
+ var alreadyInOccur = !!editor.session.$occur;
117
+ var occurSessionActive = new Occur().enter(editor, options);
118
+ if (occurSessionActive && !alreadyInOccur)
119
+ OccurKeyboardHandler.installIn(editor);
120
+ },
121
+ readOnly: true
122
+ };
106
123
 
107
- editor.pushEmacsMark = function(p, activate) {
108
- var prevMark = this.session.$emacsMark;
109
- if (prevMark)
110
- this.session.$emacsMarkRing.push(prevMark);
111
- if (!p || activate) this.setEmacsMark(p)
112
- else this.session.$emacsMarkRing.push(p);
113
- }
124
+ var occurCommands = [{
125
+ name: "occurexit",
126
+ bindKey: 'esc|Ctrl-G',
127
+ exec: function(editor) {
128
+ var occur = editor.session.$occur;
129
+ if (!occur) return;
130
+ occur.exit(editor, {});
131
+ if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
132
+ },
133
+ readOnly: true
134
+ }, {
135
+ name: "occuraccept",
136
+ bindKey: 'enter',
137
+ exec: function(editor) {
138
+ var occur = editor.session.$occur;
139
+ if (!occur) return;
140
+ occur.exit(editor, {translatePosition: true});
141
+ if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
142
+ },
143
+ readOnly: true
144
+ }];
114
145
 
115
- editor.popEmacsMark = function() {
116
- var mark = this.emacsMark();
117
- if (mark) { this.setEmacsMark(null); return mark; }
118
- return this.session.$emacsMarkRing.pop();
119
- }
146
+ var HashHandler = require("../keyboard/hash_handler").HashHandler;
147
+ var oop = require("../lib/oop");
120
148
 
121
- editor.getLastEmacsMark = function(p) {
122
- return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];
123
- }
124
149
 
125
- editor.on("click", $resetMarkMode);
126
- editor.on("changeSession", $kbSessionChange);
127
- editor.renderer.screenToTextCoordinates = screenToTextBlockCoordinates;
128
- editor.setStyle("emacs-mode");
129
- editor.commands.addCommands(commands);
130
- exports.handler.platform = editor.commands.platform;
131
- editor.$emacsModeHandler = this;
132
- editor.addEventListener('copy', this.onCopy);
133
- editor.addEventListener('paste', this.onPaste);
134
- };
150
+ function OccurKeyboardHandler() {}
135
151
 
136
- exports.handler.detach = function(editor) {
137
- delete editor.renderer.screenToTextCoordinates;
138
- editor.session.$selectLongWords = $formerLongWords;
139
- editor.session.$useEmacsStyleLineStart = $formerLineStart;
140
- editor.removeEventListener("click", $resetMarkMode);
141
- editor.removeEventListener("changeSession", $kbSessionChange);
142
- editor.unsetStyle("emacs-mode");
143
- editor.commands.removeCommands(commands);
144
- editor.removeEventListener('copy', this.onCopy);
145
- editor.removeEventListener('paste', this.onPaste);
146
- };
152
+ oop.inherits(OccurKeyboardHandler, HashHandler);
147
153
 
148
- var $kbSessionChange = function(e) {
149
- if (e.oldSession) {
150
- e.oldSession.$selectLongWords = $formerLongWords;
151
- e.oldSession.$useEmacsStyleLineStart = $formerLineStart;
154
+ ;(function() {
155
+
156
+ this.isOccurHandler = true;
157
+
158
+ this.attach = function(editor) {
159
+ HashHandler.call(this, occurCommands, editor.commands.platform);
160
+ this.$editor = editor;
152
161
  }
153
162
 
154
- $formerLongWords = e.session.$selectLongWords;
155
- e.session.$selectLongWords = true;
156
- $formerLineStart = e.session.$useEmacsStyleLineStart;
157
- e.session.$useEmacsStyleLineStart = true;
163
+ var handleKeyboard$super = this.handleKeyboard;
164
+ this.handleKeyboard = function(data, hashId, key, keyCode) {
165
+ var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
166
+ return (cmd && cmd.command) ? cmd : undefined;
167
+ }
158
168
 
159
- if (!e.session.hasOwnProperty('$emacsMark'))
160
- e.session.$emacsMark = null;
161
- if (!e.session.hasOwnProperty('$emacsMarkRing'))
162
- e.session.$emacsMarkRing = [];
163
- }
169
+ }).call(OccurKeyboardHandler.prototype);
164
170
 
165
- var $resetMarkMode = function(e) {
166
- e.editor.session.$emacsMark = null;
171
+ OccurKeyboardHandler.installIn = function(editor) {
172
+ var handler = new this();
173
+ editor.keyBinding.addKeyboardHandler(handler);
174
+ editor.commands.addCommands(occurCommands);
167
175
  }
168
176
 
169
- var keys = require("../lib/keys").KEY_MODS,
170
- eMods = {C: "ctrl", S: "shift", M: "alt", CMD: "command"},
171
- combinations = ["C-S-M-CMD",
172
- "S-M-CMD", "C-M-CMD", "C-S-CMD", "C-S-M",
173
- "M-CMD", "S-CMD", "S-M", "C-CMD", "C-M", "C-S",
174
- "CMD", "M", "S", "C"];
175
- combinations.forEach(function(c) {
176
- var hashId = 0;
177
- c.split("-").forEach(function(c) {
178
- hashId = hashId | keys[eMods[c]];
179
- });
180
- eMods[hashId] = c.toLowerCase() + "-";
181
- });
182
-
183
- exports.handler.onCopy = function(e, editor) {
184
- if (editor.$handlesEmacsOnCopy) return;
185
- editor.$handlesEmacsOnCopy = true;
186
- exports.handler.commands.killRingSave.exec(editor);
187
- delete editor.$handlesEmacsOnCopy;
177
+ OccurKeyboardHandler.uninstallFrom = function(editor) {
178
+ editor.commands.removeCommands(occurCommands);
179
+ var handler = editor.getKeyboardHandler();
180
+ if (handler.isOccurHandler)
181
+ editor.keyBinding.removeKeyboardHandler(handler);
188
182
  }
189
183
 
190
- exports.handler.onPaste = function(e, editor) {
191
- editor.pushEmacsMark(editor.getCursorPosition());
192
- }
184
+ exports.occurStartCommand = occurStartCommand;
193
185
 
194
- exports.handler.bindKey = function(key, command) {
195
- if (!key)
196
- return;
186
+ });
197
187
 
198
- var ckb = this.commandKeyBinding;
199
- key.split("|").forEach(function(keyPart) {
200
- keyPart = keyPart.toLowerCase();
201
- ckb[keyPart] = command;
202
- var keyParts = keyPart.split(" ").slice(0,-1);
203
- keyParts.reduce(function(keyMapKeys, keyPart, i) {
204
- var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';
205
- return keyMapKeys.concat([prefix + keyPart]);
206
- }, []).forEach(function(keyPart) {
207
- if (!ckb[keyPart]) ckb[keyPart] = "null";
188
+ define("ace/commands/incremental_search_commands",["require","exports","module","ace/config","ace/lib/oop","ace/keyboard/hash_handler","ace/commands/occur_commands"], function(require, exports, module) {
189
+
190
+ var config = require("../config");
191
+ var oop = require("../lib/oop");
192
+ var HashHandler = require("../keyboard/hash_handler").HashHandler;
193
+ var occurStartCommand = require("./occur_commands").occurStartCommand;
194
+ exports.iSearchStartCommands = [{
195
+ name: "iSearch",
196
+ bindKey: {win: "Ctrl-F", mac: "Command-F"},
197
+ exec: function(editor, options) {
198
+ config.loadModule(["core", "ace/incremental_search"], function(e) {
199
+ var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();
200
+ iSearch.activate(editor, options.backwards);
201
+ if (options.jumpToFirstMatch) iSearch.next(options);
208
202
  });
209
- }, this);
203
+ },
204
+ readOnly: true
205
+ }, {
206
+ name: "iSearchBackwards",
207
+ exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },
208
+ readOnly: true
209
+ }, {
210
+ name: "iSearchAndGo",
211
+ bindKey: {win: "Ctrl-K", mac: "Command-G"},
212
+ exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },
213
+ readOnly: true
214
+ }, {
215
+ name: "iSearchBackwardsAndGo",
216
+ bindKey: {win: "Ctrl-Shift-K", mac: "Command-Shift-G"},
217
+ exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },
218
+ readOnly: true
219
+ }];
220
+ exports.iSearchCommands = [{
221
+ name: "restartSearch",
222
+ bindKey: {win: "Ctrl-F", mac: "Command-F"},
223
+ exec: function(iSearch) {
224
+ iSearch.cancelSearch(true);
225
+ },
226
+ readOnly: true,
227
+ isIncrementalSearchCommand: true
228
+ }, {
229
+ name: "searchForward",
230
+ bindKey: {win: "Ctrl-S|Ctrl-K", mac: "Ctrl-S|Command-G"},
231
+ exec: function(iSearch, options) {
232
+ options.useCurrentOrPrevSearch = true;
233
+ iSearch.next(options);
234
+ },
235
+ readOnly: true,
236
+ isIncrementalSearchCommand: true
237
+ }, {
238
+ name: "searchBackward",
239
+ bindKey: {win: "Ctrl-R|Ctrl-Shift-K", mac: "Ctrl-R|Command-Shift-G"},
240
+ exec: function(iSearch, options) {
241
+ options.useCurrentOrPrevSearch = true;
242
+ options.backwards = true;
243
+ iSearch.next(options);
244
+ },
245
+ readOnly: true,
246
+ isIncrementalSearchCommand: true
247
+ }, {
248
+ name: "extendSearchTerm",
249
+ exec: function(iSearch, string) {
250
+ iSearch.addString(string);
251
+ },
252
+ readOnly: true,
253
+ isIncrementalSearchCommand: true
254
+ }, {
255
+ name: "extendSearchTermSpace",
256
+ bindKey: "space",
257
+ exec: function(iSearch) { iSearch.addString(' '); },
258
+ readOnly: true,
259
+ isIncrementalSearchCommand: true
260
+ }, {
261
+ name: "shrinkSearchTerm",
262
+ bindKey: "backspace",
263
+ exec: function(iSearch) {
264
+ iSearch.removeChar();
265
+ },
266
+ readOnly: true,
267
+ isIncrementalSearchCommand: true
268
+ }, {
269
+ name: 'confirmSearch',
270
+ bindKey: 'return',
271
+ exec: function(iSearch) { iSearch.deactivate(); },
272
+ readOnly: true,
273
+ isIncrementalSearchCommand: true
274
+ }, {
275
+ name: 'cancelSearch',
276
+ bindKey: 'esc|Ctrl-G',
277
+ exec: function(iSearch) { iSearch.deactivate(true); },
278
+ readOnly: true,
279
+ isIncrementalSearchCommand: true
280
+ }, {
281
+ name: 'occurisearch',
282
+ bindKey: 'Ctrl-O',
283
+ exec: function(iSearch) {
284
+ var options = oop.mixin({}, iSearch.$options);
285
+ iSearch.deactivate();
286
+ occurStartCommand.exec(iSearch.$editor, options);
287
+ },
288
+ readOnly: true,
289
+ isIncrementalSearchCommand: true
290
+ }, {
291
+ name: "yankNextWord",
292
+ bindKey: "Ctrl-w",
293
+ exec: function(iSearch) {
294
+ var ed = iSearch.$editor,
295
+ range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),
296
+ string = ed.session.getTextRange(range);
297
+ iSearch.addString(string);
298
+ },
299
+ readOnly: true,
300
+ isIncrementalSearchCommand: true
301
+ }, {
302
+ name: "yankNextChar",
303
+ bindKey: "Ctrl-Alt-y",
304
+ exec: function(iSearch) {
305
+ var ed = iSearch.$editor,
306
+ range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),
307
+ string = ed.session.getTextRange(range);
308
+ iSearch.addString(string);
309
+ },
310
+ readOnly: true,
311
+ isIncrementalSearchCommand: true
312
+ }, {
313
+ name: 'recenterTopBottom',
314
+ bindKey: 'Ctrl-l',
315
+ exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); },
316
+ readOnly: true,
317
+ isIncrementalSearchCommand: true
318
+ }];
319
+
320
+ function IncrementalSearchKeyboardHandler(iSearch) {
321
+ this.$iSearch = iSearch;
210
322
  }
211
323
 
212
- exports.handler.handleKeyboard = function(data, hashId, key, keyCode) {
213
- var editor = data.editor;
214
- if (hashId == -1) {
215
- editor.pushEmacsMark();
216
- if (data.count) {
217
- var str = Array(data.count + 1).join(key);
218
- data.count = null;
219
- return {command: "insertstring", args: str};
220
- }
221
- }
324
+ oop.inherits(IncrementalSearchKeyboardHandler, HashHandler);
222
325
 
223
- if (key == "\x00") return undefined;
326
+ ;(function() {
224
327
 
225
- var modifier = eMods[hashId];
226
- if (modifier == "c-" || data.universalArgument) {
227
- var prevCount = String(data.count || 0);
228
- var count = parseInt(key[key.length - 1]);
229
- if (typeof count === 'number' && !isNaN(count)) {
230
- data.count = parseInt(prevCount + count);
231
- return {command: "null"};
232
- } else if (data.universalArgument) {
233
- data.count = 4;
234
- }
328
+ this.attach = function(editor) {
329
+ var iSearch = this.$iSearch;
330
+ HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);
331
+ this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {
332
+ if (!e.command.isIncrementalSearchCommand) return undefined;
333
+ e.stopPropagation();
334
+ e.preventDefault();
335
+ return e.command.exec(iSearch, e.args || {});
336
+ });
235
337
  }
236
- data.universalArgument = false;
237
- if (modifier) key = modifier + key;
238
- if (data.keyChain) key = data.keyChain += " " + key;
239
- var command = this.commandKeyBinding[key];
240
- data.keyChain = command == "null" ? key : "";
241
- if (!command) return undefined;
242
- if (command === "null") return {command: "null"};
243
338
 
244
- if (command === "universalArgument") {
245
- data.universalArgument = true;
246
- return {command: "null"};
247
- }
248
- var args;
249
- if (typeof command !== "string") {
250
- args = command.args;
251
- if (command.command) command = command.command;
252
- if (command === "goorselect") {
253
- command = editor.emacsMark() ? args[1] : args[0];
254
- args = null;
255
- }
339
+ this.detach = function(editor) {
340
+ if (!this.$commandExecHandler) return;
341
+ editor.commands.removeEventListener('exec', this.$commandExecHandler);
342
+ delete this.$commandExecHandler;
256
343
  }
257
344
 
258
- if (typeof command === "string") {
259
- if (command === "insertstring" ||
260
- command === "splitline" ||
261
- command === "togglecomment") {
262
- editor.pushEmacsMark();
345
+ var handleKeyboard$super = this.handleKeyboard;
346
+ this.handleKeyboard = function(data, hashId, key, keyCode) {
347
+ if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')
348
+ || (hashId === 1/*ctrl*/ && key === 'y')) return null;
349
+ var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
350
+ if (cmd.command) { return cmd; }
351
+ if (hashId == -1) {
352
+ var extendCmd = this.commands.extendSearchTerm;
353
+ if (extendCmd) { return {command: extendCmd, args: key}; }
263
354
  }
264
- command = this.commands[command] || editor.commands.commands[command];
265
- if (!command) return undefined;
355
+ return {command: "null", passEvent: hashId == 0 || hashId == 4};
266
356
  }
267
357
 
268
- if (!command.readonly && !command.isYank)
269
- data.lastCommand = null;
358
+ }).call(IncrementalSearchKeyboardHandler.prototype);
270
359
 
271
- if (data.count) {
272
- var count = data.count;
273
- data.count = 0;
274
- if (!command || !command.handlesCount) {
275
- return {
276
- args: args,
277
- command: {
278
- exec: function(editor, args) {
279
- for (var i = 0; i < count; i++)
280
- command.exec(editor, args);
281
- }
282
- }
283
- };
284
- } else {
285
- if (!args) args = {}
286
- if (typeof args === 'object') args.count = count;
287
- }
288
- }
289
360
 
290
- return {command: command, args: args};
291
- };
292
-
293
- exports.emacsKeys = {
294
- "Up|C-p" : {command: "goorselect", args: ["golineup","selectup"]},
295
- "Down|C-n" : {command: "goorselect", args: ["golinedown","selectdown"]},
296
- "Left|C-b" : {command: "goorselect", args: ["gotoleft","selectleft"]},
297
- "Right|C-f" : {command: "goorselect", args: ["gotoright","selectright"]},
298
- "C-Left|M-b" : {command: "goorselect", args: ["gotowordleft","selectwordleft"]},
299
- "C-Right|M-f" : {command: "goorselect", args: ["gotowordright","selectwordright"]},
300
- "Home|C-a" : {command: "goorselect", args: ["gotolinestart","selecttolinestart"]},
301
- "End|C-e" : {command: "goorselect", args: ["gotolineend","selecttolineend"]},
302
- "C-Home|S-M-,": {command: "goorselect", args: ["gotostart","selecttostart"]},
303
- "C-End|S-M-." : {command: "goorselect", args: ["gotoend","selecttoend"]},
304
- "S-Up|S-C-p" : "selectup",
305
- "S-Down|S-C-n" : "selectdown",
306
- "S-Left|S-C-b" : "selectleft",
307
- "S-Right|S-C-f" : "selectright",
308
- "S-C-Left|S-M-b" : "selectwordleft",
309
- "S-C-Right|S-M-f" : "selectwordright",
310
- "S-Home|S-C-a" : "selecttolinestart",
311
- "S-End|S-C-e" : "selecttolineend",
312
- "S-C-Home" : "selecttostart",
313
- "S-C-End" : "selecttoend",
314
-
315
- "C-l" : "recenterTopBottom",
316
- "M-s" : "centerselection",
317
- "M-g": "gotoline",
318
- "C-x C-p": "selectall",
319
- "C-Down": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
320
- "C-Up": {command: "goorselect", args: ["gotopageup","selectpageup"]},
321
- "PageDown|C-v": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
322
- "PageUp|M-v": {command: "goorselect", args: ["gotopageup","selectpageup"]},
323
- "S-C-Down": "selectpagedown",
324
- "S-C-Up": "selectpageup",
325
-
326
- "C-s": "iSearch",
327
- "C-r": "iSearchBackwards",
328
-
329
- "M-C-s": "findnext",
330
- "M-C-r": "findprevious",
331
- "S-M-5": "replace",
332
- "Backspace": "backspace",
333
- "Delete|C-d": "del",
334
- "Return|C-m": {command: "insertstring", args: "\n"}, // "newline"
335
- "C-o": "splitline",
336
-
337
- "M-d|C-Delete": {command: "killWord", args: "right"},
338
- "C-Backspace|M-Backspace|M-Delete": {command: "killWord", args: "left"},
339
- "C-k": "killLine",
340
-
341
- "C-y|S-Delete": "yank",
342
- "M-y": "yankRotate",
343
- "C-g": "keyboardQuit",
344
-
345
- "C-w": "killRegion",
346
- "M-w": "killRingSave",
347
- "C-Space": "setMark",
348
- "C-x C-x": "exchangePointAndMark",
349
-
350
- "C-t": "transposeletters",
351
- "M-u": "touppercase", // Doesn't work
352
- "M-l": "tolowercase",
353
- "M-/": "autocomplete", // Doesn't work
354
- "C-u": "universalArgument",
355
-
356
- "M-;": "togglecomment",
357
-
358
- "C-/|C-x u|S-C--|C-z": "undo",
359
- "S-C-/|S-C-x u|C--|S-C-z": "redo", //infinite undo?
360
- "C-x r": "selectRectangularRegion",
361
- "M-x": {command: "focusCommandLine", args: "M-x "}
362
- };
363
-
364
-
365
- exports.handler.bindKeys(exports.emacsKeys);
366
-
367
- exports.handler.addCommands({
368
- recenterTopBottom: function(editor) {
369
- var renderer = editor.renderer;
370
- var pos = renderer.$cursorLayer.getPixelPosition();
371
- var h = renderer.$size.scrollerHeight - renderer.lineHeight;
372
- var scrollTop = renderer.scrollTop;
373
- if (Math.abs(pos.top - scrollTop) < 2) {
374
- scrollTop = pos.top - h;
375
- } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {
376
- scrollTop = pos.top;
377
- } else {
378
- scrollTop = pos.top - h * 0.5;
379
- }
380
- editor.session.setScrollTop(scrollTop);
381
- },
382
- selectRectangularRegion: function(editor) {
383
- editor.multiSelect.toggleBlockSelection();
384
- },
385
- setMark: {
386
- exec: function(editor, args) {
387
- if (args && args.count) {
388
- var mark = editor.popEmacsMark();
389
- mark && editor.selection.moveCursorToPosition(mark);
390
- return;
391
- }
392
-
393
- var mark = editor.emacsMark(),
394
- transientMarkModeActive = true;
395
- if (transientMarkModeActive && (mark || !editor.selection.isEmpty())) {
396
- editor.pushEmacsMark();
397
- editor.clearSelection();
398
- return;
399
- }
400
-
401
- if (mark) {
402
- var cp = editor.getCursorPosition();
403
- if (editor.selection.isEmpty() &&
404
- mark.row == cp.row && mark.column == cp.column) {
405
- editor.pushEmacsMark();
406
- return;
407
- }
408
- }
409
- mark = editor.getCursorPosition();
410
- editor.setEmacsMark(mark);
411
- editor.selection.setSelectionAnchor(mark.row, mark.column);
412
- },
413
- readonly: true,
414
- handlesCount: true,
415
- multiSelectAction: "forEach"
416
- },
417
- exchangePointAndMark: {
418
- exec: function(editor, args) {
419
- var sel = editor.selection;
420
- if (args.count) {
421
- var pos = editor.getCursorPosition();
422
- sel.clearSelection();
423
- sel.moveCursorToPosition(editor.popEmacsMark());
424
- editor.pushEmacsMark(pos);
425
- return;
426
- }
427
- var lastMark = editor.getLastEmacsMark();
428
- var range = sel.getRange();
429
- if (range.isEmpty()) {
430
- sel.selectToPosition(lastMark);
431
- return;
432
- }
433
- sel.setSelectionRange(range, !sel.isBackwards());
434
- },
435
- readonly: true,
436
- handlesCount: true,
437
- multiSelectAction: "forEach"
438
- },
439
- killWord: {
440
- exec: function(editor, dir) {
441
- editor.clearSelection();
442
- if (dir == "left")
443
- editor.selection.selectWordLeft();
444
- else
445
- editor.selection.selectWordRight();
446
-
447
- var range = editor.getSelectionRange();
448
- var text = editor.session.getTextRange(range);
449
- exports.killRing.add(text);
450
-
451
- editor.session.remove(range);
452
- editor.clearSelection();
453
- },
454
- multiSelectAction: "forEach"
455
- },
456
- killLine: function(editor) {
457
- editor.pushEmacsMark(null);
458
- var pos = editor.getCursorPosition();
459
- if (pos.column == 0 &&
460
- editor.session.doc.getLine(pos.row).length == 0) {
461
- editor.selection.selectLine();
462
- } else {
463
- editor.clearSelection();
464
- editor.selection.selectLineEnd();
465
- }
466
- var range = editor.getSelectionRange();
467
- var text = editor.session.getTextRange(range);
468
- exports.killRing.add(text);
469
-
470
- editor.session.remove(range);
471
- editor.clearSelection();
472
- },
473
- yank: function(editor) {
474
- editor.onPaste(exports.killRing.get() || '');
475
- editor.keyBinding.$data.lastCommand = "yank";
476
- },
477
- yankRotate: function(editor) {
478
- if (editor.keyBinding.$data.lastCommand != "yank")
479
- return;
480
- editor.undo();
481
- editor.onPaste(exports.killRing.rotate());
482
- editor.keyBinding.$data.lastCommand = "yank";
483
- },
484
- killRegion: {
485
- exec: function(editor) {
486
- exports.killRing.add(editor.getCopyText());
487
- editor.commands.byName.cut.exec(editor);
488
- },
489
- readonly: true,
490
- multiSelectAction: "forEach"
491
- },
492
- killRingSave: {
493
- exec: function(editor) {
494
- exports.killRing.add(editor.getCopyText());
495
- setTimeout(function() {
496
- var sel = editor.selection,
497
- range = sel.getRange();
498
- editor.pushEmacsMark(sel.isBackwards() ? range.end : range.start);
499
- sel.clearSelection();
500
- }, 0);
501
- },
502
- readonly: true
503
- },
504
- keyboardQuit: function(editor) {
505
- editor.selection.clearSelection();
506
- editor.setEmacsMark(null);
507
- },
508
- focusCommandLine: function(editor, arg) {
509
- if (editor.showCommandLine)
510
- editor.showCommandLine(arg);
511
- }
512
- });
513
-
514
- exports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);
515
-
516
- var commands = exports.handler.commands;
517
- commands.yank.isYank = true;
518
- commands.yankRotate.isYank = true;
519
-
520
- exports.killRing = {
521
- $data: [],
522
- add: function(str) {
523
- str && this.$data.push(str);
524
- if (this.$data.length > 30)
525
- this.$data.shift();
526
- },
527
- get: function(n) {
528
- n = n || 1;
529
- return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\n');
530
- },
531
- pop: function() {
532
- if (this.$data.length > 1)
533
- this.$data.pop();
534
- return this.get();
535
- },
536
- rotate: function() {
537
- this.$data.unshift(this.$data.pop());
538
- return this.get();
539
- }
540
- };
361
+ exports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;
541
362
 
542
363
  });
543
364
 
544
- define('ace/incremental_search', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/search', 'ace/search_highlight', 'ace/commands/incremental_search_commands', 'ace/lib/dom', 'ace/commands/command_manager', 'ace/editor', 'ace/config'], function(require, exports, module) {
545
-
365
+ define("ace/incremental_search",["require","exports","module","ace/lib/oop","ace/range","ace/search","ace/search_highlight","ace/commands/incremental_search_commands","ace/lib/dom","ace/commands/command_manager","ace/editor","ace/config"], function(require, exports, module) {
366
+ "use strict";
546
367
 
547
368
  var oop = require("./lib/oop");
548
369
  var Range = require("./range").Range;
@@ -565,6 +386,7 @@ oop.inherits(IncrementalSearch, Search);
565
386
  this.$options.needle = '';
566
387
  this.$options.backwards = backwards;
567
388
  ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);
389
+ this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);
568
390
  this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));
569
391
  this.selectionFix(ed);
570
392
  this.statusMessage(true);
@@ -572,11 +394,13 @@ oop.inherits(IncrementalSearch, Search);
572
394
 
573
395
  this.deactivate = function(reset) {
574
396
  this.cancelSearch(reset);
575
- this.$editor.keyBinding.removeKeyboardHandler(this.$keyboardHandler);
397
+ var ed = this.$editor;
398
+ ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);
576
399
  if (this.$mousedownHandler) {
577
- this.$editor.removeEventListener('mousedown', this.$mousedownHandler);
400
+ ed.removeEventListener('mousedown', this.$mousedownHandler);
578
401
  delete this.$mousedownHandler;
579
402
  }
403
+ ed.onPaste = this.$originalEditorOnPaste;
580
404
  this.message('');
581
405
  }
582
406
 
@@ -633,9 +457,9 @@ oop.inherits(IncrementalSearch, Search);
633
457
  return found;
634
458
  }
635
459
 
636
- this.addChar = function(c) {
460
+ this.addString = function(s) {
637
461
  return this.highlightAndFindWithNeedle(false, function(needle) {
638
- return needle + c;
462
+ return needle + s;
639
463
  });
640
464
  }
641
465
 
@@ -660,6 +484,10 @@ oop.inherits(IncrementalSearch, Search);
660
484
  return true;
661
485
  }
662
486
 
487
+ this.onPaste = function(text) {
488
+ this.addString(text);
489
+ }
490
+
663
491
  this.statusMessage = function(found) {
664
492
  var options = this.$options, msg = '';
665
493
  msg += options.backwards ? 'reverse-' : '';
@@ -726,333 +554,520 @@ require("./config").defineOptions(Editor.prototype, "editor", {
726
554
 
727
555
  });
728
556
 
729
- define('ace/commands/incremental_search_commands', ['require', 'exports', 'module' , 'ace/config', 'ace/lib/oop', 'ace/keyboard/hash_handler', 'ace/commands/occur_commands'], function(require, exports, module) {
557
+ define("ace/keyboard/emacs",["require","exports","module","ace/lib/dom","ace/incremental_search","ace/commands/incremental_search_commands","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) {
558
+ "use strict";
730
559
 
731
- var config = require("../config");
732
- var oop = require("../lib/oop");
733
- var HashHandler = require("../keyboard/hash_handler").HashHandler;
734
- var occurStartCommand = require("./occur_commands").occurStartCommand;
735
- exports.iSearchStartCommands = [{
736
- name: "iSearch",
737
- bindKey: {win: "Ctrl-F", mac: "Command-F"},
738
- exec: function(editor, options) {
739
- config.loadModule(["core", "ace/incremental_search"], function(e) {
740
- var iSearch = e.iSearch = e.iSearch || new e.IncrementalSearch();
741
- iSearch.activate(editor, options.backwards);
742
- if (options.jumpToFirstMatch) iSearch.next(options);
743
- });
744
- },
745
- readOnly: true
746
- }, {
747
- name: "iSearchBackwards",
748
- exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {backwards: true}); },
749
- readOnly: true
750
- }, {
751
- name: "iSearchAndGo",
752
- bindKey: {win: "Ctrl-K", mac: "Command-G"},
753
- exec: function(editor, jumpToNext) { editor.execCommand('iSearch', {jumpToFirstMatch: true, useCurrentOrPrevSearch: true}); },
754
- readOnly: true
755
- }, {
756
- name: "iSearchBackwardsAndGo",
757
- bindKey: {win: "Ctrl-Shift-K", mac: "Command-Shift-G"},
758
- exec: function(editor) { editor.execCommand('iSearch', {jumpToFirstMatch: true, backwards: true, useCurrentOrPrevSearch: true}); },
759
- readOnly: true
760
- }];
761
- exports.iSearchCommands = [{
762
- name: "restartSearch",
763
- bindKey: {win: "Ctrl-F", mac: "Command-F"},
764
- exec: function(iSearch) {
765
- iSearch.cancelSearch(true);
766
- },
767
- readOnly: true,
768
- isIncrementalSearchCommand: true
769
- }, {
770
- name: "searchForward",
771
- bindKey: {win: "Ctrl-S|Ctrl-K", mac: "Ctrl-S|Command-G"},
772
- exec: function(iSearch, options) {
773
- options.useCurrentOrPrevSearch = true;
774
- iSearch.next(options);
775
- },
776
- readOnly: true,
777
- isIncrementalSearchCommand: true
778
- }, {
779
- name: "searchBackward",
780
- bindKey: {win: "Ctrl-R|Ctrl-Shift-K", mac: "Ctrl-R|Command-Shift-G"},
781
- exec: function(iSearch, options) {
782
- options.useCurrentOrPrevSearch = true;
783
- options.backwards = true;
784
- iSearch.next(options);
785
- },
786
- readOnly: true,
787
- isIncrementalSearchCommand: true
788
- }, {
789
- name: "extendSearchTerm",
790
- exec: function(iSearch, string) {
791
- iSearch.addChar(string);
792
- },
793
- readOnly: true,
794
- isIncrementalSearchCommand: true
795
- }, {
796
- name: "extendSearchTermSpace",
797
- bindKey: "space",
798
- exec: function(iSearch) { iSearch.addChar(' '); },
799
- readOnly: true,
800
- isIncrementalSearchCommand: true
801
- }, {
802
- name: "shrinkSearchTerm",
803
- bindKey: "backspace",
804
- exec: function(iSearch) {
805
- iSearch.removeChar();
806
- },
807
- readOnly: true,
808
- isIncrementalSearchCommand: true
809
- }, {
810
- name: 'confirmSearch',
811
- bindKey: 'return',
812
- exec: function(iSearch) { iSearch.deactivate(); },
813
- readOnly: true,
814
- isIncrementalSearchCommand: true
815
- }, {
816
- name: 'cancelSearch',
817
- bindKey: 'esc|Ctrl-G',
818
- exec: function(iSearch) { iSearch.deactivate(true); },
819
- readOnly: true,
820
- isIncrementalSearchCommand: true
821
- }, {
822
- name: 'occurisearch',
823
- bindKey: 'Ctrl-O',
824
- exec: function(iSearch) {
825
- var options = oop.mixin({}, iSearch.$options);
826
- iSearch.deactivate();
827
- occurStartCommand.exec(iSearch.$editor, options);
828
- },
829
- readOnly: true,
830
- isIncrementalSearchCommand: true
831
- }];
832
-
833
- function IncrementalSearchKeyboardHandler(iSearch) {
834
- this.$iSearch = iSearch;
835
- }
836
-
837
- oop.inherits(IncrementalSearchKeyboardHandler, HashHandler);
838
-
839
- ;(function() {
560
+ var dom = require("../lib/dom");
561
+ require("../incremental_search");
562
+ var iSearchCommandModule = require("../commands/incremental_search_commands");
840
563
 
841
- this.attach = function(editor) {
842
- var iSearch = this.$iSearch;
843
- HashHandler.call(this, exports.iSearchCommands, editor.commands.platform);
844
- this.$commandExecHandler = editor.commands.addEventListener('exec', function(e) {
845
- if (!e.command.isIncrementalSearchCommand) return undefined;
846
- e.stopPropagation();
847
- e.preventDefault();
848
- return e.command.exec(iSearch, e.args || {});
849
- });
850
- }
851
564
 
852
- this.detach = function(editor) {
853
- if (!this.$commandExecHandler) return;
854
- editor.commands.removeEventListener('exec', this.$commandExecHandler);
855
- delete this.$commandExecHandler;
856
- }
565
+ var screenToTextBlockCoordinates = function(x, y) {
566
+ var canvasPos = this.scroller.getBoundingClientRect();
857
567
 
858
- var handleKeyboard$super = this.handleKeyboard;
859
- this.handleKeyboard = function(data, hashId, key, keyCode) {
860
- var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
861
- if (cmd.command) { return cmd; }
862
- if (hashId == -1) {
863
- var extendCmd = this.commands.extendSearchTerm;
864
- if (extendCmd) { return {command: extendCmd, args: key}; }
865
- }
866
- return {command: "null", passEvent: hashId == 0 || hashId == 4};
867
- }
568
+ var col = Math.floor(
569
+ (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth
570
+ );
571
+ var row = Math.floor(
572
+ (y + this.scrollTop - canvasPos.top) / this.lineHeight
573
+ );
868
574
 
869
- }).call(IncrementalSearchKeyboardHandler.prototype);
575
+ return this.session.screenToDocumentPosition(row, col);
576
+ };
870
577
 
578
+ var HashHandler = require("./hash_handler").HashHandler;
579
+ exports.handler = new HashHandler();
871
580
 
872
- exports.IncrementalSearchKeyboardHandler = IncrementalSearchKeyboardHandler;
581
+ exports.handler.isEmacs = true;
582
+ exports.handler.$id = "ace/keyboard/emacs";
873
583
 
874
- });
584
+ var initialized = false;
585
+ var $formerLongWords;
586
+ var $formerLineStart;
875
587
 
876
- define('ace/commands/occur_commands', ['require', 'exports', 'module' , 'ace/config', 'ace/occur', 'ace/keyboard/hash_handler', 'ace/lib/oop'], function(require, exports, module) {
588
+ exports.handler.attach = function(editor) {
589
+ if (!initialized) {
590
+ initialized = true;
591
+ dom.importCssString('\
592
+ .emacs-mode .ace_cursor{\
593
+ border: 2px rgba(50,250,50,0.8) solid!important;\
594
+ -moz-box-sizing: border-box!important;\
595
+ -webkit-box-sizing: border-box!important;\
596
+ box-sizing: border-box!important;\
597
+ background-color: rgba(0,250,0,0.9);\
598
+ opacity: 0.5;\
599
+ }\
600
+ .emacs-mode .ace_hidden-cursors .ace_cursor{\
601
+ opacity: 1;\
602
+ background-color: transparent;\
603
+ }\
604
+ .emacs-mode .ace_overwrite-cursors .ace_cursor {\
605
+ opacity: 1;\
606
+ background-color: transparent;\
607
+ border-width: 0 0 2px 2px !important;\
608
+ }\
609
+ .emacs-mode .ace_text-layer {\
610
+ z-index: 4\
611
+ }\
612
+ .emacs-mode .ace_cursor-layer {\
613
+ z-index: 2\
614
+ }', 'emacsMode'
615
+ );
616
+ }
617
+ $formerLongWords = editor.session.$selectLongWords;
618
+ editor.session.$selectLongWords = true;
619
+ $formerLineStart = editor.session.$useEmacsStyleLineStart;
620
+ editor.session.$useEmacsStyleLineStart = true;
877
621
 
878
- var config = require("../config"),
879
- Occur = require("../occur").Occur;
880
- var occurStartCommand = {
881
- name: "occur",
882
- exec: function(editor, options) {
883
- var alreadyInOccur = !!editor.session.$occur;
884
- var occurSessionActive = new Occur().enter(editor, options);
885
- if (occurSessionActive && !alreadyInOccur)
886
- OccurKeyboardHandler.installIn(editor);
887
- },
888
- readOnly: true
889
- };
622
+ editor.session.$emacsMark = null; // the active mark
623
+ editor.session.$emacsMarkRing = editor.session.$emacsMarkRing || [];
890
624
 
891
- var occurCommands = [{
892
- name: "occurexit",
893
- bindKey: 'esc|Ctrl-G',
894
- exec: function(editor) {
895
- var occur = editor.session.$occur;
896
- if (!occur) return;
897
- occur.exit(editor, {});
898
- if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
899
- },
900
- readOnly: true
901
- }, {
902
- name: "occuraccept",
903
- bindKey: 'enter',
904
- exec: function(editor) {
905
- var occur = editor.session.$occur;
906
- if (!occur) return;
907
- occur.exit(editor, {translatePosition: true});
908
- if (!editor.session.$occur) OccurKeyboardHandler.uninstallFrom(editor);
909
- },
910
- readOnly: true
911
- }];
625
+ editor.emacsMark = function() {
626
+ return this.session.$emacsMark;
627
+ };
912
628
 
913
- var HashHandler = require("../keyboard/hash_handler").HashHandler;
914
- var oop = require("../lib/oop");
629
+ editor.setEmacsMark = function(p) {
630
+ this.session.$emacsMark = p;
631
+ };
915
632
 
633
+ editor.pushEmacsMark = function(p, activate) {
634
+ var prevMark = this.session.$emacsMark;
635
+ if (prevMark)
636
+ this.session.$emacsMarkRing.push(prevMark);
637
+ if (!p || activate) this.setEmacsMark(p);
638
+ else this.session.$emacsMarkRing.push(p);
639
+ };
916
640
 
917
- function OccurKeyboardHandler() {}
641
+ editor.popEmacsMark = function() {
642
+ var mark = this.emacsMark();
643
+ if (mark) { this.setEmacsMark(null); return mark; }
644
+ return this.session.$emacsMarkRing.pop();
645
+ };
918
646
 
919
- oop.inherits(OccurKeyboardHandler, HashHandler);
647
+ editor.getLastEmacsMark = function(p) {
648
+ return this.session.$emacsMark || this.session.$emacsMarkRing.slice(-1)[0];
649
+ };
920
650
 
921
- ;(function() {
651
+ editor.on("click", $resetMarkMode);
652
+ editor.on("changeSession", $kbSessionChange);
653
+ editor.renderer.screenToTextCoordinates = screenToTextBlockCoordinates;
654
+ editor.setStyle("emacs-mode");
655
+ editor.commands.addCommands(commands);
656
+ exports.handler.platform = editor.commands.platform;
657
+ editor.$emacsModeHandler = this;
658
+ editor.addEventListener('copy', this.onCopy);
659
+ editor.addEventListener('paste', this.onPaste);
660
+ };
922
661
 
923
- this.isOccurHandler = true;
662
+ exports.handler.detach = function(editor) {
663
+ delete editor.renderer.screenToTextCoordinates;
664
+ editor.session.$selectLongWords = $formerLongWords;
665
+ editor.session.$useEmacsStyleLineStart = $formerLineStart;
666
+ editor.removeEventListener("click", $resetMarkMode);
667
+ editor.removeEventListener("changeSession", $kbSessionChange);
668
+ editor.unsetStyle("emacs-mode");
669
+ editor.commands.removeCommands(commands);
670
+ editor.removeEventListener('copy', this.onCopy);
671
+ editor.removeEventListener('paste', this.onPaste);
672
+ };
924
673
 
925
- this.attach = function(editor) {
926
- HashHandler.call(this, occurCommands, editor.commands.platform);
927
- this.$editor = editor;
674
+ var $kbSessionChange = function(e) {
675
+ if (e.oldSession) {
676
+ e.oldSession.$selectLongWords = $formerLongWords;
677
+ e.oldSession.$useEmacsStyleLineStart = $formerLineStart;
928
678
  }
929
679
 
930
- var handleKeyboard$super = this.handleKeyboard;
931
- this.handleKeyboard = function(data, hashId, key, keyCode) {
932
- var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
933
- return (cmd && cmd.command) ? cmd : undefined;
934
- }
935
-
936
- }).call(OccurKeyboardHandler.prototype);
937
-
938
- OccurKeyboardHandler.installIn = function(editor) {
939
- var handler = new this();
940
- editor.keyBinding.addKeyboardHandler(handler);
941
- editor.commands.addCommands(occurCommands);
942
- }
680
+ $formerLongWords = e.session.$selectLongWords;
681
+ e.session.$selectLongWords = true;
682
+ $formerLineStart = e.session.$useEmacsStyleLineStart;
683
+ e.session.$useEmacsStyleLineStart = true;
943
684
 
944
- OccurKeyboardHandler.uninstallFrom = function(editor) {
945
- editor.commands.removeCommands(occurCommands);
946
- var handler = editor.getKeyboardHandler();
947
- if (handler.isOccurHandler)
948
- editor.keyBinding.removeKeyboardHandler(handler);
949
- }
685
+ if (!e.session.hasOwnProperty('$emacsMark'))
686
+ e.session.$emacsMark = null;
687
+ if (!e.session.hasOwnProperty('$emacsMarkRing'))
688
+ e.session.$emacsMarkRing = [];
689
+ };
950
690
 
951
- exports.occurStartCommand = occurStartCommand;
691
+ var $resetMarkMode = function(e) {
692
+ e.editor.session.$emacsMark = null;
693
+ };
952
694
 
695
+ var keys = require("../lib/keys").KEY_MODS;
696
+ var eMods = {C: "ctrl", S: "shift", M: "alt", CMD: "command"};
697
+ var combinations = ["C-S-M-CMD",
698
+ "S-M-CMD", "C-M-CMD", "C-S-CMD", "C-S-M",
699
+ "M-CMD", "S-CMD", "S-M", "C-CMD", "C-M", "C-S",
700
+ "CMD", "M", "S", "C"];
701
+ combinations.forEach(function(c) {
702
+ var hashId = 0;
703
+ c.split("-").forEach(function(c) {
704
+ hashId = hashId | keys[eMods[c]];
705
+ });
706
+ eMods[hashId] = c.toLowerCase() + "-";
953
707
  });
954
708
 
955
- define('ace/occur', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/search', 'ace/edit_session', 'ace/search_highlight', 'ace/lib/dom'], function(require, exports, module) {
709
+ exports.handler.onCopy = function(e, editor) {
710
+ if (editor.$handlesEmacsOnCopy) return;
711
+ editor.$handlesEmacsOnCopy = true;
712
+ exports.handler.commands.killRingSave.exec(editor);
713
+ delete editor.$handlesEmacsOnCopy;
714
+ };
956
715
 
716
+ exports.handler.onPaste = function(e, editor) {
717
+ editor.pushEmacsMark(editor.getCursorPosition());
718
+ };
957
719
 
958
- var oop = require("./lib/oop");
959
- var Range = require("./range").Range;
960
- var Search = require("./search").Search;
961
- var EditSession = require("./edit_session").EditSession;
962
- var SearchHighlight = require("./search_highlight").SearchHighlight;
963
- function Occur() {}
720
+ exports.handler.bindKey = function(key, command) {
721
+ if (!key)
722
+ return;
964
723
 
965
- oop.inherits(Occur, Search);
724
+ var ckb = this.commandKeyBinding;
725
+ key.split("|").forEach(function(keyPart) {
726
+ keyPart = keyPart.toLowerCase();
727
+ ckb[keyPart] = command;
728
+ var keyParts = keyPart.split(" ").slice(0,-1);
729
+ keyParts.reduce(function(keyMapKeys, keyPart, i) {
730
+ var prefix = keyMapKeys[i-1] ? keyMapKeys[i-1] + ' ' : '';
731
+ return keyMapKeys.concat([prefix + keyPart]);
732
+ }, []).forEach(function(keyPart) {
733
+ if (!ckb[keyPart]) ckb[keyPart] = "null";
734
+ });
735
+ }, this);
736
+ };
966
737
 
967
- (function() {
968
- this.enter = function(editor, options) {
969
- if (!options.needle) return false;
970
- var pos = editor.getCursorPosition();
971
- this.displayOccurContent(editor, options);
972
- var translatedPos = this.originalToOccurPosition(editor.session, pos);
973
- editor.moveCursorToPosition(translatedPos);
974
- return true;
975
- }
976
- this.exit = function(editor, options) {
977
- var pos = options.translatePosition && editor.getCursorPosition();
978
- var translatedPos = pos && this.occurToOriginalPosition(editor.session, pos);
979
- this.displayOriginalContent(editor);
980
- if (translatedPos)
981
- editor.moveCursorToPosition(translatedPos);
982
- return true;
983
- }
738
+ exports.handler.handleKeyboard = function(data, hashId, key, keyCode) {
739
+ if (keyCode === -1) return undefined;
984
740
 
985
- this.highlight = function(sess, regexp) {
986
- var hl = sess.$occurHighlight = sess.$occurHighlight || sess.addDynamicMarker(
987
- new SearchHighlight(null, "ace_occur-highlight", "text"));
988
- hl.setRegexp(regexp);
989
- sess._emit("changeBackMarker"); // force highlight layer redraw
741
+ var editor = data.editor;
742
+ if (hashId == -1) {
743
+ editor.pushEmacsMark();
744
+ if (data.count) {
745
+ var str = new Array(data.count + 1).join(key);
746
+ data.count = null;
747
+ return {command: "insertstring", args: str};
748
+ }
990
749
  }
991
750
 
992
- this.displayOccurContent = function(editor, options) {
993
- this.$originalSession = editor.session;
994
- var found = this.matchingLines(editor.session, options);
995
- var lines = found.map(function(foundLine) { return foundLine.content; });
996
- var occurSession = new EditSession(lines.join('\n'));
997
- occurSession.$occur = this;
998
- occurSession.$occurMatchingLines = found;
999
- editor.setSession(occurSession);
1000
- this.highlight(occurSession, options.re);
1001
- occurSession._emit('changeBackMarker');
751
+ if (key == "\x00") return undefined;
752
+
753
+ var modifier = eMods[hashId];
754
+ if (modifier == "c-" || data.universalArgument) {
755
+ var prevCount = String(data.count || 0);
756
+ var count = parseInt(key[key.length - 1]);
757
+ if (typeof count === 'number' && !isNaN(count)) {
758
+ data.count = parseInt(prevCount + count);
759
+ return {command: "null"};
760
+ } else if (data.universalArgument) {
761
+ data.count = 4;
762
+ }
1002
763
  }
764
+ data.universalArgument = false;
765
+ if (modifier) key = modifier + key;
766
+ if (data.keyChain) key = data.keyChain += " " + key;
767
+ var command = this.commandKeyBinding[key];
768
+ data.keyChain = command == "null" ? key : "";
769
+ if (!command) return undefined;
770
+ if (command === "null") return {command: "null"};
1003
771
 
1004
- this.displayOriginalContent = function(editor) {
1005
- editor.setSession(this.$originalSession);
772
+ if (command === "universalArgument") {
773
+ data.universalArgument = true;
774
+ return {command: "null"};
1006
775
  }
1007
- this.originalToOccurPosition = function(session, pos) {
1008
- var lines = session.$occurMatchingLines;
1009
- var nullPos = {row: 0, column: 0};
1010
- if (!lines) return nullPos;
1011
- for (var i = 0; i < lines.length; i++) {
1012
- if (lines[i].row === pos.row)
1013
- return {row: i, column: pos.column};
776
+ var args;
777
+ if (typeof command !== "string") {
778
+ args = command.args;
779
+ if (command.command) command = command.command;
780
+ if (command === "goorselect") {
781
+ command = editor.emacsMark() ? args[1] : args[0];
782
+ args = null;
1014
783
  }
1015
- return nullPos;
1016
784
  }
1017
- this.occurToOriginalPosition = function(session, pos) {
1018
- var lines = session.$occurMatchingLines;
1019
- if (!lines || !lines[pos.row])
1020
- return pos;
1021
- return {row: lines[pos.row].row, column: pos.column};
785
+
786
+ if (typeof command === "string") {
787
+ if (command === "insertstring" ||
788
+ command === "splitline" ||
789
+ command === "togglecomment") {
790
+ editor.pushEmacsMark();
791
+ }
792
+ command = this.commands[command] || editor.commands.commands[command];
793
+ if (!command) return undefined;
1022
794
  }
1023
795
 
1024
- this.matchingLines = function(session, options) {
1025
- options = oop.mixin({}, options);
1026
- if (!session || !options.needle) return [];
1027
- var search = new Search();
1028
- search.set(options);
1029
- return search.findAll(session).reduce(function(lines, range) {
1030
- var row = range.start.row;
1031
- var last = lines[lines.length-1];
1032
- return last && last.row === row ?
1033
- lines :
1034
- lines.concat({row: row, content: session.getLine(row)});
1035
- }, []);
796
+ if (!command.readOnly && !command.isYank)
797
+ data.lastCommand = null;
798
+
799
+ if (!command.readOnly && editor.emacsMark())
800
+ editor.setEmacsMark(null)
801
+
802
+ if (data.count) {
803
+ var count = data.count;
804
+ data.count = 0;
805
+ if (!command || !command.handlesCount) {
806
+ return {
807
+ args: args,
808
+ command: {
809
+ exec: function(editor, args) {
810
+ for (var i = 0; i < count; i++)
811
+ command.exec(editor, args);
812
+ }
813
+ }
814
+ };
815
+ } else {
816
+ if (!args) args = {};
817
+ if (typeof args === 'object') args.count = count;
818
+ }
1036
819
  }
1037
820
 
1038
- }).call(Occur.prototype);
821
+ return {command: command, args: args};
822
+ };
1039
823
 
1040
- var dom = require('./lib/dom');
1041
- dom.importCssString(".ace_occur-highlight {\n\
1042
- border-radius: 4px;\n\
1043
- background-color: rgba(87, 255, 8, 0.25);\n\
1044
- position: absolute;\n\
1045
- z-index: 4;\n\
1046
- -moz-box-sizing: border-box;\n\
1047
- -webkit-box-sizing: border-box;\n\
1048
- box-sizing: border-box;\n\
1049
- box-shadow: 0 0 4px rgb(91, 255, 50);\n\
1050
- }\n\
1051
- .ace_dark .ace_occur-highlight {\n\
1052
- background-color: rgb(80, 140, 85);\n\
1053
- box-shadow: 0 0 4px rgb(60, 120, 70);\n\
1054
- }\n", "incremental-occur-highlighting");
824
+ exports.emacsKeys = {
825
+ "Up|C-p" : {command: "goorselect", args: ["golineup","selectup"]},
826
+ "Down|C-n" : {command: "goorselect", args: ["golinedown","selectdown"]},
827
+ "Left|C-b" : {command: "goorselect", args: ["gotoleft","selectleft"]},
828
+ "Right|C-f" : {command: "goorselect", args: ["gotoright","selectright"]},
829
+ "C-Left|M-b" : {command: "goorselect", args: ["gotowordleft","selectwordleft"]},
830
+ "C-Right|M-f" : {command: "goorselect", args: ["gotowordright","selectwordright"]},
831
+ "Home|C-a" : {command: "goorselect", args: ["gotolinestart","selecttolinestart"]},
832
+ "End|C-e" : {command: "goorselect", args: ["gotolineend","selecttolineend"]},
833
+ "C-Home|S-M-,": {command: "goorselect", args: ["gotostart","selecttostart"]},
834
+ "C-End|S-M-." : {command: "goorselect", args: ["gotoend","selecttoend"]},
835
+ "S-Up|S-C-p" : "selectup",
836
+ "S-Down|S-C-n" : "selectdown",
837
+ "S-Left|S-C-b" : "selectleft",
838
+ "S-Right|S-C-f" : "selectright",
839
+ "S-C-Left|S-M-b" : "selectwordleft",
840
+ "S-C-Right|S-M-f" : "selectwordright",
841
+ "S-Home|S-C-a" : "selecttolinestart",
842
+ "S-End|S-C-e" : "selecttolineend",
843
+ "S-C-Home" : "selecttostart",
844
+ "S-C-End" : "selecttoend",
1055
845
 
1056
- exports.Occur = Occur;
846
+ "C-l" : "recenterTopBottom",
847
+ "M-s" : "centerselection",
848
+ "M-g": "gotoline",
849
+ "C-x C-p": "selectall",
850
+ "C-Down": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
851
+ "C-Up": {command: "goorselect", args: ["gotopageup","selectpageup"]},
852
+ "PageDown|C-v": {command: "goorselect", args: ["gotopagedown","selectpagedown"]},
853
+ "PageUp|M-v": {command: "goorselect", args: ["gotopageup","selectpageup"]},
854
+ "S-C-Down": "selectpagedown",
855
+ "S-C-Up": "selectpageup",
856
+
857
+ "C-s": "iSearch",
858
+ "C-r": "iSearchBackwards",
859
+
860
+ "M-C-s": "findnext",
861
+ "M-C-r": "findprevious",
862
+ "S-M-5": "replace",
863
+ "Backspace": "backspace",
864
+ "Delete|C-d": "del",
865
+ "Return|C-m": {command: "insertstring", args: "\n"}, // "newline"
866
+ "C-o": "splitline",
867
+
868
+ "M-d|C-Delete": {command: "killWord", args: "right"},
869
+ "C-Backspace|M-Backspace|M-Delete": {command: "killWord", args: "left"},
870
+ "C-k": "killLine",
871
+
872
+ "C-y|S-Delete": "yank",
873
+ "M-y": "yankRotate",
874
+ "C-g": "keyboardQuit",
875
+
876
+ "C-w|C-S-W": "killRegion",
877
+ "M-w": "killRingSave",
878
+ "C-Space": "setMark",
879
+ "C-x C-x": "exchangePointAndMark",
880
+
881
+ "C-t": "transposeletters",
882
+ "M-u": "touppercase", // Doesn't work
883
+ "M-l": "tolowercase",
884
+ "M-/": "autocomplete", // Doesn't work
885
+ "C-u": "universalArgument",
886
+
887
+ "M-;": "togglecomment",
888
+
889
+ "C-/|C-x u|S-C--|C-z": "undo",
890
+ "S-C-/|S-C-x u|C--|S-C-z": "redo", //infinite undo?
891
+ "C-x r": "selectRectangularRegion",
892
+ "M-x": {command: "focusCommandLine", args: "M-x "}
893
+ };
894
+
895
+
896
+ exports.handler.bindKeys(exports.emacsKeys);
897
+
898
+ exports.handler.addCommands({
899
+ recenterTopBottom: function(editor) {
900
+ var renderer = editor.renderer;
901
+ var pos = renderer.$cursorLayer.getPixelPosition();
902
+ var h = renderer.$size.scrollerHeight - renderer.lineHeight;
903
+ var scrollTop = renderer.scrollTop;
904
+ if (Math.abs(pos.top - scrollTop) < 2) {
905
+ scrollTop = pos.top - h;
906
+ } else if (Math.abs(pos.top - scrollTop - h * 0.5) < 2) {
907
+ scrollTop = pos.top;
908
+ } else {
909
+ scrollTop = pos.top - h * 0.5;
910
+ }
911
+ editor.session.setScrollTop(scrollTop);
912
+ },
913
+ selectRectangularRegion: function(editor) {
914
+ editor.multiSelect.toggleBlockSelection();
915
+ },
916
+ setMark: {
917
+ exec: function(editor, args) {
918
+ if (args && args.count) {
919
+ var mark = editor.popEmacsMark();
920
+ mark && editor.selection.moveCursorToPosition(mark);
921
+ return;
922
+ }
923
+
924
+ var mark = editor.emacsMark(),
925
+ transientMarkModeActive = true;
926
+ if (transientMarkModeActive && (mark || !editor.selection.isEmpty())) {
927
+ editor.pushEmacsMark();
928
+ editor.clearSelection();
929
+ return;
930
+ }
931
+
932
+ if (mark) {
933
+ var cp = editor.getCursorPosition();
934
+ if (editor.selection.isEmpty() &&
935
+ mark.row == cp.row && mark.column == cp.column) {
936
+ editor.pushEmacsMark();
937
+ return;
938
+ }
939
+ }
940
+ mark = editor.getCursorPosition();
941
+ editor.setEmacsMark(mark);
942
+ editor.selection.setSelectionAnchor(mark.row, mark.column);
943
+ },
944
+ readOnly: true,
945
+ handlesCount: true,
946
+ multiSelectAction: "forEach"
947
+ },
948
+ exchangePointAndMark: {
949
+ exec: function(editor, args) {
950
+ var sel = editor.selection;
951
+ if (args.count) {
952
+ var pos = editor.getCursorPosition();
953
+ sel.clearSelection();
954
+ sel.moveCursorToPosition(editor.popEmacsMark());
955
+ editor.pushEmacsMark(pos);
956
+ return;
957
+ }
958
+ var lastMark = editor.getLastEmacsMark();
959
+ var range = sel.getRange();
960
+ if (range.isEmpty()) {
961
+ sel.selectToPosition(lastMark);
962
+ return;
963
+ }
964
+ sel.setSelectionRange(range, !sel.isBackwards());
965
+ },
966
+ readOnly: true,
967
+ handlesCount: true,
968
+ multiSelectAction: "forEach"
969
+ },
970
+ killWord: {
971
+ exec: function(editor, dir) {
972
+ editor.clearSelection();
973
+ if (dir == "left")
974
+ editor.selection.selectWordLeft();
975
+ else
976
+ editor.selection.selectWordRight();
977
+
978
+ var range = editor.getSelectionRange();
979
+ var text = editor.session.getTextRange(range);
980
+ exports.killRing.add(text);
981
+
982
+ editor.session.remove(range);
983
+ editor.clearSelection();
984
+ },
985
+ multiSelectAction: "forEach"
986
+ },
987
+ killLine: function(editor) {
988
+ editor.pushEmacsMark(null);
989
+ var pos = editor.getCursorPosition();
990
+ if (pos.column === 0 &&
991
+ editor.session.doc.getLine(pos.row).length === 0) {
992
+ editor.selection.selectLine();
993
+ } else {
994
+ editor.clearSelection();
995
+ editor.selection.selectLineEnd();
996
+ }
997
+ var range = editor.getSelectionRange();
998
+ var text = editor.session.getTextRange(range);
999
+ exports.killRing.add(text);
1000
+
1001
+ editor.session.remove(range);
1002
+ editor.clearSelection();
1003
+ },
1004
+ yank: function(editor) {
1005
+ editor.onPaste(exports.killRing.get() || '');
1006
+ editor.keyBinding.$data.lastCommand = "yank";
1007
+ },
1008
+ yankRotate: function(editor) {
1009
+ if (editor.keyBinding.$data.lastCommand != "yank")
1010
+ return;
1011
+ editor.undo();
1012
+ editor.onPaste(exports.killRing.rotate());
1013
+ editor.keyBinding.$data.lastCommand = "yank";
1014
+ },
1015
+ killRegion: {
1016
+ exec: function(editor) {
1017
+ exports.killRing.add(editor.getCopyText());
1018
+ editor.commands.byName.cut.exec(editor);
1019
+ },
1020
+ readOnly: true,
1021
+ multiSelectAction: "forEach"
1022
+ },
1023
+ killRingSave: {
1024
+ exec: function(editor) {
1025
+ exports.killRing.add(editor.getCopyText());
1026
+ setTimeout(function() {
1027
+ var sel = editor.selection,
1028
+ range = sel.getRange();
1029
+ editor.pushEmacsMark(sel.isBackwards() ? range.end : range.start);
1030
+ sel.clearSelection();
1031
+ }, 0);
1032
+ },
1033
+ readOnly: true
1034
+ },
1035
+ keyboardQuit: function(editor) {
1036
+ editor.selection.clearSelection();
1037
+ editor.setEmacsMark(null);
1038
+ },
1039
+ focusCommandLine: function(editor, arg) {
1040
+ if (editor.showCommandLine)
1041
+ editor.showCommandLine(arg);
1042
+ }
1043
+ });
1044
+
1045
+ exports.handler.addCommands(iSearchCommandModule.iSearchStartCommands);
1046
+
1047
+ var commands = exports.handler.commands;
1048
+ commands.yank.isYank = true;
1049
+ commands.yankRotate.isYank = true;
1050
+
1051
+ exports.killRing = {
1052
+ $data: [],
1053
+ add: function(str) {
1054
+ str && this.$data.push(str);
1055
+ if (this.$data.length > 30)
1056
+ this.$data.shift();
1057
+ },
1058
+ get: function(n) {
1059
+ n = n || 1;
1060
+ return this.$data.slice(this.$data.length-n, this.$data.length).reverse().join('\n');
1061
+ },
1062
+ pop: function() {
1063
+ if (this.$data.length > 1)
1064
+ this.$data.pop();
1065
+ return this.get();
1066
+ },
1067
+ rotate: function() {
1068
+ this.$data.unshift(this.$data.pop());
1069
+ return this.get();
1070
+ }
1071
+ };
1057
1072
 
1058
1073
  });