File modules/editor/codemirror/doc/manual.html

Last commit: Tue May 22 22:39:54 2018 +0200	Jan Dankert	Fix für PHP 7.2: 'Object' darf nun nicht mehr als Klassennamen verwendet werden. AUCH NICHT IN EINEM NAMESPACE! WTF, wozu habe ich das in einen verfickten Namespace gepackt? Wozu soll der sonst da sein??? Amateure. Daher nun notgedrungen unbenannt in 'BaseObject'.
1 <!doctype html> 2 3 <title>CodeMirror: User Manual</title> 4 <meta charset="utf-8"/> 5 <link rel=stylesheet href="docs.css"> 6 <script src="activebookmark.js"></script> 7 8 <script src="../lib/codemirror.js"></script> 9 <link rel="stylesheet" href="../lib/codemirror.css"> 10 <script src="../addon/runmode/runmode.js"></script> 11 <script src="../addon/runmode/colorize.js"></script> 12 <script src="../mode/javascript/javascript.js"></script> 13 <script src="../mode/xml/xml.js"></script> 14 <script src="../mode/css/css.js"></script> 15 <script src="../mode/htmlmixed/htmlmixed.js"></script> 16 <style> 17 dt { text-indent: -2em; padding-left: 2em; margin-top: 1em; } 18 dd { margin-left: 1.5em; margin-bottom: 1em; } 19 dt {margin-top: 1em;} 20 dd dl, dd dt, dd dd, dd ul { margin-top: 0; margin-bottom: 0; } 21 dt + dt { margin-top: 0; } 22 dt.command { position: relative; } 23 span.keybinding { position: absolute; right: 0; font-size: 80%; color: #555; text-indent: 0; } 24 </style> 25 26 <div id=nav> 27 <a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="logo.png"></a> 28 <ul> 29 <li><a href="../index.html">Home</a></li> 30 <li><a href="#overview" class=active data-default="true">Manual</a></li> 31 <li><a href="https://github.com/codemirror/codemirror">Code</a></li> 32 </ul> 33 <ul> 34 <li><a href="#usage">Basic Usage</a></li> 35 <li><a href="#config">Configuration</a></li> 36 <li><a href="#events">Events</a></li> 37 <li><a href="#keymaps">Key maps</a></li> 38 <li><a href="#commands">Commands</a></li> 39 <li><a href="#styling">Customized Styling</a></li> 40 <li><a href="#api">Programming API</a> 41 <ul> 42 <li><a href="#api_constructor">Constructor</a></li> 43 <li><a href="#api_content">Content manipulation</a></li> 44 <li><a href="#api_selection">Selection</a></li> 45 <li><a href="#api_configuration">Configuration</a></li> 46 <li><a href="#api_doc">Document management</a></li> 47 <li><a href="#api_history">History</a></li> 48 <li><a href="#api_marker">Text-marking</a></li> 49 <li><a href="#api_decoration">Widget, gutter, and decoration</a></li> 50 <li><a href="#api_sizing">Sizing, scrolling, and positioning</a></li> 51 <li><a href="#api_mode">Mode, state, and tokens</a></li> 52 <li><a href="#api_misc">Miscellaneous methods</a></li> 53 <li><a href="#api_static">Static properties</a></li> 54 </ul> 55 </li> 56 <li><a href="#addons">Addons</a></li> 57 <li><a href="#modeapi">Writing CodeMirror Modes</a></li> 58 <li><a href="#vimapi">Vim Mode API</a> 59 <ul> 60 <li><a href="#vimapi_configuration">Configuration</a></li> 61 <li><a href="#vimapi_extending">Extending VIM</a></li> 62 </ul> 63 </li> 64 </ul> 65 </div> 66 67 <article> 68 69 <section class=first id=overview> 70 <h2 style="position: relative"> 71 User manual and reference guide 72 <span style="color: #888; font-size: 1rem; position: absolute; right: 0; bottom: 0">version 5.32.0</span> 73 </h2> 74 75 <p>CodeMirror is a code-editor component that can be embedded in 76 Web pages. The core library provides <em>only</em> the editor 77 component, no accompanying buttons, auto-completion, or other IDE 78 functionality. It does provide a rich API on top of which such 79 functionality can be straightforwardly implemented. See 80 the <a href="#addons">addons</a> included in the distribution, 81 and the <a href="https://github.com/codemirror/CodeMirror/wiki/CodeMirror-addons">list 82 of externally hosted addons</a>, for reusable 83 implementations of extra features.</p> 84 85 <p>CodeMirror works with language-specific modes. Modes are 86 JavaScript programs that help color (and optionally indent) text 87 written in a given language. The distribution comes with a number 88 of modes (see the <a href="../mode/"><code>mode/</code></a> 89 directory), and it isn't hard to <a href="#modeapi">write new 90 ones</a> for other languages.</p> 91 </section> 92 93 <section id=usage> 94 <h2>Basic Usage</h2> 95 96 <p>The easiest way to use CodeMirror is to simply load the script 97 and style sheet found under <code>lib/</code> in the distribution, 98 plus a mode script from one of the <code>mode/</code> directories. 99 For example:</p> 100 101 <pre data-lang="text/html">&lt;script src="lib/codemirror.js">&lt;/script> 102 &lt;link rel="stylesheet" href="lib/codemirror.css"> 103 &lt;script src="mode/javascript/javascript.js">&lt;/script></pre> 104 105 <p>(Alternatively, use a module loader. <a href="#modloader">More 106 about that later.</a>)</p> 107 108 <p>Having done this, an editor instance can be created like 109 this:</p> 110 111 <pre data-lang="javascript">var myCodeMirror = CodeMirror(document.body);</pre> 112 113 <p>The editor will be appended to the document body, will start 114 empty, and will use the mode that we loaded. To have more control 115 over the new editor, a configuration object can be passed 116 to <a href="#CodeMirror"><code>CodeMirror</code></a> as a second 117 argument:</p> 118 119 <pre data-lang="javascript">var myCodeMirror = CodeMirror(document.body, { 120 value: "function myScript(){return 100;}\n", 121 mode: "javascript" 122 });</pre> 123 124 <p>This will initialize the editor with a piece of code already in 125 it, and explicitly tell it to use the JavaScript mode (which is 126 useful when multiple modes are loaded). 127 See <a href="#config">below</a> for a full discussion of the 128 configuration options that CodeMirror accepts.</p> 129 130 <p>In cases where you don't want to append the editor to an 131 element, and need more control over the way it is inserted, the 132 first argument to the <code>CodeMirror</code> function can also 133 be a function that, when given a DOM element, inserts it into the 134 document somewhere. This could be used to, for example, replace a 135 textarea with a real editor:</p> 136 137 <pre data-lang="javascript">var myCodeMirror = CodeMirror(function(elt) { 138 myTextArea.parentNode.replaceChild(elt, myTextArea); 139 }, {value: myTextArea.value});</pre> 140 141 <p>However, for this use case, which is a common way to use 142 CodeMirror, the library provides a much more powerful 143 shortcut:</p> 144 145 <pre data-lang="javascript">var myCodeMirror = CodeMirror.fromTextArea(myTextArea);</pre> 146 147 <p>This will, among other things, ensure that the textarea's value 148 is updated with the editor's contents when the form (if it is part 149 of a form) is submitted. See the <a href="#fromTextArea">API 150 reference</a> for a full description of this method.</p> 151 152 <h3 id=modloader>Module loaders</h3> 153 154 <p>The files in the CodeMirror distribution contain shims for 155 loading them (and their dependencies) in AMD or CommonJS 156 environments. If the variables <code>exports</code> 157 and <code>module</code> exist and have type object, CommonJS-style 158 require will be used. If not, but there is a 159 function <code>define</code> with an <code>amd</code> property 160 present, AMD-style (RequireJS) will be used.</p> 161 162 <p>It is possible to 163 use <a href="http://browserify.org/">Browserify</a> or similar 164 tools to statically build modules using CodeMirror. Alternatively, 165 use <a href="http://requirejs.org/">RequireJS</a> to dynamically 166 load dependencies at runtime. Both of these approaches have the 167 advantage that they don't use the global namespace and can, thus, 168 do things like load multiple versions of CodeMirror alongside each 169 other.</p> 170 171 <p>Here's a simple example of using RequireJS to load CodeMirror:</p> 172 173 <pre data-lang="javascript">require([ 174 "cm/lib/codemirror", "cm/mode/htmlmixed/htmlmixed" 175 ], function(CodeMirror) { 176 CodeMirror.fromTextArea(document.getElementById("code"), { 177 lineNumbers: true, 178 mode: "htmlmixed" 179 }); 180 });</pre> 181 182 <p>It will automatically load the modes that the mixed HTML mode 183 depends on (XML, JavaScript, and CSS). Do <em>not</em> use 184 RequireJS' <code>paths</code> option to configure the path to 185 CodeMirror, since it will break loading submodules through 186 relative paths. Use 187 the <a href="http://requirejs.org/docs/api.html#packages"><code>packages</code></a> 188 configuration option instead, as in:</p> 189 190 <pre data-lang=javascript>require.config({ 191 packages: [{ 192 name: "codemirror", 193 location: "../path/to/codemirror", 194 main: "lib/codemirror" 195 }] 196 });</pre> 197 198 </section> 199 200 <section id=config> 201 <h2>Configuration</h2> 202 203 <p>Both the <a href="#CodeMirror"><code>CodeMirror</code></a> 204 function and its <code>fromTextArea</code> method take as second 205 (optional) argument an object containing configuration options. 206 Any option not supplied like this will be taken 207 from <a href="#defaults"><code>CodeMirror.defaults</code></a>, an 208 object containing the default options. You can update this object 209 to change the defaults on your page.</p> 210 211 <p>Options are not checked in any way, so setting bogus option 212 values is bound to lead to odd errors.</p> 213 214 <p>These are the supported options:</p> 215 216 <dl> 217 <dt id="option_value"><code><strong>value</strong>: string|CodeMirror.Doc</code></dt> 218 <dd>The starting value of the editor. Can be a string, or 219 a <a href="#api_doc">document object</a>.</dd> 220 221 <dt id="option_mode"><code><strong>mode</strong>: string|object</code></dt> 222 <dd>The mode to use. When not given, this will default to the 223 first mode that was loaded. It may be a string, which either 224 simply names the mode or is 225 a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type 226 associated with the mode. Alternatively, it may be an object 227 containing configuration options for the mode, with 228 a <code>name</code> property that names the mode (for 229 example <code>{name: "javascript", json: true}</code>). The demo 230 pages for each mode contain information about what configuration 231 parameters the mode supports. You can ask CodeMirror which modes 232 and MIME types have been defined by inspecting 233 the <code>CodeMirror.modes</code> 234 and <code>CodeMirror.mimeModes</code> objects. The first maps 235 mode names to their constructors, and the second maps MIME types 236 to mode specs.</dd> 237 238 <dt id="option_lineSeparator"><code><strong>lineSeparator</strong>: string|null</code></dt> 239 <dd>Explicitly set the line separator for the editor. By default 240 (value <code>null</code>), the document will be split on CRLFs 241 as well as lone CRs and LFs, and a single LF will be used as 242 line separator in all output (such 243 as <a href="#getValue"><code>getValue</code></a>). When a 244 specific string is given, lines will only be split on that 245 string, and output will, by default, use that same 246 separator.</dd> 247 248 <dt id="option_theme"><code><strong>theme</strong>: string</code></dt> 249 <dd>The theme to style the editor with. You must make sure the 250 CSS file defining the corresponding <code>.cm-s-[name]</code> 251 styles is loaded (see 252 the <a href="../theme/"><code>theme</code></a> directory in the 253 distribution). The default is <code>"default"</code>, for which 254 colors are included in <code>codemirror.css</code>. It is 255 possible to use multiple theming classes at once—for 256 example <code>"foo bar"</code> will assign both 257 the <code>cm-s-foo</code> and the <code>cm-s-bar</code> classes 258 to the editor.</dd> 259 260 <dt id="option_indentUnit"><code><strong>indentUnit</strong>: integer</code></dt> 261 <dd>How many spaces a block (whatever that means in the edited 262 language) should be indented. The default is 2.</dd> 263 264 <dt id="option_smartIndent"><code><strong>smartIndent</strong>: boolean</code></dt> 265 <dd>Whether to use the context-sensitive indentation that the 266 mode provides (or just indent the same as the line before). 267 Defaults to true.</dd> 268 269 <dt id="option_tabSize"><code><strong>tabSize</strong>: integer</code></dt> 270 <dd>The width of a tab character. Defaults to 4.</dd> 271 272 <dt id="option_indentWithTabs"><code><strong>indentWithTabs</strong>: boolean</code></dt> 273 <dd>Whether, when indenting, the first N*<code>tabSize</code> 274 spaces should be replaced by N tabs. Default is false.</dd> 275 276 <dt id="option_electricChars"><code><strong>electricChars</strong>: boolean</code></dt> 277 <dd>Configures whether the editor should re-indent the current 278 line when a character is typed that might change its proper 279 indentation (only works if the mode supports indentation). 280 Default is true.</dd> 281 282 <dt id="option_specialChars"><code><strong>specialChars</strong>: RegExp</code></dt> 283 <dd>A regular expression used to determine which characters 284 should be replaced by a 285 special <a href="#option_specialCharPlaceholder">placeholder</a>. 286 Mostly useful for non-printing special characters. The default 287 is <code>/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/</code>.</dd> 288 <dt id="option_specialCharPlaceholder"><code><strong>specialCharPlaceholder</strong>: function(char) → Element</code></dt> 289 <dd>A function that, given a special character identified by 290 the <a href="#option_specialChars"><code>specialChars</code></a> 291 option, produces a DOM node that is used to represent the 292 character. By default, a red dot (<span style="color: red">•</span>) 293 is shown, with a title tooltip to indicate the character code.</dd> 294 295 <dt id="option_rtlMoveVisually"><code><strong>rtlMoveVisually</strong>: boolean</code></dt> 296 <dd>Determines whether horizontal cursor movement through 297 right-to-left (Arabic, Hebrew) text is visual (pressing the left 298 arrow moves the cursor left) or logical (pressing the left arrow 299 moves to the next lower index in the string, which is visually 300 right in right-to-left text). The default is <code>false</code> 301 on Windows, and <code>true</code> on other platforms.</dd> 302 303 <dt id="option_keyMap"><code><strong>keyMap</strong>: string</code></dt> 304 <dd>Configures the key map to use. The default 305 is <code>"default"</code>, which is the only key map defined 306 in <code>codemirror.js</code> itself. Extra key maps are found in 307 the <a href="../keymap/"><code>key map</code></a> directory. See 308 the <a href="#keymaps">section on key maps</a> for more 309 information.</dd> 310 311 <dt id="option_extraKeys"><code><strong>extraKeys</strong>: object</code></dt> 312 <dd>Can be used to specify extra key bindings for the editor, 313 alongside the ones defined 314 by <a href="#option_keyMap"><code>keyMap</code></a>. Should be 315 either null, or a valid <a href="#keymaps">key map</a> value.</dd> 316 317 <dt id="option_configureMouse"><code><strong>configureMouse</strong>: fn(cm: CodeMirror, repeat: "single" | "double" | "triple", event: Event) → Object</code></dt> 318 <dd>Allows you to configure the behavior of mouse selection and 319 dragging. The function is called when the left mouse button is 320 pressed. The returned object may have the following properties: 321 <dl> 322 <dt><code><strong>unit</strong>: "char" | "word" | "line" | "rectangle" | fn(CodeMirror, Pos) → {from: Pos, to: Pos}</code></dt> 323 <dd>The unit by which to select. May be one of the built-in 324 units, or a function that takes a position and returns a 325 range around that, for a custom unit.</dd> 326 <dt><code><strong>extend</strong>: bool</code></dt> 327 <dd>Whether to extend the existing selection range or start a new one.</dd> 328 <dt><code><strong>addNew</strong>: bool</code></dt> 329 <dd>When enabled, this adds a new range to the existing selection, rather than replacing it.</dd> 330 <dt><code><strong>moveOnDrag</strong>: bool</code></dt> 331 <dd>When the mouse even drags content around inside the 332 editor, this controls whether it is copied (false) or moved 333 (true).</dt> 334 </dl> 335 </dd> 336 337 <dt id="option_lineWrapping"><code><strong>lineWrapping</strong>: boolean</code></dt> 338 <dd>Whether CodeMirror should scroll or wrap for long lines. 339 Defaults to <code>false</code> (scroll).</dd> 340 341 <dt id="option_lineNumbers"><code><strong>lineNumbers</strong>: boolean</code></dt> 342 <dd>Whether to show line numbers to the left of the editor.</dd> 343 344 <dt id="option_firstLineNumber"><code><strong>firstLineNumber</strong>: integer</code></dt> 345 <dd>At which number to start counting lines. Default is 1.</dd> 346 347 <dt id="option_lineNumberFormatter"><code><strong>lineNumberFormatter</strong>: function(line: integer) → string</code></dt> 348 <dd>A function used to format line numbers. The function is 349 passed the line number, and should return a string that will be 350 shown in the gutter.</dd> 351 352 <dt id="option_gutters"><code><strong>gutters</strong>: array&lt;string&gt;</code></dt> 353 <dd>Can be used to add extra gutters (beyond or instead of the 354 line number gutter). Should be an array of CSS class names, each 355 of which defines a <code>width</code> (and optionally a 356 background), and which will be used to draw the background of 357 the gutters. <em>May</em> include 358 the <code>CodeMirror-linenumbers</code> class, in order to 359 explicitly set the position of the line number gutter (it will 360 default to be to the right of all other gutters). These class 361 names are the keys passed 362 to <a href="#setGutterMarker"><code>setGutterMarker</code></a>.</dd> 363 364 <dt id="option_fixedGutter"><code><strong>fixedGutter</strong>: boolean</code></dt> 365 <dd>Determines whether the gutter scrolls along with the content 366 horizontally (false) or whether it stays fixed during horizontal 367 scrolling (true, the default).</dd> 368 369 <dt id="option_scrollbarStyle"><code><strong>scrollbarStyle</strong>: string</code></dt> 370 <dd>Chooses a scrollbar implementation. The default 371 is <code>"native"</code>, showing native scrollbars. The core 372 library also provides the <code>"null"</code> style, which 373 completely hides the 374 scrollbars. <a href="#addon_simplescrollbars">Addons</a> can 375 implement additional scrollbar models.</dd> 376 377 <dt id="option_coverGutterNextToScrollbar"><code><strong>coverGutterNextToScrollbar</strong>: boolean</code></dt> 378 <dd>When <a href="#option_fixedGutter"><code>fixedGutter</code></a> 379 is on, and there is a horizontal scrollbar, by default the 380 gutter will be visible to the left of this scrollbar. If this 381 option is set to true, it will be covered by an element with 382 class <code>CodeMirror-gutter-filler</code>.</dd> 383 384 <dt id="option_inputStyle"><code><strong>inputStyle</strong>: string</code></dt> 385 <dd>Selects the way CodeMirror handles input and focus. The core 386 library defines the <code>"textarea"</code> 387 and <code>"contenteditable"</code> input models. On mobile 388 browsers, the default is <code>"contenteditable"</code>. On 389 desktop browsers, the default is <code>"textarea"</code>. 390 Support for IME and screen readers is better in 391 the <code>"contenteditable"</code> model. The intention is to 392 make it the default on modern desktop browsers in the 393 future.</dd> 394 395 <dt id="option_readOnly"><code><strong>readOnly</strong>: boolean|string</code></dt> 396 <dd>This disables editing of the editor content by the user. If 397 the special value <code>"nocursor"</code> is given (instead of 398 simply <code>true</code>), focusing of the editor is also 399 disallowed.</dd> 400 401 <dt id="option_showCursorWhenSelecting"><code><strong>showCursorWhenSelecting</strong>: boolean</code></dt> 402 <dd>Whether the cursor should be drawn when a selection is 403 active. Defaults to false.</dd> 404 405 <dt id="option_lineWiseCopyCut"><code><strong>lineWiseCopyCut</strong>: boolean</code></dt> 406 <dd>When enabled, which is the default, doing copy or cut when 407 there is no selection will copy or cut the whole lines that have 408 cursors on them.</dd> 409 410 <dt id="option_pasteLinesPerSelection"><code><strong>pasteLinesPerSelection</strong>: boolean</code></dt> 411 <dd>When pasting something from an external source (not from the 412 editor itself), if the number of lines matches the number of 413 selection, CodeMirror will by default insert one line per 414 selection. You can set this to <code>false</code> to disable 415 that behavior.</dd> 416 417 <dt id="option_undoDepth"><code><strong>undoDepth</strong>: integer</code></dt> 418 <dd>The maximum number of undo levels that the editor stores. 419 Note that this includes selection change events. Defaults to 420 200.</dd> 421 422 <dt id="option_historyEventDelay"><code><strong>historyEventDelay</strong>: integer</code></dt> 423 <dd>The period of inactivity (in milliseconds) that will cause a 424 new history event to be started when typing or deleting. 425 Defaults to 1250.</dd> 426 427 <dt id="option_tabindex"><code><strong>tabindex</strong>: integer</code></dt> 428 <dd>The <a href="http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex">tab 429 index</a> to assign to the editor. If not given, no tab index 430 will be assigned.</dd> 431 432 <dt id="option_autofocus"><code><strong>autofocus</strong>: boolean</code></dt> 433 <dd>Can be used to make CodeMirror focus itself on 434 initialization. Defaults to off. 435 When <a href="#fromTextArea"><code>fromTextArea</code></a> is 436 used, and no explicit value is given for this option, it will be 437 set to true when either the source textarea is focused, or it 438 has an <code>autofocus</code> attribute and no other element is 439 focused.</dd> 440 </dl> 441 442 <p>Below this a few more specialized, low-level options are 443 listed. These are only useful in very specific situations, you 444 might want to skip them the first time you read this manual.</p> 445 446 <dl> 447 <dt id="option_dragDrop"><code><strong>dragDrop</strong>: boolean</code></dt> 448 <dd>Controls whether drag-and-drop is enabled. On by default.</dd> 449 450 <dt id="option_allowDropFileTypes"><code><strong>allowDropFileTypes</strong>: array&lt;string&gt;</code></dt> 451 <dd>When set (default is <code>null</code>) only files whose 452 type is in the array can be dropped into the editor. The strings 453 should be MIME types, and will be checked against 454 the <a href="https://w3c.github.io/FileAPI/#dfn-type"><code>type</code></a> 455 of the <code>File</code> object as reported by the browser.</dd> 456 457 <dt id="option_cursorBlinkRate"><code><strong>cursorBlinkRate</strong>: number</code></dt> 458 <dd>Half-period in milliseconds used for cursor blinking. The default blink 459 rate is 530ms. By setting this to zero, blinking can be disabled. A 460 negative value hides the cursor entirely.</dd> 461 462 <dt id="option_cursorScrollMargin"><code><strong>cursorScrollMargin</strong>: number</code></dt> 463 <dd>How much extra space to always keep above and below the 464 cursor when approaching the top or bottom of the visible view in 465 a scrollable document. Default is 0.</dd> 466 467 <dt id="option_cursorHeight"><code><strong>cursorHeight</strong>: number</code></dt> 468 <dd>Determines the height of the cursor. Default is 1, meaning 469 it spans the whole height of the line. For some fonts (and by 470 some tastes) a smaller height (for example <code>0.85</code>), 471 which causes the cursor to not reach all the way to the bottom 472 of the line, looks better</dd> 473 474 <dt id="option_resetSelectionOnContextMenu"><code><strong>resetSelectionOnContextMenu</strong>: boolean</code></dt> 475 <dd>Controls whether, when the context menu is opened with a 476 click outside of the current selection, the cursor is moved to 477 the point of the click. Defaults to <code>true</code>.</dd> 478 479 <dt id="option_workTime"><code id="option_wordkDelay"><strong>workTime</strong>, <strong>workDelay</strong>: number</code></dt> 480 <dd>Highlighting is done by a pseudo background-thread that will 481 work for <code>workTime</code> milliseconds, and then use 482 timeout to sleep for <code>workDelay</code> milliseconds. The 483 defaults are 200 and 300, you can change these options to make 484 the highlighting more or less aggressive.</dd> 485 486 <dt id="option_pollInterval"><code><strong>pollInterval</strong>: number</code></dt> 487 <dd>Indicates how quickly CodeMirror should poll its input 488 textarea for changes (when focused). Most input is captured by 489 events, but some things, like IME input on some browsers, don't 490 generate events that allow CodeMirror to properly detect it. 491 Thus, it polls. Default is 100 milliseconds.</dd> 492 493 <dt id="option_flattenSpans"><code><strong>flattenSpans</strong>: boolean</code></dt> 494 <dd>By default, CodeMirror will combine adjacent tokens into a 495 single span if they have the same class. This will result in a 496 simpler DOM tree, and thus perform better. With some kinds of 497 styling (such as rounded corners), this will change the way the 498 document looks. You can set this option to false to disable this 499 behavior.</dd> 500 501 <dt id="option_addModeClass"><code><strong>addModeClass</strong>: boolean</code></dt> 502 <dd>When enabled (off by default), an extra CSS class will be 503 added to each token, indicating the 504 (<a href="#innerMode">inner</a>) mode that produced it, prefixed 505 with <code>"cm-m-"</code>. For example, tokens from the XML mode 506 will get the <code>cm-m-xml</code> class.</dd> 507 508 <dt id="option_maxHighlightLength"><code><strong>maxHighlightLength</strong>: number</code></dt> 509 <dd>When highlighting long lines, in order to stay responsive, 510 the editor will give up and simply style the rest of the line as 511 plain text when it reaches a certain position. The default is 512 10 000. You can set this to <code>Infinity</code> to turn off 513 this behavior.</dd> 514 515 <dt id="option_viewportMargin"><code><strong>viewportMargin</strong>: integer</code></dt> 516 <dd>Specifies the amount of lines that are rendered above and 517 below the part of the document that's currently scrolled into 518 view. This affects the amount of updates needed when scrolling, 519 and the amount of work that such an update does. You should 520 usually leave it at its default, 10. Can be set 521 to <code>Infinity</code> to make sure the whole document is 522 always rendered, and thus the browser's text search works on it. 523 This <em>will</em> have bad effects on performance of big 524 documents.</dd> 525 </dl> 526 </section> 527 528 <section id=events> 529 <h2>Events</h2> 530 531 <p>Various CodeMirror-related objects emit events, which allow 532 client code to react to various situations. Handlers for such 533 events can be registered with the <a href="#on"><code>on</code></a> 534 and <a href="#off"><code>off</code></a> methods on the objects 535 that the event fires on. To fire your own events, 536 use <code>CodeMirror.signal(target, name, args...)</code>, 537 where <code>target</code> is a non-DOM-node object.</p> 538 539 <p>An editor instance fires the following events. 540 The <code>instance</code> argument always refers to the editor 541 itself.</p> 542 543 <dl> 544 <dt id="event_change"><code><strong>"change"</strong> (instance: CodeMirror, changeObj: object)</code></dt> 545 <dd>Fires every time the content of the editor is changed. 546 The <code>changeObj</code> is a <code>{from, to, text, removed, 547 origin}</code> object containing information about the changes 548 that occurred as second argument. <code>from</code> 549 and <code>to</code> are the positions (in the pre-change 550 coordinate system) where the change started and ended (for 551 example, it might be <code>{ch:0, line:18}</code> if the 552 position is at the beginning of line #19). <code>text</code> is 553 an array of strings representing the text that replaced the 554 changed range (split by line). <code>removed</code> is the text 555 that used to be between <code>from</code> and <code>to</code>, 556 which is overwritten by this change. This event is 557 fired <em>before</em> the end of 558 an <a href="#operation">operation</a>, before the DOM updates 559 happen.</dd> 560 561 <dt id="event_changes"><code><strong>"changes"</strong> (instance: CodeMirror, changes: array&lt;object&gt;)</code></dt> 562 <dd>Like the <a href="#event_change"><code>"change"</code></a> 563 event, but batched per <a href="#operation">operation</a>, 564 passing an array containing all the changes that happened in the 565 operation. This event is fired after the operation finished, and 566 display changes it makes will trigger a new operation.</dd> 567 568 <dt id="event_beforeChange"><code><strong>"beforeChange"</strong> (instance: CodeMirror, changeObj: object)</code></dt> 569 <dd>This event is fired before a change is applied, and its 570 handler may choose to modify or cancel the change. 571 The <code>changeObj</code> object 572 has <code>from</code>, <code>to</code>, and <code>text</code> 573 properties, as with 574 the <a href="#event_change"><code>"change"</code></a> event. It 575 also has a <code>cancel()</code> method, which can be called to 576 cancel the change, and, <strong>if</strong> the change isn't 577 coming from an undo or redo event, an <code>update(from, to, 578 text)</code> method, which may be used to modify the change. 579 Undo or redo changes can't be modified, because they hold some 580 metainformation for restoring old marked ranges that is only 581 valid for that specific change. All three arguments 582 to <code>update</code> are optional, and can be left off to 583 leave the existing value for that field 584 intact. <strong>Note:</strong> you may not do anything from 585 a <code>"beforeChange"</code> handler that would cause changes 586 to the document or its visualization. Doing so will, since this 587 handler is called directly from the bowels of the CodeMirror 588 implementation, probably cause the editor to become 589 corrupted.</dd> 590 591 <dt id="event_cursorActivity"><code><strong>"cursorActivity"</strong> (instance: CodeMirror)</code></dt> 592 <dd>Will be fired when the cursor or selection moves, or any 593 change is made to the editor content.</dd> 594 595 <dt id="event_keyHandled"><code><strong>"keyHandled"</strong> (instance: CodeMirror, name: string, event: Event)</code></dt> 596 <dd>Fired after a key is handled through a 597 key map. <code>name</code> is the name of the handled key (for 598 example <code>"Ctrl-X"</code> or <code>"'q'"</code>), 599 and <code>event</code> is the DOM <code>keydown</code> 600 or <code>keypress</code> event.</dd> 601 602 <dt id="event_inputRead"><code><strong>"inputRead"</strong> (instance: CodeMirror, changeObj: object)</code></dt> 603 <dd>Fired whenever new input is read from the hidden textarea 604 (typed or pasted by the user).</dd> 605 606 <dt id="event_electricInput"><code><strong>"electricInput"</strong> (instance: CodeMirror, line: integer)</code></dt> 607 <dd>Fired if text input matched the 608 mode's <a href="#option_electricChars">electric</a> patterns, 609 and this caused the line's indentation to change.</dd> 610 611 <dt id="event_beforeSelectionChange"><code><strong>"beforeSelectionChange"</strong> (instance: CodeMirror, obj: {ranges, origin, update})</code></dt> 612 <dd>This event is fired before the selection is moved. Its 613 handler may inspect the set of selection ranges, present as an 614 array of <code>{anchor, head}</code> objects in 615 the <code>ranges</code> property of the <code>obj</code> 616 argument, and optionally change them by calling 617 the <code>update</code> method on this object, passing an array 618 of ranges in the same format. The object also contains 619 an <code>origin</code> property holding the origin string passed 620 to the selection-changing method, if any. Handlers for this 621 event have the same restriction 622 as <a href="#event_beforeChange"><code>"beforeChange"</code></a> 623 handlers — they should not do anything to directly update the 624 state of the editor.</dd> 625 626 <dt id="event_viewportChange"><code><strong>"viewportChange"</strong> (instance: CodeMirror, from: number, to: number)</code></dt> 627 <dd>Fires whenever the <a href="#getViewport">view port</a> of 628 the editor changes (due to scrolling, editing, or any other 629 factor). The <code>from</code> and <code>to</code> arguments 630 give the new start and end of the viewport.</dd> 631 632 <dt id="event_swapDoc"><code><strong>"swapDoc"</strong> (instance: CodeMirror, oldDoc: Doc)</code></dt> 633 <dd>This is signalled when the editor's document is replaced 634 using the <a href="#swapDoc"><code>swapDoc</code></a> 635 method.</dd> 636 637 <dt id="event_gutterClick"><code><strong>"gutterClick"</strong> (instance: CodeMirror, line: integer, gutter: string, clickEvent: Event)</code></dt> 638 <dd>Fires when the editor gutter (the line-number area) is 639 clicked. Will pass the editor instance as first argument, the 640 (zero-based) number of the line that was clicked as second 641 argument, the CSS class of the gutter that was clicked as third 642 argument, and the raw <code>mousedown</code> event object as 643 fourth argument.</dd> 644 645 <dt id="event_gutterContextMenu"><code><strong>"gutterContextMenu"</strong> (instance: CodeMirror, line: integer, gutter: string, contextMenu: Event: Event)</code></dt> 646 <dd>Fires when the editor gutter (the line-number area) 647 receives a <code>contextmenu</code> event. Will pass the editor 648 instance as first argument, the (zero-based) number of the line 649 that was clicked as second argument, the CSS class of the 650 gutter that was clicked as third argument, and the raw 651 <code>contextmenu</code> mouse event object as fourth argument. 652 You can <code>preventDefault</code> the event, to signal that 653 CodeMirror should do no further handling.</dd> 654 655 <dt id="event_focus"><code><strong>"focus"</strong> (instance: CodeMirror, event: Event)</code></dt> 656 <dd>Fires whenever the editor is focused.</dd> 657 658 <dt id="event_blur"><code><strong>"blur"</strong> (instance: CodeMirror, event: Event)</code></dt> 659 <dd>Fires whenever the editor is unfocused.</dd> 660 661 <dt id="event_scroll"><code><strong>"scroll"</strong> (instance: CodeMirror)</code></dt> 662 <dd>Fires when the editor is scrolled.</dd> 663 664 <dt id="event_refresh"><code><strong>"refresh"</strong> (instance: CodeMirror)</code></dt> 665 <dd>Fires when the editor is <a href="#refresh">refreshed</a> 666 or <a href="#setSize">resized</a>. Mostly useful to invalidate 667 cached values that depend on the editor or character size.</dd> 668 669 <dt id="event_optionChange"><code><strong>"optionChange"</strong> (instance: CodeMirror, option: string)</code></dt> 670 <dd>Dispatched every time an option is changed with <a href="#setOption"><code>setOption</code></a>.</dd> 671 672 <dt id="event_scrollCursorIntoView"><code><strong>"scrollCursorIntoView"</strong> (instance: CodeMirror, event: Event)</code></dt> 673 <dd>Fires when the editor tries to scroll its cursor into view. 674 Can be hooked into to take care of additional scrollable 675 containers around the editor. When the event object has 676 its <code>preventDefault</code> method called, CodeMirror will 677 not itself try to scroll the window.</dd> 678 679 <dt id="event_update"><code><strong>"update"</strong> (instance: CodeMirror)</code></dt> 680 <dd>Will be fired whenever CodeMirror updates its DOM display.</dd> 681 682 <dt id="event_renderLine"><code><strong>"renderLine"</strong> (instance: CodeMirror, line: LineHandle, element: Element)</code></dt> 683 <dd>Fired whenever a line is (re-)rendered to the DOM. Fired 684 right after the DOM element is built, <em>before</em> it is 685 added to the document. The handler may mess with the style of 686 the resulting element, or add event handlers, but 687 should <em>not</em> try to change the state of the editor.</dd> 688 689 <dt id="event_dom"><code><strong>"mousedown"</strong>, 690 <strong>"dblclick"</strong>, <strong>"touchstart"</strong>, <strong>"contextmenu"</strong>, 691 <strong>"keydown"</strong>, <strong>"keypress"</strong>, 692 <strong>"keyup"</strong>, <strong>"cut"</strong>, <strong>"copy"</strong>, <strong>"paste"</strong>, 693 <strong>"dragstart"</strong>, <strong>"dragenter"</strong>, 694 <strong>"dragover"</strong>, <strong>"dragleave"</strong>, 695 <strong>"drop"</strong> 696 (instance: CodeMirror, event: Event)</code></dt> 697 <dd>Fired when CodeMirror is handling a DOM event of this type. 698 You can <code>preventDefault</code> the event, or give it a 699 truthy <code>codemirrorIgnore</code> property, to signal that 700 CodeMirror should do no further handling.</dd> 701 </dl> 702 703 <p>Document objects (instances 704 of <a href="#Doc"><code>CodeMirror.Doc</code></a>) emit the 705 following events:</p> 706 707 <dl> 708 <dt id="event_doc_change"><code><strong>"change"</strong> (doc: CodeMirror.Doc, changeObj: object)</code></dt> 709 <dd>Fired whenever a change occurs to the 710 document. <code>changeObj</code> has a similar type as the 711 object passed to the 712 editor's <a href="#event_change"><code>"change"</code></a> 713 event.</dd> 714 715 <dt id="event_doc_beforeChange"><code><strong>"beforeChange"</strong> (doc: CodeMirror.Doc, change: object)</code></dt> 716 <dd>See the <a href="#event_beforeChange">description of the 717 same event</a> on editor instances.</dd> 718 719 <dt id="event_doc_cursorActivity"><code><strong>"cursorActivity"</strong> (doc: CodeMirror.Doc)</code></dt> 720 <dd>Fired whenever the cursor or selection in this document 721 changes.</dd> 722 723 <dt id="event_doc_beforeSelectionChange"><code><strong>"beforeSelectionChange"</strong> (doc: CodeMirror.Doc, selection: {head, anchor})</code></dt> 724 <dd>Equivalent to 725 the <a href="#event_beforeSelectionChange">event by the same 726 name</a> as fired on editor instances.</dd> 727 </dl> 728 729 <p>Line handles (as returned by, for 730 example, <a href="#getLineHandle"><code>getLineHandle</code></a>) 731 support these events:</p> 732 733 <dl> 734 <dt id="event_delete"><code><strong>"delete"</strong> ()</code></dt> 735 <dd>Will be fired when the line object is deleted. A line object 736 is associated with the <em>start</em> of the line. Mostly useful 737 when you need to find out when your <a href="#setGutterMarker">gutter 738 markers</a> on a given line are removed.</dd> 739 <dt id="event_line_change"><code><strong>"change"</strong> (line: LineHandle, changeObj: object)</code></dt> 740 <dd>Fires when the line's text content is changed in any way 741 (but the line is not deleted outright). The <code>change</code> 742 object is similar to the one passed 743 to <a href="#event_change">change event</a> on the editor 744 object.</dd> 745 </dl> 746 747 <p>Marked range handles (<code>CodeMirror.TextMarker</code>), as returned 748 by <a href="#markText"><code>markText</code></a> 749 and <a href="#setBookmark"><code>setBookmark</code></a>, emit the 750 following events:</p> 751 752 <dl> 753 <dt id="event_beforeCursorEnter"><code><strong>"beforeCursorEnter"</strong> ()</code></dt> 754 <dd>Fired when the cursor enters the marked range. From this 755 event handler, the editor state may be inspected 756 but <em>not</em> modified, with the exception that the range on 757 which the event fires may be cleared.</dd> 758 <dt id="event_clear"><code><strong>"clear"</strong> (from: {line, ch}, to: {line, ch})</code></dt> 759 <dd>Fired when the range is cleared, either through cursor 760 movement in combination 761 with <a href="#mark_clearOnEnter"><code>clearOnEnter</code></a> 762 or through a call to its <code>clear()</code> method. Will only 763 be fired once per handle. Note that deleting the range through 764 text editing does not fire this event, because an undo action 765 might bring the range back into existence. <code>from</code> 766 and <code>to</code> give the part of the document that the range 767 spanned when it was cleared.</dd> 768 <dt id="event_hide"><code><strong>"hide"</strong> ()</code></dt> 769 <dd>Fired when the last part of the marker is removed from the 770 document by editing operations.</dd> 771 <dt id="event_unhide"><code><strong>"unhide"</strong> ()</code></dt> 772 <dd>Fired when, after the marker was removed by editing, a undo 773 operation brought the marker back.</dd> 774 </dl> 775 776 <p>Line widgets (<code>CodeMirror.LineWidget</code>), returned 777 by <a href="#addLineWidget"><code>addLineWidget</code></a>, fire 778 these events:</p> 779 780 <dl> 781 <dt id="event_redraw"><code><strong>"redraw"</strong> ()</code></dt> 782 <dd>Fired whenever the editor re-adds the widget to the DOM. 783 This will happen once right after the widget is added (if it is 784 scrolled into view), and then again whenever it is scrolled out 785 of view and back in again, or when changes to the editor options 786 or the line the widget is on require the widget to be 787 redrawn.</dd> 788 </dl> 789 </section> 790 791 <section id=keymaps> 792 <h2>Key Maps</h2> 793 794 <p>Key maps are ways to associate keys and mouse buttons with 795 functionality. A key map is an object mapping strings that 796 identify the buttons to functions that implement their 797 functionality.</p> 798 799 <p>The CodeMirror distributions comes 800 with <a href="../demo/emacs.html">Emacs</a>, <a href="../demo/vim.html">Vim</a>, 801 and <a href="../demo/sublime.html">Sublime Text</a>-style keymaps.</p> 802 803 <p>Keys are identified either by name or by character. 804 The <code>CodeMirror.keyNames</code> object defines names for 805 common keys and associates them with their key codes. Examples of 806 names defined here are <code>Enter</code>, <code>F5</code>, 807 and <code>Q</code>. These can be prefixed 808 with <code>Shift-</code>, <code>Cmd-</code>, <code>Ctrl-</code>, 809 and <code>Alt-</code> to specify a modifier. So for 810 example, <code>Shift-Ctrl-Space</code> would be a valid key 811 identifier.</p> 812 813 <p>Common example: map the Tab key to insert spaces instead of a tab 814 character.</p> 815 816 <pre data-lang="javascript"> 817 editor.setOption("extraKeys", { 818 Tab: function(cm) { 819 var spaces = Array(cm.getOption("indentUnit") + 1).join(" "); 820 cm.replaceSelection(spaces); 821 } 822 });</pre> 823 824 <p>Alternatively, a character can be specified directly by 825 surrounding it in single quotes, for example <code>'$'</code> 826 or <code>'q'</code>. Due to limitations in the way browsers fire 827 key events, these may not be prefixed with modifiers.</p> 828 829 <p>To bind mouse buttons, use the names `LeftClick`, 830 `MiddleClick`, and `RightClick`. These can also be prefixed with 831 modifiers, and in addition, the word `Double` or `Triple` can be 832 put before `Click` (as in `LeftDoubleClick`) to bind a double- or 833 triple-click. The function for such a binding is passed the 834 position that was clicked as second argument.</p> 835 836 <p id="normalizeKeyMap">Multi-stroke key bindings can be specified 837 by separating the key names by spaces in the property name, for 838 example <code>Ctrl-X Ctrl-V</code>. When a map contains 839 multi-stoke bindings or keys with modifiers that are not specified 840 in the default order (<code>Shift-Cmd-Ctrl-Alt</code>), you must 841 call <code>CodeMirror.normalizeKeyMap</code> on it before it can 842 be used. This function takes a keymap and modifies it to normalize 843 modifier order and properly recognize multi-stroke bindings. It 844 will return the keymap itself.</p> 845 846 <p>The <code>CodeMirror.keyMap</code> object associates key maps 847 with names. User code and key map definitions can assign extra 848 properties to this object. Anywhere where a key map is expected, a 849 string can be given, which will be looked up in this object. It 850 also contains the <code>"default"</code> key map holding the 851 default bindings.</p> 852 853 <p>The values of properties in key maps can be either functions of 854 a single argument (the CodeMirror instance), strings, or 855 <code>false</code>. Strings refer 856 to <a href="#commands">commands</a>, which are described below. If 857 the property is set to <code>false</code>, CodeMirror leaves 858 handling of the key up to the browser. A key handler function may 859 return <code>CodeMirror.Pass</code> to indicate that it has 860 decided not to handle the key, and other handlers (or the default 861 behavior) should be given a turn.</p> 862 863 <p>Keys mapped to command names that start with the 864 characters <code>"go"</code> or to functions that have a 865 truthy <code>motion</code> property (which should be used for 866 cursor-movement actions) will be fired even when an 867 extra <code>Shift</code> modifier is present (i.e. <code>"Up": 868 "goLineUp"</code> matches both up and shift-up). This is used to 869 easily implement shift-selection.</p> 870 871 <p>Key maps can defer to each other by defining 872 a <code>fallthrough</code> property. This indicates that when a 873 key is not found in the map itself, one or more other maps should 874 be searched. It can hold either a single key map or an array of 875 key maps.</p> 876 877 <p>When a key map needs to set something up when it becomes 878 active, or tear something down when deactivated, it can 879 contain <code>attach</code> and/or <code>detach</code> properties, 880 which should hold functions that take the editor instance and the 881 next or previous keymap. Note that this only works for the 882 <a href="#option_keyMap">top-level keymap</a>, not for fallthrough 883 maps or maps added 884 with <a href="#option_extraKeys"><code>extraKeys</code></a> 885 or <a href="#addKeyMap"><code>addKeyMap</code></a>.</p> 886 </section> 887 888 <section id=commands> 889 <h2>Commands</h2> 890 891 <p>Commands are parameter-less actions that can be performed on an 892 editor. Their main use is for key bindings. Commands are defined by 893 adding properties to the <code>CodeMirror.commands</code> object. 894 A number of common commands are defined by the library itself, 895 most of them used by the default key bindings. The value of a 896 command property must be a function of one argument (an editor 897 instance).</p> 898 899 <p>Some of the commands below are referenced in the default 900 key map, but not defined by the core library. These are intended to 901 be defined by user code or addons.</p> 902 903 <p>Commands can also be run with 904 the <a href="#execCommand"><code>execCommand</code></a> 905 method.</p> 906 907 <dl> 908 <dt class=command id=command_selectAll><code><strong>selectAll</strong></code><span class=keybinding>Ctrl-A (PC), Cmd-A (Mac)</span></dt> 909 <dd>Select the whole content of the editor.</dd> 910 911 <dt class=command id=command_singleSelection><code><strong>singleSelection</strong></code><span class=keybinding>Esc</span></dt> 912 <dd>When multiple selections are present, this deselects all but 913 the primary selection.</dd> 914 915 <dt class=command id=command_killLine><code><strong>killLine</strong></code><span class=keybinding>Ctrl-K (Mac)</span></dt> 916 <dd>Emacs-style line killing. Deletes the part of the line after 917 the cursor. If that consists only of whitespace, the newline at 918 the end of the line is also deleted.</dd> 919 920 <dt class=command id=command_deleteLine><code><strong>deleteLine</strong></code><span class=keybinding>Ctrl-D (PC), Cmd-D (Mac)</span></dt> 921 <dd>Deletes the whole line under the cursor, including newline at the end.</dd> 922 923 <dt class=command id=command_delLineLeft><code><strong>delLineLeft</strong></code></dt> 924 <dd>Delete the part of the line before the cursor.</dd> 925 926 <dt class=command id=command_delWrappedLineLeft><code><strong>delWrappedLineLeft</strong></code><span class=keybinding>Cmd-Backspace (Mac)</span></dt> 927 <dd>Delete the part of the line from the left side of the visual line the cursor is on to the cursor.</dd> 928 929 <dt class=command id=command_delWrappedLineRight><code><strong>delWrappedLineRight</strong></code><span class=keybinding>Cmd-Delete (Mac)</span></dt> 930 <dd>Delete the part of the line from the cursor to the right side of the visual line the cursor is on.</dd> 931 932 <dt class=command id=command_undo><code><strong>undo</strong></code><span class=keybinding>Ctrl-Z (PC), Cmd-Z (Mac)</span></dt> 933 <dd>Undo the last change. Note that, because browsers still 934 don't make it possible for scripts to react to or customize the 935 context menu, selecting undo (or redo) from the context menu in 936 a CodeMirror instance does not work.</dd> 937 938 <dt class=command id=command_redo><code><strong>redo</strong></code><span class=keybinding>Ctrl-Y (PC), Shift-Cmd-Z (Mac), Cmd-Y (Mac)</span></dt> 939 <dd>Redo the last undone change.</dd> 940 941 <dt class=command id=command_undoSelection><code><strong>undoSelection</strong></code><span class=keybinding>Ctrl-U (PC), Cmd-U (Mac)</span></dt> 942 <dd>Undo the last change to the selection, or if there are no 943 selection-only changes at the top of the history, undo the last 944 change.</dd> 945 946 <dt class=command id=command_redoSelection><code><strong>redoSelection</strong></code><span class=keybinding>Alt-U (PC), Shift-Cmd-U (Mac)</span></dt> 947 <dd>Redo the last change to the selection, or the last text change if 948 no selection changes remain.</dd> 949 950 <dt class=command id=command_goDocStart><code><strong>goDocStart</strong></code><span class=keybinding>Ctrl-Home (PC), Cmd-Up (Mac), Cmd-Home (Mac)</span></dt> 951 <dd>Move the cursor to the start of the document.</dd> 952 953 <dt class=command id=command_goDocEnd><code><strong>goDocEnd</strong></code><span class=keybinding>Ctrl-End (PC), Cmd-End (Mac), Cmd-Down (Mac)</span></dt> 954 <dd>Move the cursor to the end of the document.</dd> 955 956 <dt class=command id=command_goLineStart><code><strong>goLineStart</strong></code><span class=keybinding>Alt-Left (PC), Ctrl-A (Mac)</span></dt> 957 <dd>Move the cursor to the start of the line.</dd> 958 959 <dt class=command id=command_goLineStartSmart><code><strong>goLineStartSmart</strong></code><span class=keybinding>Home</span></dt> 960 <dd>Move to the start of the text on the line, or if we are 961 already there, to the actual start of the line (including 962 whitespace).</dd> 963 964 <dt class=command id=command_goLineEnd><code><strong>goLineEnd</strong></code><span class=keybinding>Alt-Right (PC), Ctrl-E (Mac)</span></dt> 965 <dd>Move the cursor to the end of the line.</dd> 966 967 <dt class=command id=command_goLineRight><code><strong>goLineRight</strong></code><span class=keybinding>Cmd-Right (Mac)</span></dt> 968 <dd>Move the cursor to the right side of the visual line it is on.</dd> 969 970 <dt class=command id=command_goLineLeft><code><strong>goLineLeft</strong></code><span class=keybinding>Cmd-Left (Mac)</span></dt> 971 <dd>Move the cursor to the left side of the visual line it is on. If 972 this line is wrapped, that may not be the start of the line.</dd> 973 974 <dt class=command id=command_goLineLeftSmart><code><strong>goLineLeftSmart</strong></code></dt> 975 <dd>Move the cursor to the left side of the visual line it is 976 on. If that takes it to the start of the line, behave 977 like <a href="#command_goLineStartSmart"><code>goLineStartSmart</code></a>.</dd> 978 979 <dt class=command id=command_goLineUp><code><strong>goLineUp</strong></code><span class=keybinding>Up, Ctrl-P (Mac)</span></dt> 980 <dd>Move the cursor up one line.</dd> 981 982 <dt class=command id=command_goLineDown><code><strong>goLineDown</strong></code><span class=keybinding>Down, Ctrl-N (Mac)</span></dt> 983 <dd>Move down one line.</dd> 984 985 <dt class=command id=command_goPageUp><code><strong>goPageUp</strong></code><span class=keybinding>PageUp, Shift-Ctrl-V (Mac)</span></dt> 986 <dd>Move the cursor up one screen, and scroll up by the same distance.</dd> 987 988 <dt class=command id=command_goPageDown><code><strong>goPageDown</strong></code><span class=keybinding>PageDown, Ctrl-V (Mac)</span></dt> 989 <dd>Move the cursor down one screen, and scroll down by the same distance.</dd> 990 991 <dt class=command id=command_goCharLeft><code><strong>goCharLeft</strong></code><span class=keybinding>Left, Ctrl-B (Mac)</span></dt> 992 <dd>Move the cursor one character left, going to the previous line 993 when hitting the start of line.</dd> 994 995 <dt class=command id=command_goCharRight><code><strong>goCharRight</strong></code><span class=keybinding>Right, Ctrl-F (Mac)</span></dt> 996 <dd>Move the cursor one character right, going to the next line 997 when hitting the end of line.</dd> 998 999 <dt class=command id=command_goColumnLeft><code><strong>goColumnLeft</strong></code></dt> 1000 <dd>Move the cursor one character left, but don't cross line boundaries.</dd> 1001 1002 <dt class=command id=command_goColumnRight><code><strong>goColumnRight</strong></code></dt> 1003 <dd>Move the cursor one character right, don't cross line boundaries.</dd> 1004 1005 <dt class=command id=command_goWordLeft><code><strong>goWordLeft</strong></code><span class=keybinding>Alt-B (Mac)</span></dt> 1006 <dd>Move the cursor to the start of the previous word.</dd> 1007 1008 <dt class=command id=command_goWordRight><code><strong>goWordRight</strong></code><span class=keybinding>Alt-F (Mac)</span></dt> 1009 <dd>Move the cursor to the end of the next word.</dd> 1010 1011 <dt class=command id=command_goGroupLeft><code><strong>goGroupLeft</strong></code><span class=keybinding>Ctrl-Left (PC), Alt-Left (Mac)</span></dt> 1012 <dd>Move to the left of the group before the cursor. A group is 1013 a stretch of word characters, a stretch of punctuation 1014 characters, a newline, or a stretch of <em>more than one</em> 1015 whitespace character.</dd> 1016 1017 <dt class=command id=command_goGroupRight><code><strong>goGroupRight</strong></code><span class=keybinding>Ctrl-Right (PC), Alt-Right (Mac)</span></dt> 1018 <dd>Move to the right of the group after the cursor 1019 (see <a href="#command_goGroupLeft">above</a>).</dd> 1020 1021 <dt class=command id=command_delCharBefore><code><strong>delCharBefore</strong></code><span class=keybinding>Shift-Backspace, Ctrl-H (Mac)</span></dt> 1022 <dd>Delete the character before the cursor.</dd> 1023 1024 <dt class=command id=command_delCharAfter><code><strong>delCharAfter</strong></code><span class=keybinding>Delete, Ctrl-D (Mac)</span></dt> 1025 <dd>Delete the character after the cursor.</dd> 1026 1027 <dt class=command id=command_delWordBefore><code><strong>delWordBefore</strong></code><span class=keybinding>Alt-Backspace (Mac)</span></dt> 1028 <dd>Delete up to the start of the word before the cursor.</dd> 1029 1030 <dt class=command id=command_delWordAfter><code><strong>delWordAfter</strong></code><span class=keybinding>Alt-D (Mac)</span></dt> 1031 <dd>Delete up to the end of the word after the cursor.</dd> 1032 1033 <dt class=command id=command_delGroupBefore><code><strong>delGroupBefore</strong></code><span class=keybinding>Ctrl-Backspace (PC), Alt-Backspace (Mac)</span></dt> 1034 <dd>Delete to the left of the <a href="#command_goGroupLeft">group</a> before the cursor.</dd> 1035 1036 <dt class=command id=command_delGroupAfter><code><strong>delGroupAfter</strong></code><span class=keybinding>Ctrl-Delete (PC), Ctrl-Alt-Backspace (Mac), Alt-Delete (Mac)</span></dt> 1037 <dd>Delete to the start of the <a href="#command_goGroupLeft">group</a> after the cursor.</dd> 1038 1039 <dt class=command id=command_indentAuto><code><strong>indentAuto</strong></code><span class=keybinding>Shift-Tab</span></dt> 1040 <dd>Auto-indent the current line or selection.</dd> 1041 1042 <dt class=command id=command_indentMore><code><strong>indentMore</strong></code><span class=keybinding>Ctrl-] (PC), Cmd-] (Mac)</span></dt> 1043 <dd>Indent the current line or selection by one <a href="#option_indentUnit">indent unit</a>.</dd> 1044 1045 <dt class=command id=command_indentLess><code><strong>indentLess</strong></code><span class=keybinding>Ctrl-[ (PC), Cmd-[ (Mac)</span></dt> 1046 <dd>Dedent the current line or selection by one <a href="#option_indentUnit">indent unit</a>.</dd> 1047 1048 <dt class=command id=command_insertTab><code><strong>insertTab</strong></code></dt> 1049 <dd>Insert a tab character at the cursor.</dd> 1050 1051 <dt class=command id=command_insertSoftTab><code><strong>insertSoftTab</strong></code></dt> 1052 <dd>Insert the amount of spaces that match the width a tab at 1053 the cursor position would have.</dd> 1054 1055 <dt class=command id=command_defaultTab><code><strong>defaultTab</strong></code><span class=keybinding>Tab</span></dt> 1056 <dd>If something is selected, indent it by 1057 one <a href="#option_indentUnit">indent unit</a>. If nothing is 1058 selected, insert a tab character.</dd> 1059 1060 <dt class=command id=command_transposeChars><code><strong>transposeChars</strong></code><span class=keybinding>Ctrl-T (Mac)</span></dt> 1061 <dd>Swap the characters before and after the cursor.</dd> 1062 1063 <dt class=command id=command_newlineAndIndent><code><strong>newlineAndIndent</strong></code><span class=keybinding>Enter</span></dt> 1064 <dd>Insert a newline and auto-indent the new line.</dd> 1065 1066 <dt class=command id=command_toggleOverwrite><code><strong>toggleOverwrite</strong></code><span class=keybinding>Insert</span></dt> 1067 <dd>Flip the <a href="#toggleOverwrite">overwrite</a> flag.</dd> 1068 1069 <dt class=command id=command_save><code><strong>save</strong></code><span class=keybinding>Ctrl-S (PC), Cmd-S (Mac)</span></dt> 1070 <dd>Not defined by the core library, only referred to in 1071 key maps. Intended to provide an easy way for user code to define 1072 a save command.</dd> 1073 1074 <dt class=command id=command_find><code><strong>find</strong></code><span class=keybinding>Ctrl-F (PC), Cmd-F (Mac)</span></dt> 1075 <dt class=command id=command_findNext><code><strong>findNext</strong></code><span class=keybinding>Ctrl-G (PC), Cmd-G (Mac)</span></dt> 1076 <dt class=command id=command_findPrev><code><strong>findPrev</strong></code><span class=keybinding>Shift-Ctrl-G (PC), Shift-Cmd-G (Mac)</span></dt> 1077 <dt class=command id=command_replace><code><strong>replace</strong></code><span class=keybinding>Shift-Ctrl-F (PC), Cmd-Alt-F (Mac)</span></dt> 1078 <dt class=command id=command_replaceAll><code><strong>replaceAll</strong></code><span class=keybinding>Shift-Ctrl-R (PC), Shift-Cmd-Alt-F (Mac)</span></dt> 1079 <dd>Not defined by the core library, but defined in 1080 the <a href="#addon_search">search addon</a> (or custom client 1081 addons).</dd> 1082 1083 </dl> 1084 1085 </section> 1086 1087 <section id=styling> 1088 <h2>Customized Styling</h2> 1089 1090 <p>Up to a certain extent, CodeMirror's look can be changed by 1091 modifying style sheet files. The style sheets supplied by modes 1092 simply provide the colors for that mode, and can be adapted in a 1093 very straightforward way. To style the editor itself, it is 1094 possible to alter or override the styles defined 1095 in <a href="../lib/codemirror.css"><code>codemirror.css</code></a>.</p> 1096 1097 <p>Some care must be taken there, since a lot of the rules in this 1098 file are necessary to have CodeMirror function properly. Adjusting 1099 colors should be safe, of course, and with some care a lot of 1100 other things can be changed as well. The CSS classes defined in 1101 this file serve the following roles:</p> 1102 1103 <dl> 1104 <dt id="class_CodeMirror"><code><strong>CodeMirror</strong></code></dt> 1105 <dd>The outer element of the editor. This should be used for the 1106 editor width, height, borders and positioning. Can also be used 1107 to set styles that should hold for everything inside the editor 1108 (such as font and font size), or to set a background. Setting 1109 this class' <code>height</code> style to <code>auto</code> will 1110 make the editor <a href="../demo/resize.html">resize to fit its 1111 content</a> (it is recommended to also set 1112 the <a href="#option_viewportMargin"><code>viewportMargin</code> 1113 option</a> to <code>Infinity</code> when doing this.</dd> 1114 1115 <dt id="class_CodeMirror_focused"><code><strong>CodeMirror-focused</strong></code></dt> 1116 <dd>Whenever the editor is focused, the top element gets this 1117 class. This is used to hide the cursor and give the selection a 1118 different color when the editor is not focused.</dd> 1119 1120 <dt id="class_CodeMirror_gutters"><code><strong>CodeMirror-gutters</strong></code></dt> 1121 <dd>This is the backdrop for all gutters. Use it to set the 1122 default gutter background color, and optionally add a border on 1123 the right of the gutters.</dd> 1124 1125 <dt id="class_CodeMirror_linenumbers"><code><strong>CodeMirror-linenumbers</strong></code></dt> 1126 <dd>Use this for giving a background or width to the line number 1127 gutter.</dd> 1128 1129 <dt id="class_CodeMirror_linenumber"><code><strong>CodeMirror-linenumber</strong></code></dt> 1130 <dd>Used to style the actual individual line numbers. These 1131 won't be children of the <code>CodeMirror-linenumbers</code> 1132 (plural) element, but rather will be absolutely positioned to 1133 overlay it. Use this to set alignment and text properties for 1134 the line numbers.</dd> 1135 1136 <dt id="class_CodeMirror_lines"><code><strong>CodeMirror-lines</strong></code></dt> 1137 <dd>The visible lines. This is where you specify vertical 1138 padding for the editor content.</dd> 1139 1140 <dt id="class_CodeMirror_cursor"><code><strong>CodeMirror-cursor</strong></code></dt> 1141 <dd>The cursor is a block element that is absolutely positioned. 1142 You can make it look whichever way you want.</dd> 1143 1144 <dt id="class_CodeMirror_selected"><code><strong>CodeMirror-selected</strong></code></dt> 1145 <dd>The selection is represented by <code>span</code> elements 1146 with this class.</dd> 1147 1148 <dt id="class_CodeMirror_matchingbracket"><code><strong>CodeMirror-matchingbracket</strong></code>, 1149 <code><strong>CodeMirror-nonmatchingbracket</strong></code></dt> 1150 <dd>These are used to style matched (or unmatched) brackets.</dd> 1151 </dl> 1152 1153 <p>If your page's style sheets do funky things to 1154 all <code>div</code> or <code>pre</code> elements (you probably 1155 shouldn't do that), you'll have to define rules to cancel these 1156 effects out again for elements under the <code>CodeMirror</code> 1157 class.</p> 1158 1159 <p>Themes are also simply CSS files, which define colors for 1160 various syntactic elements. See the files in 1161 the <a href="../theme/"><code>theme</code></a> directory.</p> 1162 </section> 1163 1164 <section id=api> 1165 <h2>Programming API</h2> 1166 1167 <p>A lot of CodeMirror features are only available through its 1168 API. Thus, you need to write code (or 1169 use <a href="#addons">addons</a>) if you want to expose them to 1170 your users.</p> 1171 1172 <p>Whenever points in the document are represented, the API uses 1173 objects with <code>line</code> and <code>ch</code> properties. 1174 Both are zero-based. CodeMirror makes sure to 'clip' any positions 1175 passed by client code so that they fit inside the document, so you 1176 shouldn't worry too much about sanitizing your coordinates. If you 1177 give <code>ch</code> a value of <code>null</code>, or don't 1178 specify it, it will be replaced with the length of the specified 1179 line. Such positions may also have a <code>sticky</code> property 1180 holding <code>"before"</code> or <code>"after"</code>, whether the 1181 position is associated with the character before or after it. This 1182 influences, for example, where the cursor is drawn on a 1183 line-break or bidi-direction boundary.</p> 1184 1185 <p>Methods prefixed with <code>doc.</code> can, unless otherwise 1186 specified, be called both on <code>CodeMirror</code> (editor) 1187 instances and <code>CodeMirror.Doc</code> instances. Methods 1188 prefixed with <code>cm.</code> are <em>only</em> available 1189 on <code>CodeMirror</code> instances.</p> 1190 1191 <h3 id="api_constructor">Constructor</h3> 1192 1193 <p id="CodeMirror">Constructing an editor instance is done with 1194 the <code><strong>CodeMirror</strong>(place: Element|fn(Element), 1195 ?option: object)</code> constructor. If the <code>place</code> 1196 argument is a DOM element, the editor will be appended to it. If 1197 it is a function, it will be called, and is expected to place the 1198 editor into the document. <code>options</code> may be an element 1199 mapping <a href="#config">option names</a> to values. The options 1200 that it doesn't explicitly specify (or all options, if it is not 1201 passed) will be taken 1202 from <a href="#defaults"><code>CodeMirror.defaults</code></a>.</p> 1203 1204 <p>Note that the options object passed to the constructor will be 1205 mutated when the instance's options 1206 are <a href="#setOption">changed</a>, so you shouldn't share such 1207 objects between instances.</p> 1208 1209 <p>See <a href="#fromTextArea"><code>CodeMirror.fromTextArea</code></a> 1210 for another way to construct an editor instance.</p> 1211 1212 <h3 id="api_content">Content manipulation methods</h3> 1213 1214 <dl> 1215 <dt id="getValue"><code><strong>doc.getValue</strong>(?separator: string) → string</code></dt> 1216 <dd>Get the current editor content. You can pass it an optional 1217 argument to specify the string to be used to separate lines 1218 (defaults to <code>"\n"</code>).</dd> 1219 <dt id="setValue"><code><strong>doc.setValue</strong>(content: string)</code></dt> 1220 <dd>Set the editor content.</dd> 1221 1222 <dt id="getRange"><code><strong>doc.getRange</strong>(from: {line, ch}, to: {line, ch}, ?separator: string) → string</code></dt> 1223 <dd>Get the text between the given points in the editor, which 1224 should be <code>{line, ch}</code> objects. An optional third 1225 argument can be given to indicate the line separator string to 1226 use (defaults to <code>"\n"</code>).</dd> 1227 <dt id="replaceRange"><code><strong>doc.replaceRange</strong>(replacement: string, from: {line, ch}, to: {line, ch}, ?origin: string)</code></dt> 1228 <dd>Replace the part of the document between <code>from</code> 1229 and <code>to</code> with the given string. <code>from</code> 1230 and <code>to</code> must be <code>{line, ch}</code> 1231 objects. <code>to</code> can be left off to simply insert the 1232 string at position <code>from</code>. When <code>origin</code> 1233 is given, it will be passed on 1234 to <a href="#event_change"><code>"change"</code> events</a>, and 1235 its first letter will be used to determine whether this change 1236 can be merged with previous history events, in the way described 1237 for <a href="#selection_origin">selection origins</a>.</dd> 1238 1239 <dt id="getLine"><code><strong>doc.getLine</strong>(n: integer) → string</code></dt> 1240 <dd>Get the content of line <code>n</code>.</dd> 1241 1242 <dt id="lineCount"><code><strong>doc.lineCount</strong>() → integer</code></dt> 1243 <dd>Get the number of lines in the editor.</dd> 1244 <dt id="firstLine"><code><strong>doc.firstLine</strong>() → integer</code></dt> 1245 <dd>Get the first line of the editor. This will 1246 usually be zero but for <a href="#linkedDoc_from">linked sub-views</a>, 1247 or <a href="#api_doc">documents</a> instantiated with a non-zero 1248 first line, it might return other values.</dd> 1249 <dt id="lastLine"><code><strong>doc.lastLine</strong>() → integer</code></dt> 1250 <dd>Get the last line of the editor. This will 1251 usually be <code>doc.lineCount() - 1</code>, 1252 but for <a href="#linkedDoc_from">linked sub-views</a>, 1253 it might return other values.</dd> 1254 1255 <dt id="getLineHandle"><code><strong>doc.getLineHandle</strong>(num: integer) → LineHandle</code></dt> 1256 <dd>Fetches the line handle for the given line number.</dd> 1257 <dt id="getLineNumber"><code><strong>doc.getLineNumber</strong>(handle: LineHandle) → integer</code></dt> 1258 <dd>Given a line handle, returns the current position of that 1259 line (or <code>null</code> when it is no longer in the 1260 document).</dd> 1261 <dt id="eachLine"><code><strong>doc.eachLine</strong>(f: (line: LineHandle))</code></dt> 1262 <dt><code><strong>doc.eachLine</strong>(start: integer, end: integer, f: (line: LineHandle))</code></dt> 1263 <dd>Iterate over the whole document, or if <code>start</code> 1264 and <code>end</code> line numbers are given, the range 1265 from <code>start</code> up to (not including) <code>end</code>, 1266 and call <code>f</code> for each line, passing the line handle. 1267 This is a faster way to visit a range of line handlers than 1268 calling <a href="#getLineHandle"><code>getLineHandle</code></a> 1269 for each of them. Note that line handles have 1270 a <code>text</code> property containing the line's content (as a 1271 string).</dd> 1272 1273 <dt id="markClean"><code><strong>doc.markClean</strong>()</code></dt> 1274 <dd>Set the editor content as 'clean', a flag that it will 1275 retain until it is edited, and which will be set again when such 1276 an edit is undone again. Useful to track whether the content 1277 needs to be saved. This function is deprecated in favor 1278 of <a href="#changeGeneration"><code>changeGeneration</code></a>, 1279 which allows multiple subsystems to track different notions of 1280 cleanness without interfering.</dd> 1281 <dt id="changeGeneration"><code><strong>doc.changeGeneration</strong>(?closeEvent: boolean) → integer</code></dt> 1282 <dd>Returns a number that can later be passed 1283 to <a href="#isClean"><code>isClean</code></a> to test whether 1284 any edits were made (and not undone) in the meantime. 1285 If <code>closeEvent</code> is true, the current history event 1286 will be ‘closed’, meaning it can't be combined with further 1287 changes (rapid typing or deleting events are typically 1288 combined).</dd> 1289 <dt id="isClean"><code><strong>doc.isClean</strong>(?generation: integer) → boolean</code></dt> 1290 <dd>Returns whether the document is currently clean — not 1291 modified since initialization or the last call 1292 to <a href="#markClean"><code>markClean</code></a> if no 1293 argument is passed, or since the matching call 1294 to <a href="#changeGeneration"><code>changeGeneration</code></a> 1295 if a generation value is given.</dd> 1296 </dl> 1297 1298 <h3 id="api_selection">Cursor and selection methods</h3> 1299 1300 <dl> 1301 <dt id="getSelection"><code><strong>doc.getSelection</strong>(?lineSep: string) → string</code></dt> 1302 <dd>Get the currently selected code. Optionally pass a line 1303 separator to put between the lines in the output. When multiple 1304 selections are present, they are concatenated with instances 1305 of <code>lineSep</code> in between.</dd> 1306 <dt id="getSelections"><code><strong>doc.getSelections</strong>(?lineSep: string) → array&lt;string&gt;</code></dt> 1307 <dd>Returns an array containing a string for each selection, 1308 representing the content of the selections.</dd> 1309 1310 <dt id="replaceSelection"><code><strong>doc.replaceSelection</strong>(replacement: string, ?select: string)</code></dt> 1311 <dd>Replace the selection(s) with the given string. By default, 1312 the new selection ends up after the inserted text. The 1313 optional <code>select</code> argument can be used to change 1314 this—passing <code>"around"</code> will cause the new text to be 1315 selected, passing <code>"start"</code> will collapse the 1316 selection to the start of the inserted text.</dd> 1317 <dt id="replaceSelections"><code><strong>doc.replaceSelections</strong>(replacements: array&lt;string&gt;, ?select: string)</code></dt> 1318 <dd>The length of the given array should be the same as the 1319 number of active selections. Replaces the content of the 1320 selections with the strings in the array. 1321 The <code>select</code> argument works the same as 1322 in <a href="#replaceSelection"><code>replaceSelection</code></a>.</dd> 1323 1324 <dt id="getCursor"><code><strong>doc.getCursor</strong>(?start: string) → {line, ch}</code></dt> 1325 <dd>Retrieve one end of the <em>primary</em> 1326 selection. <code>start</code> is an optional string indicating 1327 which end of the selection to return. It may 1328 be <code>"from"</code>, <code>"to"</code>, <code>"head"</code> 1329 (the side of the selection that moves when you press 1330 shift+arrow), or <code>"anchor"</code> (the fixed side of the 1331 selection). Omitting the argument is the same as 1332 passing <code>"head"</code>. A <code>{line, ch}</code> object 1333 will be returned.</dd> 1334 <dt id="listSelections"><code><strong>doc.listSelections</strong>() → array&lt;{anchor, head}&gt;</code></dt> 1335 <dd>Retrieves a list of all current selections. These will 1336 always be sorted, and never overlap (overlapping selections are 1337 merged). Each object in the array contains <code>anchor</code> 1338 and <code>head</code> properties referring to <code>{line, 1339 ch}</code> objects.</dd> 1340 1341 <dt id="somethingSelected"><code><strong>doc.somethingSelected</strong>() → boolean</code></dt> 1342 <dd>Return true if any text is selected.</dd> 1343 <dt id="setCursor"><code><strong>doc.setCursor</strong>(pos: {line, ch}|number, ?ch: number, ?options: object)</code></dt> 1344 <dd>Set the cursor position. You can either pass a 1345 single <code>{line, ch}</code> object, or the line and the 1346 character as two separate parameters. Will replace all 1347 selections with a single, empty selection at the given position. 1348 The supported options are the same as for <a href="#setSelection"><code>setSelection</code></a>.</dd> 1349 1350 <dt id="setSelection"><code><strong>doc.setSelection</strong>(anchor: {line, ch}, ?head: {line, ch}, ?options: object)</code></dt> 1351 <dd>Set a single selection range. <code>anchor</code> 1352 and <code>head</code> should be <code>{line, ch}</code> 1353 objects. <code>head</code> defaults to <code>anchor</code> when 1354 not given. These options are supported: 1355 <dl> 1356 <dt id="selection_scroll"><code><strong>scroll</strong>: boolean</code></dt> 1357 <dd>Determines whether the selection head should be scrolled 1358 into view. Defaults to true.</dd> 1359 <dt id="selection_origin"><code><strong>origin</strong>: string</code></dt> 1360 <dd>Determines whether the selection history event may be 1361 merged with the previous one. When an origin starts with the 1362 character <code>+</code>, and the last recorded selection had 1363 the same origin and was similar (close 1364 in <a href="#option_historyEventDelay">time</a>, both 1365 collapsed or both non-collapsed), the new one will replace the 1366 old one. When it starts with <code>*</code>, it will always 1367 replace the previous event (if that had the same origin). 1368 Built-in motion uses the <code>"+move"</code> origin. User input uses the <code>"+input"</code> origin.</dd> 1369 <dt id="selection_bias"><code><strong>bias</strong>: number</code></dt> 1370 <dd>Determine the direction into which the selection endpoints 1371 should be adjusted when they fall inside 1372 an <a href="#mark_atomic">atomic</a> range. Can be either -1 1373 (backward) or 1 (forward). When not given, the bias will be 1374 based on the relative position of the old selection—the editor 1375 will try to move further away from that, to prevent getting 1376 stuck.</dd> 1377 </dl></dd> 1378 1379 <dt id="setSelections"><code><strong>doc.setSelections</strong>(ranges: array&lt;{anchor, head}&gt;, ?primary: integer, ?options: object)</code></dt> 1380 <dd>Sets a new set of selections. There must be at least one 1381 selection in the given array. When <code>primary</code> is a 1382 number, it determines which selection is the primary one. When 1383 it is not given, the primary index is taken from the previous 1384 selection, or set to the last range if the previous selection 1385 had less ranges than the new one. Supports the same options 1386 as <a href="#setSelection"><code>setSelection</code></a>.</dd> 1387 <dt id="addSelection"><code><strong>doc.addSelection</strong>(anchor: {line, ch}, ?head: {line, ch})</code></dt> 1388 <dd>Adds a new selection to the existing set of selections, and 1389 makes it the primary selection.</dd> 1390 1391 <dt id="extendSelection"><code><strong>doc.extendSelection</strong>(from: {line, ch}, ?to: {line, ch}, ?options: object)</code></dt> 1392 <dd>Similar 1393 to <a href="#setSelection"><code>setSelection</code></a>, but 1394 will, if shift is held or 1395 the <a href="#setExtending">extending</a> flag is set, move the 1396 head of the selection while leaving the anchor at its current 1397 place. <code>to</code> is optional, and can be passed to ensure 1398 a region (for example a word or paragraph) will end up selected 1399 (in addition to whatever lies between that region and the 1400 current anchor). When multiple selections are present, all but 1401 the primary selection will be dropped by this method. 1402 Supports the same options as <a href="#setSelection"><code>setSelection</code></a>.</dd> 1403 <dt id="extendSelections"><code><strong>doc.extendSelections</strong>(heads: array&lt;{line, ch}&gt;, ?options: object)</code></dt> 1404 <dd>An equivalent 1405 of <a href="#extendSelection"><code>extendSelection</code></a> 1406 that acts on all selections at once.</dd> 1407 <dt id="extendSelectionsBy"><code><strong>doc.extendSelectionsBy</strong>(f: function(range: {anchor, head}) → {line, ch}), ?options: object)</code></dt> 1408 <dd>Applies the given function to all existing selections, and 1409 calls <a href="#extendSelections"><code>extendSelections</code></a> 1410 on the result.</dd> 1411 <dt id="setExtending"><code><strong>doc.setExtending</strong>(value: boolean)</code></dt> 1412 <dd>Sets or clears the 'extending' flag, which acts similar to 1413 the shift key, in that it will cause cursor movement and calls 1414 to <a href="#extendSelection"><code>extendSelection</code></a> 1415 to leave the selection anchor in place.</dd> 1416 <dt id="getExtending"><code><strong>doc.getExtending</strong>() → boolean</code></dt> 1417 <dd>Get the value of the 'extending' flag.</dd> 1418 1419 <dt id="hasFocus"><code><strong>cm.hasFocus</strong>() → boolean</code></dt> 1420 <dd>Tells you whether the editor currently has focus.</dd> 1421 1422 <dt id="findPosH"><code><strong>cm.findPosH</strong>(start: {line, ch}, amount: integer, unit: string, visually: boolean) → {line, ch, ?hitSide: boolean}</code></dt> 1423 <dd>Used to find the target position for horizontal cursor 1424 motion. <code>start</code> is a <code>{line, ch}</code> 1425 object, <code>amount</code> an integer (may be negative), 1426 and <code>unit</code> one of the 1427 string <code>"char"</code>, <code>"column"</code>, 1428 or <code>"word"</code>. Will return a position that is produced 1429 by moving <code>amount</code> times the distance specified 1430 by <code>unit</code>. When <code>visually</code> is true, motion 1431 in right-to-left text will be visual rather than logical. When 1432 the motion was clipped by hitting the end or start of the 1433 document, the returned value will have a <code>hitSide</code> 1434 property set to true.</dd> 1435 <dt id="findPosV"><code><strong>cm.findPosV</strong>(start: {line, ch}, amount: integer, unit: string) → {line, ch, ?hitSide: boolean}</code></dt> 1436 <dd>Similar to <a href="#findPosH"><code>findPosH</code></a>, 1437 but used for vertical motion. <code>unit</code> may 1438 be <code>"line"</code> or <code>"page"</code>. The other 1439 arguments and the returned value have the same interpretation as 1440 they have in <code>findPosH</code>.</dd> 1441 1442 <dt id="findWordAt"><code><strong>cm.findWordAt</strong>(pos: {line, ch}) → {anchor: {line, ch}, head: {line, ch}}</code></dt> 1443 <dd>Returns the start and end of the 'word' (the stretch of 1444 letters, whitespace, or punctuation) at the given position.</dd> 1445 </dl> 1446 1447 <h3 id="api_configuration">Configuration methods</h3> 1448 1449 <dl> 1450 <dt id="setOption"><code><strong>cm.setOption</strong>(option: string, value: any)</code></dt> 1451 <dd>Change the configuration of the editor. <code>option</code> 1452 should the name of an <a href="#config">option</a>, 1453 and <code>value</code> should be a valid value for that 1454 option.</dd> 1455 <dt id="getOption"><code><strong>cm.getOption</strong>(option: string) → any</code></dt> 1456 <dd>Retrieves the current value of the given option for this 1457 editor instance.</dd> 1458 1459 <dt id="addKeyMap"><code><strong>cm.addKeyMap</strong>(map: object, bottom: boolean)</code></dt> 1460 <dd>Attach an additional <a href="#keymaps">key map</a> to the 1461 editor. This is mostly useful for addons that need to register 1462 some key handlers without trampling on 1463 the <a href="#option_extraKeys"><code>extraKeys</code></a> 1464 option. Maps added in this way have a higher precedence than 1465 the <code>extraKeys</code> 1466 and <a href="#option_keyMap"><code>keyMap</code></a> options, 1467 and between them, the maps added earlier have a lower precedence 1468 than those added later, unless the <code>bottom</code> argument 1469 was passed, in which case they end up below other key maps added 1470 with this method.</dd> 1471 <dt id="removeKeyMap"><code><strong>cm.removeKeyMap</strong>(map: object)</code></dt> 1472 <dd>Disable a keymap added 1473 with <a href="#addKeyMap"><code>addKeyMap</code></a>. Either 1474 pass in the key map object itself, or a string, which will be 1475 compared against the <code>name</code> property of the active 1476 key maps.</dd> 1477 1478 <dt id="addOverlay"><code><strong>cm.addOverlay</strong>(mode: string|object, ?options: object)</code></dt> 1479 <dd>Enable a highlighting overlay. This is a stateless mini-mode 1480 that can be used to add extra highlighting. For example, 1481 the <a href="../demo/search.html">search addon</a> uses it to 1482 highlight the term that's currently being 1483 searched. <code>mode</code> can be a <a href="#option_mode">mode 1484 spec</a> or a mode object (an object with 1485 a <a href="#token"><code>token</code></a> method). 1486 The <code>options</code> parameter is optional. If given, it 1487 should be an object, optionally containing the following options: 1488 <dl> 1489 <dt><code><strong>opaque</strong>: bool</code></dt> 1490 <dd>Defaults to off, but can be given to allow the overlay 1491 styling, when not <code>null</code>, to override the styling of 1492 the base mode entirely, instead of the two being applied 1493 together.</dd> 1494 <dt><code><strong>priority</strong>: number</code></dt> 1495 <dd>Determines the ordering in which the overlays are 1496 applied. Those with high priority are applied after those 1497 with lower priority, and able to override the opaqueness of 1498 the ones that come before. Defaults to 0.</dd> 1499 </dl> 1500 </dd> 1501 1502 <dt id="removeOverlay"><code><strong>cm.removeOverlay</strong>(mode: string|object)</code></dt> 1503 <dd>Pass this the exact value passed for the <code>mode</code> 1504 parameter to <a href="#addOverlay"><code>addOverlay</code></a>, 1505 or a string that corresponds to the <code>name</code> property of 1506 that value, to remove an overlay again.</dd> 1507 1508 <dt id="on"><code><strong>cm.on</strong>(type: string, func: (...args))</code></dt> 1509 <dd>Register an event handler for the given event type (a 1510 string) on the editor instance. There is also 1511 a <code>CodeMirror.on(object, type, func)</code> version 1512 that allows registering of events on any object.</dd> 1513 <dt id="off"><code><strong>cm.off</strong>(type: string, func: (...args))</code></dt> 1514 <dd>Remove an event handler on the editor instance. An 1515 equivalent <code>CodeMirror.off(object, type, 1516 func)</code> also exists.</dd> 1517 </dl> 1518 1519 <h3 id="api_doc">Document management methods</h3> 1520 1521 <p id="Doc">Each editor is associated with an instance 1522 of <code>CodeMirror.Doc</code>, its document. A document 1523 represents the editor content, plus a selection, an undo history, 1524 and a <a href="#option_mode">mode</a>. A document can only be 1525 associated with a single editor at a time. You can create new 1526 documents by calling the <code>CodeMirror.Doc(text, mode, 1527 firstLineNumber)</code> constructor. The last two arguments are 1528 optional and can be used to set a mode for the document and make 1529 it start at a line number other than 0, respectively.</p> 1530 1531 <dl> 1532 <dt id="getDoc"><code><strong>cm.getDoc</strong>() → Doc</code></dt> 1533 <dd>Retrieve the currently active document from an editor.</dd> 1534 <dt id="getEditor"><code><strong>doc.getEditor</strong>() → CodeMirror</code></dt> 1535 <dd>Retrieve the editor associated with a document. May 1536 return <code>null</code>.</dd> 1537 1538 <dt id="swapDoc"><code><strong>cm.swapDoc</strong>(doc: CodeMirror.Doc) → Doc</code></dt> 1539 <dd>Attach a new document to the editor. Returns the old 1540 document, which is now no longer associated with an editor.</dd> 1541 1542 <dt id="copy"><code><strong>doc.copy</strong>(copyHistory: boolean) → Doc</code></dt> 1543 <dd>Create an identical copy of the given doc. 1544 When <code>copyHistory</code> is true, the history will also be 1545 copied. Can not be called directly on an editor.</dd> 1546 1547 <dt id="linkedDoc"><code><strong>doc.linkedDoc</strong>(options: object) → Doc</code></dt> 1548 <dd>Create a new document that's linked to the target document. 1549 Linked documents will stay in sync (changes to one are also 1550 applied to the other) until <a href="#unlinkDoc">unlinked</a>. 1551 These are the options that are supported: 1552 <dl> 1553 <dt id="linkedDoc_sharedHist"><code><strong>sharedHist</strong>: boolean</code></dt> 1554 <dd>When turned on, the linked copy will share an undo 1555 history with the original. Thus, something done in one of 1556 the two can be undone in the other, and vice versa.</dd> 1557 <dt id="linkedDoc_from"><code><strong>from</strong>: integer</code></dt> 1558 <dt id="linkedDoc_to"><code><strong>to</strong>: integer</code></dt> 1559 <dd>Can be given to make the new document a subview of the 1560 original. Subviews only show a given range of lines. Note 1561 that line coordinates inside the subview will be consistent 1562 with those of the parent, so that for example a subview 1563 starting at line 10 will refer to its first line as line 10, 1564 not 0.</dd> 1565 <dt id="linkedDoc_mode"><code><strong>mode</strong>: string|object</code></dt> 1566 <dd>By default, the new document inherits the mode of the 1567 parent. This option can be set to 1568 a <a href="#option_mode">mode spec</a> to give it a 1569 different mode.</dd> 1570 </dl></dd> 1571 <dt id="unlinkDoc"><code><strong>doc.unlinkDoc</strong>(doc: CodeMirror.Doc)</code></dt> 1572 <dd>Break the link between two documents. After calling this, 1573 changes will no longer propagate between the documents, and, if 1574 they had a shared history, the history will become 1575 separate.</dd> 1576 <dt id="iterLinkedDocs"><code><strong>doc.iterLinkedDocs</strong>(function: (doc: CodeMirror.Doc, sharedHist: boolean))</code></dt> 1577 <dd>Will call the given function for all documents linked to the 1578 target document. It will be passed two arguments, the linked document 1579 and a boolean indicating whether that document shares history 1580 with the target.</dd> 1581 </dl> 1582 1583 <h3 id="api_history">History-related methods</h3> 1584 1585 <dl> 1586 <dt id="undo"><code><strong>doc.undo</strong>()</code></dt> 1587 <dd>Undo one edit (if any undo events are stored).</dd> 1588 <dt id="redo"><code><strong>doc.redo</strong>()</code></dt> 1589 <dd>Redo one undone edit.</dd> 1590 1591 <dt id="undoSelection"><code><strong>doc.undoSelection</strong>()</code></dt> 1592 <dd>Undo one edit or selection change.</dd> 1593 <dt id="redoSelection"><code><strong>doc.redoSelection</strong>()</code></dt> 1594 <dd>Redo one undone edit or selection change.</dd> 1595 1596 <dt id="historySize"><code><strong>doc.historySize</strong>() → {undo: integer, redo: integer}</code></dt> 1597 <dd>Returns an object with <code>{undo, redo}</code> properties, 1598 both of which hold integers, indicating the amount of stored 1599 undo and redo operations.</dd> 1600 <dt id="clearHistory"><code><strong>doc.clearHistory</strong>()</code></dt> 1601 <dd>Clears the editor's undo history.</dd> 1602 <dt id="getHistory"><code><strong>doc.getHistory</strong>() → object</code></dt> 1603 <dd>Get a (JSON-serializable) representation of the undo history.</dd> 1604 <dt id="setHistory"><code><strong>doc.setHistory</strong>(history: object)</code></dt> 1605 <dd>Replace the editor's undo history with the one provided, 1606 which must be a value as returned 1607 by <a href="#getHistory"><code>getHistory</code></a>. Note that 1608 this will have entirely undefined results if the editor content 1609 isn't also the same as it was when <code>getHistory</code> was 1610 called.</dd> 1611 </dl> 1612 1613 <h3 id="api_marker">Text-marking methods</h3> 1614 1615 <dl> 1616 <dt id="markText"><code><strong>doc.markText</strong>(from: {line, ch}, to: {line, ch}, ?options: object) → TextMarker</code></dt> 1617 <dd>Can be used to mark a range of text with a specific CSS 1618 class name. <code>from</code> and <code>to</code> should 1619 be <code>{line, ch}</code> objects. The <code>options</code> 1620 parameter is optional. When given, it should be an object that 1621 may contain the following configuration options: 1622 <dl> 1623 <dt id="mark_className"><code><strong>className</strong>: string</code></dt> 1624 <dd>Assigns a CSS class to the marked stretch of text.</dd> 1625 <dt id="mark_inclusiveLeft"><code><strong>inclusiveLeft</strong>: boolean</code></dt> 1626 <dd>Determines whether 1627 text inserted on the left of the marker will end up inside 1628 or outside of it.</dd> 1629 <dt id="mark_inclusiveRight"><code><strong>inclusiveRight</strong>: boolean</code></dt> 1630 <dd>Like <code>inclusiveLeft</code>, 1631 but for the right side.</dd> 1632 <dt id="mark_atomic"><code><strong>atomic</strong>: boolean</code></dt> 1633 <dd>Atomic ranges act as a single unit when cursor movement is 1634 concerned—i.e. it is impossible to place the cursor inside of 1635 them. In atomic ranges, <code>inclusiveLeft</code> 1636 and <code>inclusiveRight</code> have a different meaning—they 1637 will prevent the cursor from being placed respectively 1638 directly before and directly after the range.</dd> 1639 <dt id="mark_collapsed"><code><strong>collapsed</strong>: boolean</code></dt> 1640 <dd>Collapsed ranges do not show up in the display. Setting a 1641 range to be collapsed will automatically make it atomic.</dd> 1642 <dt id="mark_clearOnEnter"><code><strong>clearOnEnter</strong>: boolean</code></dt> 1643 <dd>When enabled, will cause the mark to clear itself whenever 1644 the cursor enters its range. This is mostly useful for 1645 text-replacement widgets that need to 'snap open' when the 1646 user tries to edit them. The 1647 <a href="#event_clear"><code>"clear"</code></a> event 1648 fired on the range handle can be used to be notified when this 1649 happens.</dd> 1650 <dt id="mark_clearWhenEmpty"><code><strong>clearWhenEmpty</strong>: boolean</code></dt> 1651 <dd>Determines whether the mark is automatically cleared when 1652 it becomes empty. Default is true.</dd> 1653 <dt id="mark_replacedWith"><code><strong>replacedWith</strong>: Element</code></dt> 1654 <dd>Use a given node to display this range. Implies both 1655 collapsed and atomic. The given DOM node <em>must</em> be an 1656 inline element (as opposed to a block element).</dd> 1657 <dt><code><strong>handleMouseEvents</strong>: boolean</code></dt> 1658 <dd>When <code>replacedWith</code> is given, this determines 1659 whether the editor will capture mouse and drag events 1660 occurring in this widget. Default is false—the events will be 1661 left alone for the default browser handler, or specific 1662 handlers on the widget, to capture.</dd> 1663 <dt id="mark_readOnly"><code><strong>readOnly</strong>: boolean</code></dt> 1664 <dd>A read-only span can, as long as it is not cleared, not be 1665 modified except by 1666 calling <a href="#setValue"><code>setValue</code></a> to reset 1667 the whole document. <em>Note:</em> adding a read-only span 1668 currently clears the undo history of the editor, because 1669 existing undo events being partially nullified by read-only 1670 spans would corrupt the history (in the current 1671 implementation).</dd> 1672 <dt id="mark_addToHistory"><code><strong>addToHistory</strong>: boolean</code></dt> 1673 <dd>When set to true (default is false), adding this marker 1674 will create an event in the undo history that can be 1675 individually undone (clearing the marker).</dd> 1676 <dt id="mark_startStyle"><code><strong>startStyle</strong>: string</code></dt><dd>Can be used to specify 1677 an extra CSS class to be applied to the leftmost span that 1678 is part of the marker.</dd> 1679 <dt id="mark_endStyle"><code><strong>endStyle</strong>: string</code></dt><dd>Equivalent 1680 to <code>startStyle</code>, but for the rightmost span.</dd> 1681 <dt id="mark_css"><code><strong>css</strong>: string</code></dt> 1682 <dd>A string of CSS to be applied to the covered text. For example <code>"color: #fe3"</code>.</dd> 1683 <dt id="mark_title"><code><strong>title</strong>: 1684 string</code></dt><dd>When given, will give the nodes created 1685 for this span a HTML <code>title</code> attribute with the 1686 given value.</dd> 1687 <dt id="mark_shared"><code><strong>shared</strong>: boolean</code></dt><dd>When the 1688 target document is <a href="#linkedDoc">linked</a> to other 1689 documents, you can set <code>shared</code> to true to make the 1690 marker appear in all documents. By default, a marker appears 1691 only in its target document.</dd> 1692 </dl> 1693 The method will return an object that represents the marker 1694 (with constructor <code>CodeMirror.TextMarker</code>), which 1695 exposes three methods: 1696 <code><strong>clear</strong>()</code>, to remove the mark, 1697 <code><strong>find</strong>()</code>, which returns 1698 a <code>{from, to}</code> object (both holding document 1699 positions), indicating the current position of the marked range, 1700 or <code>undefined</code> if the marker is no longer in the 1701 document, and finally <code><strong>changed</strong>()</code>, 1702 which you can call if you've done something that might change 1703 the size of the marker (for example changing the content of 1704 a <a href="#mark_replacedWith"><code>replacedWith</code></a> 1705 node), and want to cheaply update the display.</dd> 1706 1707 <dt id="setBookmark"><code><strong>doc.setBookmark</strong>(pos: {line, ch}, ?options: object) → TextMarker</code></dt> 1708 <dd>Inserts a bookmark, a handle that follows the text around it 1709 as it is being edited, at the given position. A bookmark has two 1710 methods <code>find()</code> and <code>clear()</code>. The first 1711 returns the current position of the bookmark, if it is still in 1712 the document, and the second explicitly removes the bookmark. 1713 The options argument is optional. If given, the following 1714 properties are recognized: 1715 <dl> 1716 <dt><code><strong>widget</strong>: Element</code></dt><dd>Can be used to display a DOM 1717 node at the current location of the bookmark (analogous to 1718 the <a href="#mark_replacedWith"><code>replacedWith</code></a> 1719 option to <a href="#markText"><code>markText</code></a>).</dd> 1720 <dt><code><strong>insertLeft</strong>: boolean</code></dt><dd>By default, text typed 1721 when the cursor is on top of the bookmark will end up to the 1722 right of the bookmark. Set this option to true to make it go 1723 to the left instead.</dd> 1724 <dt><code><strong>shared</strong>: boolean</code></dt><dd>See 1725 the corresponding <a href="#mark_shared">option</a> 1726 to <code>markText</code>.</dd> 1727 <dt><code><strong>handleMouseEvents</strong>: boolean</code></dt> 1728 <dd>As with <a href="#markText"><code>markText</code></a>, 1729 this determines whether mouse events on the widget inserted 1730 for this bookmark are handled by CodeMirror. The default is 1731 false.</dd> 1732 </dl></dd> 1733 1734 <dt id="findMarks"><code><strong>doc.findMarks</strong>(from: {line, ch}, to: {line, ch}) → array&lt;TextMarker&gt;</code></dt> 1735 <dd>Returns an array of all the bookmarks and marked ranges 1736 found between the given positions (non-inclusive).</dd> 1737 <dt id="findMarksAt"><code><strong>doc.findMarksAt</strong>(pos: {line, ch}) → array&lt;TextMarker&gt;</code></dt> 1738 <dd>Returns an array of all the bookmarks and marked ranges 1739 present at the given position.</dd> 1740 <dt id="getAllMarks"><code><strong>doc.getAllMarks</strong>() → array&lt;TextMarker&gt;</code></dt> 1741 <dd>Returns an array containing all marked ranges in the document.</dd> 1742 </dl> 1743 1744 <h3 id="api_decoration">Widget, gutter, and decoration methods</h3> 1745 1746 <dl> 1747 <dt id="setGutterMarker"><code><strong>doc.setGutterMarker</strong>(line: integer|LineHandle, gutterID: string, value: Element) → LineHandle</code></dt> 1748 <dd>Sets the gutter marker for the given gutter (identified by 1749 its CSS class, see 1750 the <a href="#option_gutters"><code>gutters</code></a> option) 1751 to the given value. Value can be either <code>null</code>, to 1752 clear the marker, or a DOM element, to set it. The DOM element 1753 will be shown in the specified gutter next to the specified 1754 line.</dd> 1755 1756 <dt id="clearGutter"><code><strong>doc.clearGutter</strong>(gutterID: string)</code></dt> 1757 <dd>Remove all gutter markers in 1758 the <a href="#option_gutters">gutter</a> with the given ID.</dd> 1759 1760 <dt id="addLineClass"><code><strong>doc.addLineClass</strong>(line: integer|LineHandle, where: string, class: string) → LineHandle</code></dt> 1761 <dd>Set a CSS class name for the given line. <code>line</code> 1762 can be a number or a line handle. <code>where</code> determines 1763 to which element this class should be applied, can can be one 1764 of <code>"text"</code> (the text element, which lies in front of 1765 the selection), <code>"background"</code> (a background element 1766 that will be behind the selection), <code>"gutter"</code> (the 1767 line's gutter space), or <code>"wrap"</code> (the wrapper node 1768 that wraps all of the line's elements, including gutter 1769 elements). <code>class</code> should be the name of the class to 1770 apply.</dd> 1771 1772 <dt id="removeLineClass"><code><strong>doc.removeLineClass</strong>(line: integer|LineHandle, where: string, class: string) → LineHandle</code></dt> 1773 <dd>Remove a CSS class from a line. <code>line</code> can be a 1774 line handle or number. <code>where</code> should be one 1775 of <code>"text"</code>, <code>"background"</code>, 1776 or <code>"wrap"</code> 1777 (see <a href="#addLineClass"><code>addLineClass</code></a>). <code>class</code> 1778 can be left off to remove all classes for the specified node, or 1779 be a string to remove only a specific class.</dd> 1780 1781 <dt id="lineInfo"><code><strong>doc.lineInfo</strong>(line: integer|LineHandle) → object</code></dt> 1782 <dd>Returns the line number, text content, and marker status of 1783 the given line, which can be either a number or a line handle. 1784 The returned object has the structure <code>{line, handle, text, 1785 gutterMarkers, textClass, bgClass, wrapClass, widgets}</code>, 1786 where <code>gutterMarkers</code> is an object mapping gutter IDs 1787 to marker elements, and <code>widgets</code> is an array 1788 of <a href="#addLineWidget">line widgets</a> attached to this 1789 line, and the various class properties refer to classes added 1790 with <a href="#addLineClass"><code>addLineClass</code></a>.</dd> 1791 1792 <dt id="addWidget"><code><strong>cm.addWidget</strong>(pos: {line, ch}, node: Element, scrollIntoView: boolean)</code></dt> 1793 <dd>Puts <code>node</code>, which should be an absolutely 1794 positioned DOM node, into the editor, positioned right below the 1795 given <code>{line, ch}</code> position. 1796 When <code>scrollIntoView</code> is true, the editor will ensure 1797 that the entire node is visible (if possible). To remove the 1798 widget again, simply use DOM methods (move it somewhere else, or 1799 call <code>removeChild</code> on its parent).</dd> 1800 1801 <dt id="addLineWidget"><code><strong>doc.addLineWidget</strong>(line: integer|LineHandle, node: Element, ?options: object) → LineWidget</code></dt> 1802 <dd>Adds a line widget, an element shown below a line, spanning 1803 the whole of the editor's width, and moving the lines below it 1804 downwards. <code>line</code> should be either an integer or a 1805 line handle, and <code>node</code> should be a DOM node, which 1806 will be displayed below the given line. <code>options</code>, 1807 when given, should be an object that configures the behavior of 1808 the widget. The following options are supported (all default to 1809 false): 1810 <dl> 1811 <dt><code><strong>coverGutter</strong>: boolean</code></dt> 1812 <dd>Whether the widget should cover the gutter.</dd> 1813 <dt><code><strong>noHScroll</strong>: boolean</code></dt> 1814 <dd>Whether the widget should stay fixed in the face of 1815 horizontal scrolling.</dd> 1816 <dt><code><strong>above</strong>: boolean</code></dt> 1817 <dd>Causes the widget to be placed above instead of below 1818 the text of the line.</dd> 1819 <dt><code><strong>handleMouseEvents</strong>: boolean</code></dt> 1820 <dd>Determines whether the editor will capture mouse and 1821 drag events occurring in this widget. Default is false—the 1822 events will be left alone for the default browser handler, 1823 or specific handlers on the widget, to capture.</dd> 1824 <dt><code><strong>insertAt</strong>: integer</code></dt> 1825 <dd>By default, the widget is added below other widgets for 1826 the line. This option can be used to place it at a different 1827 position (zero for the top, N to put it after the Nth other 1828 widget). Note that this only has effect once, when the 1829 widget is created. 1830 </dl> 1831 Note that the widget node will become a descendant of nodes with 1832 CodeMirror-specific CSS classes, and those classes might in some 1833 cases affect it. This method returns an object that represents 1834 the widget placement. It'll have a <code>line</code> property 1835 pointing at the line handle that it is associated with, and the following methods: 1836 <dl> 1837 <dt id="widget_clear"><code><strong>clear</strong>()</code></dt><dd>Removes the widget.</dd> 1838 <dt id="widget_changed"><code><strong>changed</strong>()</code></dt><dd>Call 1839 this if you made some change to the widget's DOM node that 1840 might affect its height. It'll force CodeMirror to update 1841 the height of the line that contains the widget.</dd> 1842 </dl> 1843 </dd> 1844 </dl> 1845 1846 <h3 id="api_sizing">Sizing, scrolling and positioning methods</h3> 1847 1848 <dl> 1849 <dt id="setSize"><code><strong>cm.setSize</strong>(width: number|string, height: number|string)</code></dt> 1850 <dd>Programmatically set the size of the editor (overriding the 1851 applicable <a href="#css-resize">CSS 1852 rules</a>). <code>width</code> and <code>height</code> 1853 can be either numbers (interpreted as pixels) or CSS units 1854 (<code>"100%"</code>, for example). You can 1855 pass <code>null</code> for either of them to indicate that that 1856 dimension should not be changed.</dd> 1857 1858 <dt id="scrollTo"><code><strong>cm.scrollTo</strong>(x: number, y: number)</code></dt> 1859 <dd>Scroll the editor to a given (pixel) position. Both 1860 arguments may be left as <code>null</code> 1861 or <code>undefined</code> to have no effect.</dd> 1862 <dt id="getScrollInfo"><code><strong>cm.getScrollInfo</strong>() → {left, top, width, height, clientWidth, clientHeight}</code></dt> 1863 <dd>Get an <code>{left, top, width, height, clientWidth, 1864 clientHeight}</code> object that represents the current scroll 1865 position, the size of the scrollable area, and the size of the 1866 visible area (minus scrollbars).</dd> 1867 <dt id="scrollIntoView"><code><strong>cm.scrollIntoView</strong>(what: {line, ch}|{left, top, right, bottom}|{from, to}|null, ?margin: number)</code></dt> 1868 <dd>Scrolls the given position into view. <code>what</code> may 1869 be <code>null</code> to scroll the cursor into view, 1870 a <code>{line, ch}</code> position to scroll a character into 1871 view, a <code>{left, top, right, bottom}</code> pixel range (in 1872 editor-local coordinates), or a range <code>{from, to}</code> 1873 containing either two character positions or two pixel squares. 1874 The <code>margin</code> parameter is optional. When given, it 1875 indicates the amount of vertical pixels around the given area 1876 that should be made visible as well.</dd> 1877 1878 <dt id="cursorCoords"><code><strong>cm.cursorCoords</strong>(where: boolean|{line, ch}, mode: string) → {left, top, bottom}</code></dt> 1879 <dd>Returns an <code>{left, top, bottom}</code> object 1880 containing the coordinates of the cursor position. 1881 If <code>mode</code> is <code>"local"</code>, they will be 1882 relative to the top-left corner of the editable document. If it 1883 is <code>"page"</code> or not given, they are relative to the 1884 top-left corner of the page. If <code>mode</code> 1885 is <code>"window"</code>, the coordinates are relative to the 1886 top-left corner of the currently visible (scrolled) 1887 window. <code>where</code> can be a boolean indicating whether 1888 you want the start (<code>true</code>) or the end 1889 (<code>false</code>) of the selection, or, if a <code>{line, 1890 ch}</code> object is given, it specifies the precise position at 1891 which you want to measure.</dd> 1892 <dt id="charCoords"><code><strong>cm.charCoords</strong>(pos: {line, ch}, ?mode: string) → {left, right, top, bottom}</code></dt> 1893 <dd>Returns the position and dimensions of an arbitrary 1894 character. <code>pos</code> should be a <code>{line, ch}</code> 1895 object. This differs from <code>cursorCoords</code> in that 1896 it'll give the size of the whole character, rather than just the 1897 position that the cursor would have when it would sit at that 1898 position.</dd> 1899 <dt id="coordsChar"><code><strong>cm.coordsChar</strong>(object: {left, top}, ?mode: string) → {line, ch}</code></dt> 1900 <dd>Given an <code>{left, top}</code> object (e.g. coordinates of a mouse event) returns 1901 the <code>{line, ch}</code> position that corresponds to it. The 1902 optional <code>mode</code> parameter determines relative to what 1903 the coordinates are interpreted. It may 1904 be <code>"window"</code>, <code>"page"</code> (the default), 1905 or <code>"local"</code>.</dd> 1906 <dt id="lineAtHeight"><code><strong>cm.lineAtHeight</strong>(height: number, ?mode: string) → number</code></dt> 1907 <dd>Computes the line at the given pixel 1908 height. <code>mode</code> can be one of the same strings 1909 that <a href="#coordsChar"><code>coordsChar</code></a> 1910 accepts.</dd> 1911 <dt id="heightAtLine"><code><strong>cm.heightAtLine</strong>(line: integer|LineHandle, ?mode: string, ?includeWidgets: bool) → number</code></dt> 1912 <dd>Computes the height of the top of a line, in the coordinate 1913 system specified by <code>mode</code> 1914 (see <a href="#coordsChar"><code>coordsChar</code></a>), which 1915 defaults to <code>"page"</code>. When a line below the bottom of 1916 the document is specified, the returned value is the bottom of 1917 the last line in the document. By default, the position of the 1918 actual text is returned. If `includeWidgets` is true and the 1919 line has line widgets, the position above the first line widget 1920 is returned.</dd> 1921 <dt id="defaultTextHeight"><code><strong>cm.defaultTextHeight</strong>() → number</code></dt> 1922 <dd>Returns the line height of the default font for the editor.</dd> 1923 <dt id="defaultCharWidth"><code><strong>cm.defaultCharWidth</strong>() → number</code></dt> 1924 <dd>Returns the pixel width of an 'x' in the default font for 1925 the editor. (Note that for non-monospace fonts, this is mostly 1926 useless, and even for monospace fonts, non-ascii characters 1927 might have a different width).</dd> 1928 1929 <dt id="getViewport"><code><strong>cm.getViewport</strong>() → {from: number, to: number}</code></dt> 1930 <dd>Returns a <code>{from, to}</code> object indicating the 1931 start (inclusive) and end (exclusive) of the currently rendered 1932 part of the document. In big documents, when most content is 1933 scrolled out of view, CodeMirror will only render the visible 1934 part, and a margin around it. See also 1935 the <a href="#event_viewportChange"><code>viewportChange</code></a> 1936 event.</dd> 1937 1938 <dt id="refresh"><code><strong>cm.refresh</strong>()</code></dt> 1939 <dd>If your code does something to change the size of the editor 1940 element (window resizes are already listened for), or unhides 1941 it, you should probably follow up by calling this method to 1942 ensure CodeMirror is still looking as intended. See also 1943 the <a href="#addon_autorefresh">autorefresh addon</a>.</dd> 1944 </dl> 1945 1946 <h3 id="api_mode">Mode, state, and token-related methods</h3> 1947 1948 <p>When writing language-aware functionality, it can often be 1949 useful to hook into the knowledge that the CodeMirror language 1950 mode has. See <a href="#modeapi">the section on modes</a> for a 1951 more detailed description of how these work.</p> 1952 1953 <dl> 1954 <dt id="getMode"><code><strong>doc.getMode</strong>() → object</code></dt> 1955 <dd>Gets the (outer) mode object for the editor. Note that this 1956 is distinct from <code>getOption("mode")</code>, which gives you 1957 the mode specification, rather than the resolved, instantiated 1958 <a href="#defineMode">mode object</a>.</dd> 1959 1960 <dt id="getModeAt"><code><strong>cm.getModeAt</strong>(pos: {line, ch}) → object</code></dt> 1961 <dd>Gets the inner mode at a given position. This will return 1962 the same as <a href="#getMode"><code>getMode</code></a> for 1963 simple modes, but will return an inner mode for nesting modes 1964 (such as <code>htmlmixed</code>).</dd> 1965 1966 <dt id="getTokenAt"><code><strong>cm.getTokenAt</strong>(pos: {line, ch}, ?precise: boolean) → object</code></dt> 1967 <dd>Retrieves information about the token the current mode found 1968 before the given position (a <code>{line, ch}</code> object). The 1969 returned object has the following properties: 1970 <dl> 1971 <dt><code><strong>start</strong></code></dt><dd>The character (on the given line) at which the token starts.</dd> 1972 <dt><code><strong>end</strong></code></dt><dd>The character at which the token ends.</dd> 1973 <dt><code><strong>string</strong></code></dt><dd>The token's string.</dd> 1974 <dt><code><strong>type</strong></code></dt><dd>The token type the mode assigned 1975 to the token, such as <code>"keyword"</code> 1976 or <code>"comment"</code> (may also be null).</dd> 1977 <dt><code><strong>state</strong></code></dt><dd>The mode's state at the end of this token.</dd> 1978 </dl> 1979 If <code>precise</code> is true, the token will be guaranteed to be accurate based on recent edits. If false or 1980 not specified, the token will use cached state information, which will be faster but might not be accurate if 1981 edits were recently made and highlighting has not yet completed. 1982 </dd> 1983 1984 <dt id="getLineTokens"><code><strong>cm.getLineTokens</strong>(line: integer, ?precise: boolean) → array&lt;{start, end, string, type, state}&gt;</code></dt> 1985 <dd>This is similar 1986 to <a href="#getTokenAt"><code>getTokenAt</code></a>, but 1987 collects all tokens for a given line into an array. It is much 1988 cheaper than repeatedly calling <code>getTokenAt</code>, which 1989 re-parses the part of the line before the token for every call.</dd> 1990 1991 <dt id="getTokenTypeAt"><code><strong>cm.getTokenTypeAt</strong>(pos: {line, ch}) → string</code></dt> 1992 <dd>This is a (much) cheaper version 1993 of <a href="#getTokenAt"><code>getTokenAt</code></a> useful for 1994 when you just need the type of the token at a given position, 1995 and no other information. Will return <code>null</code> for 1996 unstyled tokens, and a string, potentially containing multiple 1997 space-separated style names, otherwise.</dd> 1998 1999 <dt id="getHelpers"><code><strong>cm.getHelpers</strong>(pos: {line, ch}, type: string) → array&lt;helper&gt;</code></dt> 2000 <dd>Fetch the set of applicable helper values for the given 2001 position. Helpers provide a way to look up functionality 2002 appropriate for a mode. The <code>type</code> argument provides 2003 the helper namespace (see 2004 <a href="#registerHelper"><code>registerHelper</code></a>), in 2005 which the values will be looked up. When the mode itself has a 2006 property that corresponds to the <code>type</code>, that 2007 directly determines the keys that are used to look up the helper 2008 values (it may be either a single string, or an array of 2009 strings). Failing that, the mode's <code>helperType</code> 2010 property and finally the mode's name are used.</dd> 2011 <dd>For example, the JavaScript mode has a 2012 property <code>fold</code> containing <code>"brace"</code>. When 2013 the <code>brace-fold</code> addon is loaded, that defines a 2014 helper named <code>brace</code> in the <code>fold</code> 2015 namespace. This is then used by 2016 the <a href="#addon_foldcode"><code>foldcode</code></a> addon to 2017 figure out that it can use that folding function to fold 2018 JavaScript code.</dd> 2019 <dd>When any <a href="#registerGlobalHelper">'global'</a> 2020 helpers are defined for the given namespace, their predicates 2021 are called on the current mode and editor, and all those that 2022 declare they are applicable will also be added to the array that 2023 is returned.</dd> 2024 2025 <dt id="getHelper"><code><strong>cm.getHelper</strong>(pos: {line, ch}, type: string) → helper</code></dt> 2026 <dd>Returns the first applicable helper value. 2027 See <a href="#getHelpers"><code>getHelpers</code></a>.</dd> 2028 2029 <dt id="getStateAfter"><code><strong>cm.getStateAfter</strong>(?line: integer, ?precise: boolean) → object</code></dt> 2030 <dd>Returns the mode's parser state, if any, at the end of the 2031 given line number. If no line number is given, the state at the 2032 end of the document is returned. This can be useful for storing 2033 parsing errors in the state, or getting other kinds of 2034 contextual information for a line. <code>precise</code> is defined 2035 as in <code>getTokenAt()</code>.</dd> 2036 </dl> 2037 2038 <h3 id="api_misc">Miscellaneous methods</h3> 2039 2040 <dl> 2041 <dt id="operation"><code><strong>cm.operation</strong>(func: () → any) → any</code></dt> 2042 <dd>CodeMirror internally buffers changes and only updates its 2043 DOM structure after it has finished performing some operation. 2044 If you need to perform a lot of operations on a CodeMirror 2045 instance, you can call this method with a function argument. It 2046 will call the function, buffering up all changes, and only doing 2047 the expensive update after the function returns. This can be a 2048 lot faster. The return value from this method will be the return 2049 value of your function.</dd> 2050 2051 <dt id="startOperation"><code><strong>cm.startOperation</strong>()</code></dt> 2052 <dt id="endOperation"><code><strong>cm.endOperation</strong>()</code></dt> 2053 <dd>In normal circumstances, use the above <code>operation</code> 2054 method. But if you want to buffer operations happening asynchronously, 2055 or that can't all be wrapped in a callback function, you can 2056 call <code>startOperation</code> to tell CodeMirror to start 2057 buffering changes, and <code>endOperation</code> to actually 2058 render all the updates. <em>Be careful:</em> if you use this 2059 API and forget to call <code>endOperation</code>, the editor will 2060 just never update.</dd> 2061 2062 <dt id="indentLine"><code><strong>cm.indentLine</strong>(line: integer, ?dir: string|integer)</code></dt> 2063 <dd>Adjust the indentation of the given line. The second 2064 argument (which defaults to <code>"smart"</code>) may be one of: 2065 <dl> 2066 <dt><code><strong>"prev"</strong></code></dt> 2067 <dd>Base indentation on the indentation of the previous line.</dd> 2068 <dt><code><strong>"smart"</strong></code></dt> 2069 <dd>Use the mode's smart indentation if available, behave 2070 like <code>"prev"</code> otherwise.</dd> 2071 <dt><code><strong>"add"</strong></code></dt> 2072 <dd>Increase the indentation of the line by 2073 one <a href="#option_indentUnit">indent unit</a>.</dd> 2074 <dt><code><strong>"subtract"</strong></code></dt> 2075 <dd>Reduce the indentation of the line.</dd> 2076 <dt><code><strong>&lt;integer></strong></code></dt> 2077 <dd>Add (positive number) or reduce (negative number) the 2078 indentation by the given amount of spaces.</dd> 2079 </dl></dd> 2080 2081 <dt id="toggleOverwrite"><code><strong>cm.toggleOverwrite</strong>(?value: boolean)</code></dt> 2082 <dd>Switches between overwrite and normal insert mode (when not 2083 given an argument), or sets the overwrite mode to a specific 2084 state (when given an argument).</dd> 2085 2086 <dt id="isReadOnly"><code><strong>cm.isReadOnly</strong>() → boolean</code></dt> 2087 <dd>Tells you whether the editor's content can be edited by the 2088 user.</dd> 2089 2090 <dt id="lineSeparator"><code><strong>doc.lineSeparator</strong>()</code></dt> 2091 <dd>Returns the preferred line separator string for this 2092 document, as per the <a href="#option_lineSeparator">option</a> 2093 by the same name. When that option is <code>null</code>, the 2094 string <code>"\n"</code> is returned.</dd> 2095 2096 <dt id="execCommand"><code><strong>cm.execCommand</strong>(name: string)</code></dt> 2097 <dd>Runs the <a href="#commands">command</a> with the given name on the editor.</dd> 2098 2099 <dt id="posFromIndex"><code><strong>doc.posFromIndex</strong>(index: integer) → {line, ch}</code></dt> 2100 <dd>Calculates and returns a <code>{line, ch}</code> object for a 2101 zero-based <code>index</code> who's value is relative to the start of the 2102 editor's text. If the <code>index</code> is out of range of the text then 2103 the returned object is clipped to start or end of the text 2104 respectively.</dd> 2105 <dt id="indexFromPos"><code><strong>doc.indexFromPos</strong>(object: {line, ch}) → integer</code></dt> 2106 <dd>The reverse of <a href="#posFromIndex"><code>posFromIndex</code></a>.</dd> 2107 2108 <dt id="focus"><code><strong>cm.focus</strong>()</code></dt> 2109 <dd>Give the editor focus.</dd> 2110 2111 <dt id="getInputField"><code><strong>cm.getInputField</strong>() → Element</code></dt> 2112 <dd>Returns the input field for the editor. Will be a textarea 2113 or an editable div, depending on the value of 2114 the <a href="#option_inputStyle"><code>inputStyle</code></a> 2115 option.</dd> 2116 <dt id="getWrapperElement"><code><strong>cm.getWrapperElement</strong>() → Element</code></dt> 2117 <dd>Returns the DOM node that represents the editor, and 2118 controls its size. Remove this from your tree to delete an 2119 editor instance.</dd> 2120 <dt id="getScrollerElement"><code><strong>cm.getScrollerElement</strong>() → Element</code></dt> 2121 <dd>Returns the DOM node that is responsible for the scrolling 2122 of the editor.</dd> 2123 <dt id="getGutterElement"><code><strong>cm.getGutterElement</strong>() → Element</code></dt> 2124 <dd>Fetches the DOM node that contains the editor gutters.</dd> 2125 </dl> 2126 2127 <h3 id="api_static">Static properties</h3> 2128 <p>The <code>CodeMirror</code> object itself provides 2129 several useful properties.</p> 2130 2131 <dl> 2132 <dt id="version"><code><strong>CodeMirror.version</strong>: string</code></dt> 2133 <dd>It contains a string that indicates the version of the 2134 library. This is a triple of 2135 integers <code>"major.minor.patch"</code>, 2136 where <code>patch</code> is zero for releases, and something 2137 else (usually one) for dev snapshots.</dd> 2138 2139 <dt id="fromTextArea"><code><strong>CodeMirror.fromTextArea</strong>(textArea: TextAreaElement, ?config: object)</code></dt> 2140 <dd>This method provides another way to initialize an editor. It 2141 takes a textarea DOM node as first argument and an optional 2142 configuration object as second. It will replace the textarea 2143 with a CodeMirror instance, and wire up the form of that 2144 textarea (if any) to make sure the editor contents are put into 2145 the textarea when the form is submitted. The text in the 2146 textarea will provide the content for the editor. A CodeMirror 2147 instance created this way has three additional methods: 2148 <dl> 2149 <dt id="save"><code><strong>cm.save</strong>()</code></dt> 2150 <dd>Copy the content of the editor into the textarea.</dd> 2151 2152 <dt id="toTextArea"><code><strong>cm.toTextArea</strong>()</code></dt> 2153 <dd>Remove the editor, and restore the original textarea (with 2154 the editor's current content). If you dynamically create and 2155 destroy editors made with `fromTextArea`, without destroying 2156 the form they are part of, you should make sure to call 2157 `toTextArea` to remove the editor, or its `"submit"` handler 2158 on the form will cause a memory leak.</dd> 2159 2160 <dt id="getTextArea"><code><strong>cm.getTextArea</strong>() → TextAreaElement</code></dt> 2161 <dd>Returns the textarea that the instance was based on.</dd> 2162 </dl> 2163 </dd> 2164 2165 <dt id="defaults"><code><strong>CodeMirror.defaults</strong>: object</code></dt> 2166 <dd>An object containing default values for 2167 all <a href="#config">options</a>. You can assign to its 2168 properties to modify defaults (though this won't affect editors 2169 that have already been created).</dd> 2170 2171 <dt id="defineExtension"><code><strong>CodeMirror.defineExtension</strong>(name: string, value: any)</code></dt> 2172 <dd>If you want to define extra methods in terms of the 2173 CodeMirror API, it is possible to 2174 use <code>defineExtension</code>. This will cause the given 2175 value (usually a method) to be added to all CodeMirror instances 2176 created from then on.</dd> 2177 2178 <dt id="defineDocExtension"><code><strong>CodeMirror.defineDocExtension</strong>(name: string, value: any)</code></dt> 2179 <dd>Like <a href="#defineExtension"><code>defineExtension</code></a>, 2180 but the method will be added to the interface 2181 for <a href="#Doc"><code>Doc</code></a> objects instead.</dd> 2182 2183 <dt id="defineOption"><code><strong>CodeMirror.defineOption</strong>(name: string, 2184 default: any, updateFunc: function)</code></dt> 2185 <dd>Similarly, <code>defineOption</code> can be used to define new options for 2186 CodeMirror. The <code>updateFunc</code> will be called with the 2187 editor instance and the new value when an editor is initialized, 2188 and whenever the option is modified 2189 through <a href="#setOption"><code>setOption</code></a>.</dd> 2190 2191 <dt id="defineInitHook"><code><strong>CodeMirror.defineInitHook</strong>(func: function)</code></dt> 2192 <dd>If your extension just needs to run some 2193 code whenever a CodeMirror instance is initialized, 2194 use <code>CodeMirror.defineInitHook</code>. Give it a function as 2195 its only argument, and from then on, that function will be called 2196 (with the instance as argument) whenever a new CodeMirror instance 2197 is initialized.</dd> 2198 2199 <dt id="registerHelper"><code><strong>CodeMirror.registerHelper</strong>(type: string, name: string, value: helper)</code></dt> 2200 <dd>Registers a helper value with the given <code>name</code> in 2201 the given namespace (<code>type</code>). This is used to define 2202 functionality that may be looked up by mode. Will create (if it 2203 doesn't already exist) a property on the <code>CodeMirror</code> 2204 object for the given <code>type</code>, pointing to an object 2205 that maps names to values. I.e. after 2206 doing <code>CodeMirror.registerHelper("hint", "foo", 2207 myFoo)</code>, the value <code>CodeMirror.hint.foo</code> will 2208 point to <code>myFoo</code>.</dd> 2209 2210 <dt id="registerGlobalHelper"><code><strong>CodeMirror.registerGlobalHelper</strong>(type: string, name: string, predicate: fn(mode, CodeMirror), value: helper)</code></dt> 2211 <dd>Acts 2212 like <a href="#registerHelper"><code>registerHelper</code></a>, 2213 but also registers this helper as 'global', meaning that it will 2214 be included by <a href="#getHelpers"><code>getHelpers</code></a> 2215 whenever the given <code>predicate</code> returns true when 2216 called with the local mode and editor.</dd> 2217 2218 <dt id="Pos"><code><strong>CodeMirror.Pos</strong>(line: integer, ?ch: integer, ?sticky: string)</code></dt> 2219 <dd>A constructor for the objects that are used to represent 2220 positions in editor documents. <code>sticky</code> defaults to 2221 null, but can be set to <code>"before"</code> 2222 or <code>"after"</code> to make the position explicitly 2223 associate with the character before or after it.</dd> 2224 2225 <dt id="changeEnd"><code><strong>CodeMirror.changeEnd</strong>(change: object) → {line, ch}</code></dt> 2226 <dd>Utility function that computes an end position from a change 2227 (an object with <code>from</code>, <code>to</code>, 2228 and <code>text</code> properties, as passed to 2229 various <a href="#event_change">event handlers</a>). The 2230 returned position will be the end of the changed 2231 range, <em>after</em> the change is applied.</dd> 2232 2233 <dt id="countColumn"><code><strong>CodeMirror.countColumn</strong>(line: string, index: number, tabSize: number) → number</code></dt> 2234 <dd>Find the column position at a given string index using a given tabsize.</dd> 2235 </dl> 2236 </section> 2237 2238 <section id=addons> 2239 <h2 id="addons">Addons</h2> 2240 2241 <p>The <code>addon</code> directory in the distribution contains a 2242 number of reusable components that implement extra editor 2243 functionality (on top of extension functions 2244 like <a href="#defineOption"><code>defineOption</code></a>, <a href="#defineExtension"><code>defineExtension</code></a>, 2245 and <a href="#registerHelper"><code>registerHelper</code></a>). In 2246 brief, they are:</p> 2247 2248 <dl> 2249 <dt id="addon_dialog"><a href="../addon/dialog/dialog.js"><code>dialog/dialog.js</code></a></dt> 2250 <dd>Provides a very simple way to query users for text input. 2251 Adds the <strong><code>openDialog(template, callback, options) → 2252 closeFunction</code></strong> method to CodeMirror instances, 2253 which can be called with an HTML fragment or a detached DOM 2254 node that provides the prompt (should include an <code>input</code> 2255 or <code>button</code> tag), and a callback function that is called 2256 when the user presses enter. It returns a function <code>closeFunction</code> 2257 which, if called, will close the dialog immediately. 2258 <strong><code>openDialog</code></strong> takes the following options: 2259 <dl> 2260 <dt><code><strong>closeOnEnter</strong>: bool</code></dt> 2261 <dd>If true, the dialog will be closed when the user presses 2262 enter in the input. Defaults to <code>true</code>.</dd> 2263 <dt><code><strong>closeOnBlur</strong>: bool</code></dt> 2264 <dd>Determines whether the dialog is closed when it loses focus. Defaults to <code>true</code>.</dd> 2265 <dt><code><strong>onKeyDown</strong>: fn(event: KeyboardEvent, value: string, close: fn()) → bool</code></dt> 2266 <dd>An event handler that will be called whenever <code>keydown</code> fires in the 2267 dialog's input. If your callback returns <code>true</code>, 2268 the dialog will not do any further processing of the event.</dd> 2269 <dt><code><strong>onKeyUp</strong>: fn(event: KeyboardEvent, value: string, close: fn()) → bool</code></dt> 2270 <dd>Same as <code>onKeyDown</code> but for the 2271 <code>keyup</code> event.</dd> 2272 <dt><code><strong>onInput</strong>: fn(event: InputEvent, value: string, close: fn()) → bool</code></dt> 2273 <dd>Same as <code>onKeyDown</code> but for the 2274 <code>input</code> event.</dd> 2275 <dt><code><strong>onClose</strong>: fn(instance)</code>:</dt> 2276 <dd>A callback that will be called after the dialog has been closed and 2277 removed from the DOM. No return value.</dd> 2278 </dl> 2279 2280 <p>Also adds an <strong><code>openNotification(template, options) → 2281 closeFunction</code></strong> function that simply shows an HTML 2282 fragment as a notification at the top of the editor. It takes a 2283 single option: <code>duration</code>, the amount of time after 2284 which the notification will be automatically closed. If <code> 2285 duration</code> is zero, the dialog will not be closed automatically.</p> 2286 2287 <p>Depends on <code>addon/dialog/dialog.css</code>.</p></dd> 2288 2289 <dt id="addon_searchcursor"><a href="../addon/search/searchcursor.js"><code>search/searchcursor.js</code></a></dt> 2290 <dd>Adds the <code>getSearchCursor(query, start, options) → 2291 cursor</code> method to CodeMirror instances, which can be used 2292 to implement search/replace functionality. <code>query</code> 2293 can be a regular expression or a string. <code>start</code> 2294 provides the starting position of the search. It can be 2295 a <code>{line, ch}</code> object, or can be left off to default 2296 to the start of the document. <code>options</code> is an 2297 optional object, which can contain the property `caseFold: 2298 false` to disable case folding when mathing a string, or the 2299 property `multiline: disable` to disable multi-line matching for 2300 regular expressions (which may help performance). A search 2301 cursor has the following methods: 2302 <dl> 2303 <dt><code><strong>findNext</strong>() → boolean</code></dt> 2304 <dt><code><strong>findPrevious</strong>() → boolean</code></dt> 2305 <dd>Search forward or backward from the current position. 2306 The return value indicates whether a match was found. If 2307 matching a regular expression, the return value will be the 2308 array returned by the <code>match</code> method, in case you 2309 want to extract matched groups.</dd> 2310 <dt><code><strong>from</strong>() → {line, ch}</code></dt> 2311 <dt><code><strong>to</strong>() → {line, ch}</code></dt> 2312 <dd>These are only valid when the last call 2313 to <code>findNext</code> or <code>findPrevious</code> did 2314 not return false. They will return <code>{line, ch}</code> 2315 objects pointing at the start and end of the match.</dd> 2316 <dt><code><strong>replace</strong>(text: string, ?origin: string)</code></dt> 2317 <dd>Replaces the currently found match with the given text 2318 and adjusts the cursor position to reflect the 2319 replacement.</dd> 2320 </dl></dd> 2321 2322 <dt id="addon_search"><a href="../addon/search/search.js"><code>search/search.js</code></a></dt> 2323 <dd>Implements the search commands. CodeMirror has keys bound to 2324 these by default, but will not do anything with them unless an 2325 implementation is provided. Depends 2326 on <code>searchcursor.js</code>, and will make use 2327 of <a href="#addon_dialog"><code>openDialog</code></a> when 2328 available to make prompting for search queries less ugly.</dd> 2329 2330 <dt id="addon_jump-to-line"><a href="../addon/search/jump-to-line.js"><code>search/jump-to-line.js</code></a></dt> 2331 <dd>Implements a <code>jumpToLine</code> command and binding <code>Alt-G</code> to it. 2332 Accepts <code>linenumber</code>, <code>+/-linenumber</code>, <code>line:char</code>, 2333 <code>scroll%</code> and <code>:linenumber</code> formats. 2334 This will make use of <a href="#addon_dialog"><code>openDialog</code></a> 2335 when available to make prompting for line number neater.</dd> 2336 2337 <dt id="addon_matchesonscrollbar"><a href="../addon/search/matchesonscrollbar.js"><code>search/matchesonscrollbar.js</code></a></dt> 2338 <dd>Adds a <code>showMatchesOnScrollbar</code> method to editor 2339 instances, which should be given a query (string or regular 2340 expression), optionally a case-fold flag (only applicable for 2341 strings), and optionally a class name (defaults 2342 to <code>CodeMirror-search-match</code>) as arguments. When 2343 called, matches of the given query will be displayed on the 2344 editor's vertical scrollbar. The method returns an object with 2345 a <code>clear</code> method that can be called to remove the 2346 matches. Depends on 2347 the <a href="#addon_annotatescrollbar"><code>annotatescrollbar</code></a> 2348 addon, and 2349 the <a href="../addon/search/matchesonscrollbar.css"><code>matchesonscrollbar.css</code></a> 2350 file provides a default (transparent yellowish) definition of 2351 the CSS class applied to the matches. Note that the matches are 2352 only perfectly aligned if your scrollbar does not have buttons 2353 at the top and bottom. You can use 2354 the <a href="#addon_simplescrollbars"><code>simplescrollbar</code></a> 2355 addon to make sure of this. If this addon is loaded, 2356 the <a href="#addon_search"><code>search</code></a> addon will 2357 automatically use it.</dd> 2358 2359 <dt id="addon_matchbrackets"><a href="../addon/edit/matchbrackets.js"><code>edit/matchbrackets.js</code></a></dt> 2360 <dd>Defines an option <code>matchBrackets</code> which, when set 2361 to true or an options object, causes matching brackets to be 2362 highlighted whenever the cursor is next to them. It also adds a 2363 method <code>matchBrackets</code> that forces this to happen 2364 once, and a method <code>findMatchingBracket</code> that can be 2365 used to run the bracket-finding algorithm that this uses 2366 internally. It takes a start position and an optional config 2367 object. By default, it will find the match to a matchable 2368 character either before or after the cursor (preferring the one 2369 before), but you can control its behavior with these options: 2370 <dl> 2371 <dt><strong><code>afterCursor</code></strong></dt> 2372 <dd>Only use the character after the start position, never the one before it.</dd> 2373 <dt><strong><code>strict</code></strong></dt> 2374 <dd>Causes only matches where both brackets are at the same side of the start position to be considered.</dd> 2375 <dt><strong><code>maxScanLines</code></strong></dt> 2376 <dd>Stop after scanning this amount of lines without a successful match. Defaults to 1000.</dd> 2377 <dt><strong><code>maxScanLineLength</code></strong></dt> 2378 <dd>Ignore lines longer than this. Defaults to 10000.</dd> 2379 </dl></dd> 2380 2381 <dt id="addon_closebrackets"><a href="../addon/edit/closebrackets.js"><code>edit/closebrackets.js</code></a></dt> 2382 <dd>Defines an option <code>autoCloseBrackets</code> that will 2383 auto-close brackets and quotes when typed. By default, it'll 2384 auto-close <code>()[]{}''""</code>, but you can pass it a string 2385 similar to that (containing pairs of matching characters), or an 2386 object with <code>pairs</code> and 2387 optionally <code>explode</code> properties to customize 2388 it. <code>explode</code> should be a similar string that gives 2389 the pairs of characters that, when enter is pressed between 2390 them, should have the second character also moved to its own 2391 line. By default, if the active mode has 2392 a <code>closeBrackets</code> property, that overrides the 2393 configuration given in the option. But you can add 2394 an <code>override</code> property with a truthy value to 2395 override mode-specific 2396 configuration. <a href="../demo/closebrackets.html">Demo 2397 here</a>.</dd> 2398 2399 <dt id="addon_matchtags"><a href="../addon/edit/matchtags.js"><code>edit/matchtags.js</code></a></dt> 2400 <dd>Defines an option <code>matchTags</code> that, when enabled, 2401 will cause the tags around the cursor to be highlighted (using 2402 the <code>CodeMirror-matchingtag</code> class). Also 2403 defines 2404 a <a href="#commands">command</a> <code>toMatchingTag</code>, 2405 which you can bind a key to in order to jump to the tag matching 2406 the one under the cursor. Depends on 2407 the <code>addon/fold/xml-fold.js</code> 2408 addon. <a href="../demo/matchtags.html">Demo here.</a></dd> 2409 2410 <dt id="addon_trailingspace"><a href="../addon/edit/trailingspace.js"><code>edit/trailingspace.js</code></a></dt> 2411 <dd>Adds an option <code>showTrailingSpace</code> which, when 2412 enabled, adds the CSS class <code>cm-trailingspace</code> to 2413 stretches of whitespace at the end of lines. 2414 The <a href="../demo/trailingspace.html">demo</a> has a nice 2415 squiggly underline style for this class.</dd> 2416 2417 <dt id="addon_closetag"><a href="../addon/edit/closetag.js"><code>edit/closetag.js</code></a></dt> 2418 <dd>Defines an <code>autoCloseTags</code> option that will 2419 auto-close XML tags when '<code>&gt;</code>' or '<code>/</code>' 2420 is typed, and 2421 a <code>closeTag</code> <a href="#commands">command</a> that 2422 closes the nearest open tag. Depends on 2423 the <code>fold/xml-fold.js</code> addon. See 2424 the <a href="../demo/closetag.html">demo</a>.</dd> 2425 2426 <dt id="addon_continuelist"><a href="../addon/edit/continuelist.js"><code>edit/continuelist.js</code></a></dt> 2427 <dd>Markdown specific. Defines 2428 a <code>"newlineAndIndentContinueMarkdownList"</code> <a href="#commands">command</a> 2429 that can be bound to <code>enter</code> to automatically 2430 insert the leading characters for continuing a list. See 2431 the <a href="../mode/markdown/index.html">Markdown mode 2432 demo</a>.</dd> 2433 2434 <dt id="addon_comment"><a href="../addon/comment/comment.js"><code>comment/comment.js</code></a></dt> 2435 <dd>Addon for commenting and uncommenting code. Adds four 2436 methods to CodeMirror instances: 2437 <dl> 2438 <dt id="toggleComment"><code><strong>toggleComment</strong>(from: {line, ch}, to: {line, ch}, ?options: object)</code></dt> 2439 <dd>Tries to uncomment the current selection, and if that 2440 fails, line-comments it.</dd> 2441 <dt id="lineComment"><code><strong>lineComment</strong>(from: {line, ch}, to: {line, ch}, ?options: object)</code></dt> 2442 <dd>Set the lines in the given range to be line comments. Will 2443 fall back to <code>blockComment</code> when no line comment 2444 style is defined for the mode.</dd> 2445 <dt id="blockComment"><code><strong>blockComment</strong>(from: {line, ch}, to: {line, ch}, ?options: object)</code></dt> 2446 <dd>Wrap the code in the given range in a block comment. Will 2447 fall back to <code>lineComment</code> when no block comment 2448 style is defined for the mode.</dd> 2449 <dt id="uncomment"><code><strong>uncomment</strong>(from: {line, ch}, to: {line, ch}, ?options: object) → boolean</code></dt> 2450 <dd>Try to uncomment the given range. 2451 Returns <code>true</code> if a comment range was found and 2452 removed, <code>false</code> otherwise.</dd> 2453 </dl> 2454 The <code>options</code> object accepted by these methods may 2455 have the following properties: 2456 <dl> 2457 <dt><code>blockCommentStart, blockCommentEnd, blockCommentLead, lineComment: string</code></dt> 2458 <dd>Override the <a href="#mode_comment">comment string 2459 properties</a> of the mode with custom comment strings.</dd> 2460 <dt><code><strong>padding</strong>: string</code></dt> 2461 <dd>A string that will be inserted after opening and leading 2462 markers, and before closing comment markers. Defaults to a 2463 single space.</dd> 2464 <dt><code><strong>commentBlankLines</strong>: boolean</code></dt> 2465 <dd>Whether, when adding line comments, to also comment lines 2466 that contain only whitespace.</dd> 2467 <dt><code><strong>indent</strong>: boolean</code></dt> 2468 <dd>When adding line comments and this is turned on, it will 2469 align the comment block to the current indentation of the 2470 first line of the block.</dd> 2471 <dt><code><strong>fullLines</strong>: boolean</code></dt> 2472 <dd>When block commenting, this controls whether the whole 2473 lines are indented, or only the precise range that is given. 2474 Defaults to <code>true</code>.</dd> 2475 </dl> 2476 The addon also defines 2477 a <code>toggleComment</code> <a href="#commands">command</a>, 2478 which is a shorthand command for calling 2479 <code>toggleComment</code> with no options.</dd> 2480 2481 <dt id="addon_foldcode"><a href="../addon/fold/foldcode.js"><code>fold/foldcode.js</code></a></dt> 2482 <dd>Helps with code folding. Adds a <code>foldCode</code> method 2483 to editor instances, which will try to do a code fold starting 2484 at the given line, or unfold the fold that is already present. 2485 The method takes as first argument the position that should be 2486 folded (may be a line number or 2487 a <a href="#Pos"><code>Pos</code></a>), and as second optional 2488 argument either a range-finder function, or an options object, 2489 supporting the following properties: 2490 <dl> 2491 <dt><code><strong>rangeFinder</strong>: fn(CodeMirror, Pos)</code></dt> 2492 <dd id="helper_fold_auto">The function that is used to find 2493 foldable ranges. If this is not directly passed, it will 2494 default to <code>CodeMirror.fold.auto</code>, which 2495 uses <a href="#getHelpers"><code>getHelpers</code></a> with 2496 a <code>"fold"</code> type to find folding functions 2497 appropriate for the local mode. There are files in 2498 the <a href="../addon/fold/"><code>addon/fold/</code></a> 2499 directory providing <code>CodeMirror.fold.brace</code>, which 2500 finds blocks in brace languages (JavaScript, C, Java, 2501 etc), <code>CodeMirror.fold.indent</code>, for languages where 2502 indentation determines block structure (Python, Haskell), 2503 and <code>CodeMirror.fold.xml</code>, for XML-style languages, 2504 and <code>CodeMirror.fold.comment</code>, for folding comment 2505 blocks.</dd> 2506 <dt><code><strong>widget</strong>: string|Element</code></dt> 2507 <dd>The widget to show for folded ranges. Can be either a 2508 string, in which case it'll become a span with 2509 class <code>CodeMirror-foldmarker</code>, or a DOM node.</dd> 2510 <dt><code><strong>scanUp</strong>: boolean</code></dt> 2511 <dd>When true (default is false), the addon will try to find 2512 foldable ranges on the lines above the current one if there 2513 isn't an eligible one on the given line.</dd> 2514 <dt><code><strong>minFoldSize</strong>: integer</code></dt> 2515 <dd>The minimum amount of lines that a fold should span to be 2516 accepted. Defaults to 0, which also allows single-line 2517 folds.</dd> 2518 </dl> 2519 See <a href="../demo/folding.html">the demo</a> for an 2520 example.</dd> 2521 2522 <dt id="addon_foldgutter"><a href="../addon/fold/foldgutter.js"><code>fold/foldgutter.js</code></a></dt> 2523 <dd>Provides an option <code>foldGutter</code>, which can be 2524 used to create a gutter with markers indicating the blocks that 2525 can be folded. Create a gutter using 2526 the <a href="#option_gutters"><code>gutters</code></a> option, 2527 giving it the class <code>CodeMirror-foldgutter</code> or 2528 something else if you configure the addon to use a different 2529 class, and this addon will show markers next to folded and 2530 foldable blocks, and handle clicks in this gutter. Note that 2531 CSS styles should be applied to make the gutter, and the fold 2532 markers within it, visible. A default set of CSS styles are 2533 available in: 2534 <a href="../addon/fold/foldgutter.css"> 2535 <code>addon/fold/foldgutter.css</code> 2536 </a>. 2537 The option 2538 can be either set to <code>true</code>, or an object containing 2539 the following optional option fields: 2540 <dl> 2541 <dt><code><strong>gutter</strong>: string</code></dt> 2542 <dd>The CSS class of the gutter. Defaults 2543 to <code>"CodeMirror-foldgutter"</code>. You will have to 2544 style this yourself to give it a width (and possibly a 2545 background). See the default gutter style rules above.</dd> 2546 <dt><code><strong>indicatorOpen</strong>: string | Element</code></dt> 2547 <dd>A CSS class or DOM element to be used as the marker for 2548 open, foldable blocks. Defaults 2549 to <code>"CodeMirror-foldgutter-open"</code>.</dd> 2550 <dt><code><strong>indicatorFolded</strong>: string | Element</code></dt> 2551 <dd>A CSS class or DOM element to be used as the marker for 2552 folded blocks. Defaults to <code>"CodeMirror-foldgutter-folded"</code>.</dd> 2553 <dt><code><strong>rangeFinder</strong>: fn(CodeMirror, Pos)</code></dt> 2554 <dd>The range-finder function to use when determining whether 2555 something can be folded. When not 2556 given, <a href="#helper_fold_auto"><code>CodeMirror.fold.auto</code></a> 2557 will be used as default.</dd> 2558 </dl> 2559 The <code>foldOptions</code> editor option can be set to an 2560 object to provide an editor-wide default configuration. 2561 Demo <a href="../demo/folding.html">here</a>.</dd> 2562 2563 <dt id="addon_runmode"><a href="../addon/runmode/runmode.js"><code>runmode/runmode.js</code></a></dt> 2564 <dd>Can be used to run a CodeMirror mode over text without 2565 actually opening an editor instance. 2566 See <a href="../demo/runmode.html">the demo</a> for an example. 2567 There are alternate versions of the file available for 2568 running <a href="../addon/runmode/runmode-standalone.js">stand-alone</a> 2569 (without including all of CodeMirror) and 2570 for <a href="../addon/runmode/runmode.node.js">running under 2571 node.js</a> (see <code>bin/source-highlight</code> for an example of using the latter).</dd> 2572 2573 <dt id="addon_colorize"><a href="../addon/runmode/colorize.js"><code>runmode/colorize.js</code></a></dt> 2574 <dd>Provides a convenient way to syntax-highlight code snippets 2575 in a webpage. Depends on 2576 the <a href="#addon_runmode"><code>runmode</code></a> addon (or 2577 its standalone variant). Provides 2578 a <code>CodeMirror.colorize</code> function that can be called 2579 with an array (or other array-ish collection) of DOM nodes that 2580 represent the code snippets. By default, it'll get 2581 all <code>pre</code> tags. Will read the <code>data-lang</code> 2582 attribute of these nodes to figure out their language, and 2583 syntax-color their content using the relevant CodeMirror mode 2584 (you'll have to load the scripts for the relevant modes 2585 yourself). A second argument may be provided to give a default 2586 mode, used when no language attribute is found for a node. Used 2587 in this manual to highlight example code.</dd> 2588 2589 <dt id="addon_overlay"><a href="../addon/mode/overlay.js"><code>mode/overlay.js</code></a></dt> 2590 <dd>Mode combinator that can be used to extend a mode with an 2591 'overlay' — a secondary mode is run over the stream, along with 2592 the base mode, and can color specific pieces of text without 2593 interfering with the base mode. 2594 Defines <code>CodeMirror.overlayMode</code>, which is used to 2595 create such a mode. See <a href="../demo/mustache.html">this 2596 demo</a> for a detailed example.</dd> 2597 2598 <dt id="addon_multiplex"><a href="../addon/mode/multiplex.js"><code>mode/multiplex.js</code></a></dt> 2599 <dd>Mode combinator that can be used to easily 'multiplex' 2600 between several modes. 2601 Defines <code>CodeMirror.multiplexingMode</code> which, when 2602 given as first argument a mode object, and as other arguments 2603 any number of <code>{open, close, mode [, delimStyle, innerStyle, parseDelimiters]}</code> 2604 objects, will return a mode object that starts parsing using the 2605 mode passed as first argument, but will switch to another mode 2606 as soon as it encounters a string that occurs in one of 2607 the <code>open</code> fields of the passed objects. When in a 2608 sub-mode, it will go back to the top mode again when 2609 the <code>close</code> string is encountered. 2610 Pass <code>"\n"</code> for <code>open</code> or <code>close</code> 2611 if you want to switch on a blank line. 2612 <ul><li>When <code>delimStyle</code> is specified, it will be the token 2613 style returned for the delimiter tokens (as well as 2614 <code>[delimStyle]-open</code> on the opening token and 2615 <code>[delimStyle]-close</code> on the closing token).</li> 2616 <li>When <code>innerStyle</code> is specified, it will be the token 2617 style added for each inner mode token.</li> 2618 <li>When <code>parseDelimiters</code> is true, the content of 2619 the delimiters will also be passed to the inner mode. 2620 (And <code>delimStyle</code> is ignored.)</li></ul> The outer 2621 mode will not see the content between the delimiters. 2622 See <a href="../demo/multiplex.html">this demo</a> for an 2623 example.</dd> 2624 2625 <dt id="addon_show-hint"><a href="../addon/hint/show-hint.js"><code>hint/show-hint.js</code></a></dt> 2626 <dd>Provides a framework for showing autocompletion hints. 2627 Defines <code>editor.showHint</code>, which takes an optional 2628 options object, and pops up a widget that allows the user to 2629 select a completion. Finding hints is done with a hinting 2630 functions (the <code>hint</code> option), which is a function 2631 that take an editor instance and options object, and return 2632 a <code>{list, from, to}</code> object, where <code>list</code> 2633 is an array of strings or objects (the completions), 2634 and <code>from</code> and <code>to</code> give the start and end 2635 of the token that is being completed as <code>{line, ch}</code> 2636 objects. An optional <code>selectedHint</code> property (an 2637 integer) can be added to the completion object to control the 2638 initially selected hint.</dd> 2639 <dd>If no hinting function is given, the addon will 2640 use <code>CodeMirror.hint.auto</code>, which 2641 calls <a href="#getHelpers"><code>getHelpers</code></a> with 2642 the <code>"hint"</code> type to find applicable hinting 2643 functions, and tries them one by one. If that fails, it looks 2644 for a <code>"hintWords"</code> helper to fetch a list of 2645 completable words for the mode, and 2646 uses <code>CodeMirror.hint.fromList</code> to complete from 2647 those.</dd> 2648 <dd>When completions aren't simple strings, they should be 2649 objects with the following properties: 2650 <dl> 2651 <dt><code><strong>text</strong>: string</code></dt> 2652 <dd>The completion text. This is the only required 2653 property.</dd> 2654 <dt><code><strong>displayText</strong>: string</code></dt> 2655 <dd>The text that should be displayed in the menu.</dd> 2656 <dt><code><strong>className</strong>: string</code></dt> 2657 <dd>A CSS class name to apply to the completion's line in the 2658 menu.</dd> 2659 <dt><code><strong>render</strong>: fn(Element, self, data)</code></dt> 2660 <dd>A method used to create the DOM structure for showing the 2661 completion by appending it to its first argument.</dd> 2662 <dt><code><strong>hint</strong>: fn(CodeMirror, self, data)</code></dt> 2663 <dd>A method used to actually apply the completion, instead of 2664 the default behavior.</dd> 2665 <dt><code><strong>from</strong>: {line, ch}</code></dt> 2666 <dd>Optional <code>from</code> position that will be used by <code>pick()</code> instead 2667 of the global one passed with the full list of completions.</dd> 2668 <dt><code><strong>to</strong>: {line, ch}</code></dt> 2669 <dd>Optional <code>to</code> position that will be used by <code>pick()</code> instead 2670 of the global one passed with the full list of completions.</dd> 2671 </dl></dd> 2672 2673 <dd>The plugin understands the following options, which may be 2674 either passed directly in the argument to <code>showHint</code>, 2675 or provided by setting an <code>hintOptions</code> editor 2676 option to an object (the former takes precedence). The options 2677 object will also be passed along to the hinting function, which 2678 may understand additional options. 2679 <dl> 2680 <dt><code><strong>hint</strong>: function</code></dt> 2681 <dd>A hinting function, as specified above. It is possible to 2682 set the <code>async</code> property on a hinting function to 2683 true, in which case it will be called with 2684 arguments <code>(cm, callback, ?options)</code>, and the 2685 completion interface will only be popped up when the hinting 2686 function calls the callback, passing it the object holding the 2687 completions. 2688 The hinting function can also return a promise, and the completion 2689 interface will only be popped when the promise resolves. 2690 By default, hinting only works when there is no 2691 selection. You can give a hinting function 2692 a <code>supportsSelection</code> property with a truthy value 2693 to indicate that it supports selections.</dd> 2694 <dt><code><strong>completeSingle</strong>: boolean</code></dt> 2695 <dd>Determines whether, when only a single completion is 2696 available, it is completed without showing the dialog. 2697 Defaults to true.</dd> 2698 <dt><code><strong>alignWithWord</strong>: boolean</code></dt> 2699 <dd>Whether the pop-up should be horizontally aligned with the 2700 start of the word (true, default), or with the cursor (false).</dd> 2701 <dt><code><strong>closeOnUnfocus</strong>: boolean</code></dt> 2702 <dd>When enabled (which is the default), the pop-up will close 2703 when the editor is unfocused.</dd> 2704 <dt><code><strong>customKeys</strong>: keymap</code></dt> 2705 <dd>Allows you to provide a custom key map of keys to be active 2706 when the pop-up is active. The handlers will be called with an 2707 extra argument, a handle to the completion menu, which 2708 has <code>moveFocus(n)</code>, <code>setFocus(n)</code>, <code>pick()</code>, 2709 and <code>close()</code> methods (see the source for details), 2710 that can be used to change the focused element, pick the 2711 current element or close the menu. Additionally <code>menuSize()</code> 2712 can give you access to the size of the current dropdown menu, 2713 <code>length</code> give you the number of available completions, and 2714 <code>data</code> give you full access to the completion returned by the 2715 hinting function.</dd> 2716 <dt><code><strong>extraKeys</strong>: keymap</code></dt> 2717 <dd>Like <code>customKeys</code> above, but the bindings will 2718 be added to the set of default bindings, instead of replacing 2719 them.</dd> 2720 </dl> 2721 The following events will be fired on the completions object 2722 during completion: 2723 <dl> 2724 <dt><code><strong>"shown"</strong> ()</code></dt> 2725 <dd>Fired when the pop-up is shown.</dd> 2726 <dt><code><strong>"select"</strong> (completion, Element)</code></dt> 2727 <dd>Fired when a completion is selected. Passed the completion 2728 value (string or object) and the DOM node that represents it 2729 in the menu.</dd> 2730 <dt><code><strong>"pick"</strong> (completion)</code></dt> 2731 <dd>Fired when a completion is picked. Passed the completion value 2732 (string or object).</dd> 2733 <dt><code><strong>"close"</strong> ()</code></dt> 2734 <dd>Fired when the completion is finished.</dd> 2735 </dl> 2736 This addon depends on styles 2737 from <code>addon/hint/show-hint.css</code>. Check 2738 out <a href="../demo/complete.html">the demo</a> for an 2739 example.</dd> 2740 2741 <dt id="addon_javascript-hint"><a href="../addon/hint/javascript-hint.js"><code>hint/javascript-hint.js</code></a></dt> 2742 <dd>Defines a simple hinting function for JavaScript 2743 (<code>CodeMirror.hint.javascript</code>) and CoffeeScript 2744 (<code>CodeMirror.hint.coffeescript</code>) code. This will 2745 simply use the JavaScript environment that the editor runs in as 2746 a source of information about objects and their properties.</dd> 2747 2748 <dt id="addon_xml-hint"><a href="../addon/hint/xml-hint.js"><code>hint/xml-hint.js</code></a></dt> 2749 <dd>Defines <code>CodeMirror.hint.xml</code>, which produces 2750 hints for XML tagnames, attribute names, and attribute values, 2751 guided by a <code>schemaInfo</code> option (a property of the 2752 second argument passed to the hinting function, or the third 2753 argument passed to <code>CodeMirror.showHint</code>).<br>The 2754 schema info should be an object mapping tag names to information 2755 about these tags, with optionally a <code>"!top"</code> property 2756 containing a list of the names of valid top-level tags. The 2757 values of the properties should be objects with optional 2758 properties <code>children</code> (an array of valid child 2759 element names, omit to simply allow all tags to appear) 2760 and <code>attrs</code> (an object mapping attribute names 2761 to <code>null</code> for free-form attributes, and an array of 2762 valid values for restricted 2763 attributes). <a href="../demo/xmlcomplete.html">Demo 2764 here.</a></dd> 2765 2766 <dt id="addon_html-hint"><a href="../addon/hint/html-hint.js"><code>hint/html-hint.js</code></a></dt> 2767 <dd>Provides schema info to 2768 the <a href="#addon_xml-hint">xml-hint</a> addon for HTML 2769 documents. Defines a schema 2770 object <code>CodeMirror.htmlSchema</code> that you can pass to 2771 as a <code>schemaInfo</code> option, and 2772 a <code>CodeMirror.hint.html</code> hinting function that 2773 automatically calls <code>CodeMirror.hint.xml</code> with this 2774 schema data. See 2775 the <a href="../demo/html5complete.html">demo</a>.</dd> 2776 2777 <dt id="addon_css-hint"><a href="../addon/hint/css-hint.js"><code>hint/css-hint.js</code></a></dt> 2778 <dd>A hinting function for CSS, SCSS, or LESS code. 2779 Defines <code>CodeMirror.hint.css</code>.</dd> 2780 2781 <dt id="addon_anyword-hint"><a href="../addon/hint/anyword-hint.js"><code>hint/anyword-hint.js</code></a></dt> 2782 <dd>A very simple hinting function 2783 (<code>CodeMirror.hint.anyword</code>) that simply looks for 2784 words in the nearby code and completes to those. Takes two 2785 optional options, <code>word</code>, a regular expression that 2786 matches words (sequences of one or more character), 2787 and <code>range</code>, which defines how many lines the addon 2788 should scan when completing (defaults to 500).</dd> 2789 2790 <dt id="addon_sql-hint"><a href="../addon/hint/sql-hint.js"><code>hint/sql-hint.js</code></a></dt> 2791 <dd>A simple SQL hinter. Defines <code>CodeMirror.hint.sql</code>. 2792 Takes two optional options, <code>tables</code>, a object with 2793 table names as keys and array of respective column names as values, 2794 and <code>defaultTable</code>, a string corresponding to a 2795 table name in <code>tables</code> for autocompletion.</dd> 2796 2797 <dt id="addon_match-highlighter"><a href="../addon/search/match-highlighter.js"><code>search/match-highlighter.js</code></a></dt> 2798 <dd>Adds a <code>highlightSelectionMatches</code> option that 2799 can be enabled to highlight all instances of a currently 2800 selected word. Can be set either to true or to an object 2801 containing the following options: <code>minChars</code>, for the 2802 minimum amount of selected characters that triggers a highlight 2803 (default 2), <code>style</code>, for the style to be used to 2804 highlight the matches (default <code>"matchhighlight"</code>, 2805 which will correspond to CSS 2806 class <code>cm-matchhighlight</code>), <code>trim</code>, which 2807 controls whether whitespace is trimmed from the selection, 2808 and <code>showToken</code> which can be set to <code>true</code> 2809 or to a regexp matching the characters that make up a word. When 2810 enabled, it causes the current word to be highlighted when 2811 nothing is selected (defaults to off). 2812 Demo <a href="../demo/matchhighlighter.html">here</a>.</dd> 2813 2814 <dt id="addon_lint"><a href="../addon/lint/lint.js"><code>lint/lint.js</code></a></dt> 2815 <dd>Defines an interface component for showing linting warnings, 2816 with pluggable warning sources 2817 (see <a href="../addon/lint/html-lint.js"><code>html-lint.js</code></a>, 2818 <a href="../addon/lint/json-lint.js"><code>json-lint.js</code></a>, 2819 <a href="../addon/lint/javascript-lint.js"><code>javascript-lint.js</code></a>, 2820 <a href="../addon/lint/coffeescript-lint.js"><code>coffeescript-lint.js</code></a>, 2821 and <a href="../addon/lint/css-lint.js"><code>css-lint.js</code></a> 2822 in the same directory). Defines a <code>lint</code> option that 2823 can be set to an annotation source (for 2824 example <code>CodeMirror.lint.javascript</code>), to an options 2825 object (in which case the <code>getAnnotations</code> field is 2826 used as annotation source), or simply to <code>true</code>. When 2827 no annotation source is 2828 specified, <a href="#getHelper"><code>getHelper</code></a> with 2829 type <code>"lint"</code> is used to find an annotation function. 2830 An annotation source function should, when given a document 2831 string, an options object, and an editor instance, return an 2832 array of <code>{message, severity, from, to}</code> objects 2833 representing problems. When the function has 2834 an <code>async</code> property with a truthy value, it will be 2835 called with an additional second argument, which is a callback 2836 to pass the array to. 2837 The linting function can also return a promise, in that case the linter 2838 will only be executed when the promise resolves. 2839 By default, the linter will run (debounced) whenever the document is changed. 2840 You can pass a <code>lintOnChange: false</code> option to disable that. 2841 Depends on <code>addon/lint/lint.css</code>. A demo can be 2842 found <a href="../demo/lint.html">here</a>.</dd> 2843 2844 <dt id="addon_mark-selection"><a href="../addon/selection/mark-selection.js"><code>selection/mark-selection.js</code></a></dt> 2845 <dd>Causes the selected text to be marked with the CSS class 2846 <code>CodeMirror-selectedtext</code> when the <code>styleSelectedText</code> option 2847 is enabled. Useful to change the colour of the selection (in addition to the background), 2848 like in <a href="../demo/markselection.html">this demo</a>.</dd> 2849 2850 <dt id="addon_active-line"><a href="../addon/selection/active-line.js"><code>selection/active-line.js</code></a></dt> 2851 <dd>Defines a <code>styleActiveLine</code> option that, when 2852 enabled, gives the wrapper of the line that contains the cursor 2853 the class <code>CodeMirror-activeline</code>, adds a background 2854 with the class <code>CodeMirror-activeline-background</code>, 2855 and adds the class <code>CodeMirror-activeline-gutter</code> to 2856 the line's gutter space is enabled. The option's value may be a 2857 boolean or an object specifying the following options: 2858 <dl> 2859 <dt><code><strong>nonEmpty</strong>: bool</code></dt> 2860 <dd>Controls whether single-line selections, or just cursor 2861 selections, are styled. Defaults to false (only cursor 2862 selections).</dd> 2863 </dl> 2864 See the <a href="../demo/activeline.html">demo</a>.</dd> 2865 2866 <dt id="addon_selection-pointer"><a href="../addon/selection/selection-pointer.js"><code>selection/selection-pointer.js</code></a></dt> 2867 <dd>Defines a <code>selectionPointer</code> option which you can 2868 use to control the mouse cursor appearance when hovering over 2869 the selection. It can be set to a string, 2870 like <code>"pointer"</code>, or to true, in which case 2871 the <code>"default"</code> (arrow) cursor will be used. You can 2872 see a demo <a href="../mode/htmlmixed/index.html">here</a>.</dd> 2873 2874 <dt id="addon_loadmode"><a href="../addon/mode/loadmode.js"><code>mode/loadmode.js</code></a></dt> 2875 <dd>Defines a <code>CodeMirror.requireMode(modename, 2876 callback)</code> function that will try to load a given mode and 2877 call the callback when it succeeded. You'll have to 2878 set <code>CodeMirror.modeURL</code> to a string that mode paths 2879 can be constructed from, for 2880 example <code>"mode/%N/%N.js"</code>—the <code>%N</code>'s will 2881 be replaced with the mode name. Also 2882 defines <code>CodeMirror.autoLoadMode(instance, mode)</code>, 2883 which will ensure the given mode is loaded and cause the given 2884 editor instance to refresh its mode when the loading 2885 succeeded. See the <a href="../demo/loadmode.html">demo</a>.</dd> 2886 2887 <dt id="addon_meta"><a href="../mode/meta.js"><code>mode/meta.js</code></a></dt> 2888 <dd>Provides meta-information about all the modes in the 2889 distribution in a single file. 2890 Defines <code>CodeMirror.modeInfo</code>, an array of objects 2891 with <code>{name, mime, mode}</code> properties, 2892 where <code>name</code> is the human-readable 2893 name, <code>mime</code> the MIME type, and <code>mode</code> the 2894 name of the mode file that defines this MIME. There are optional 2895 properties <code>mimes</code>, which holds an array of MIME 2896 types for modes with multiple MIMEs associated, 2897 and <code>ext</code>, which holds an array of file extensions 2898 associated with this mode. Four convenience 2899 functions, <code>CodeMirror.findModeByMIME</code>, 2900 <code>CodeMirror.findModeByExtension</code>, 2901 <code>CodeMirror.findModeByFileName</code> 2902 and <code>CodeMirror.findModeByName</code> are provided, which 2903 return such an object given a MIME, extension, file name or mode name 2904 string. Note that, for historical reasons, this file resides in the 2905 top-level <code>mode</code> directory, not 2906 under <code>addon</code>. <a href="../demo/loadmode.html">Demo</a>.</dd> 2907 2908 <dt id="addon_continuecomment"><a href="../addon/comment/continuecomment.js"><code>comment/continuecomment.js</code></a></dt> 2909 <dd>Adds a <code>continueComments</code> option, which sets whether the 2910 editor will make the next line continue a comment when you press Enter 2911 inside a comment block. Can be set to a boolean to enable/disable this 2912 functionality. Set to a string, it will continue comments using a custom 2913 shortcut. Set to an object, it will use the <code>key</code> property for 2914 a custom shortcut and the boolean <code>continueLineComment</code> 2915 property to determine whether single-line comments should be continued 2916 (defaulting to <code>true</code>).</dd> 2917 2918 <dt id="addon_placeholder"><a href="../addon/display/placeholder.js"><code>display/placeholder.js</code></a></dt> 2919 <dd>Adds a <code>placeholder</code> option that can be used to 2920 make content appear in the editor when it is empty and not 2921 focused. It can hold either a string or a DOM node. Also gives 2922 the editor a <code>CodeMirror-empty</code> CSS class whenever it 2923 doesn't contain any text. 2924 See <a href="../demo/placeholder.html">the demo</a>.</dd> 2925 2926 <dt id="addon_fullscreen"><a href="../addon/display/fullscreen.js"><code>display/fullscreen.js</code></a></dt> 2927 <dd>Defines an option <code>fullScreen</code> that, when set 2928 to <code>true</code>, will make the editor full-screen (as in, 2929 taking up the whole browser window). Depends 2930 on <a href="../addon/display/fullscreen.css"><code>fullscreen.css</code></a>. <a href="../demo/fullscreen.html">Demo 2931 here</a>.</dd> 2932 2933 <dt id="addon_autorefresh"><a href="../addon/display/autorefresh.js"><code>display/autorefresh.js</code></a></dt> 2934 <dd>This addon can be useful when initializing an editor in a 2935 hidden DOM node, in cases where it is difficult to 2936 call <a href="#refresh"><code>refresh</code></a> when the editor 2937 becomes visible. It defines an option <code>autoRefresh</code> 2938 which you can set to true to ensure that, if the editor wasn't 2939 visible on initialization, it will be refreshed the first time 2940 it becomes visible. This is done by polling every 250 2941 milliseconds (you can pass a value like <code>{delay: 2942 500}</code> as the option value to configure this). Note that 2943 this addon will only refresh the editor <em>once</em> when it 2944 first becomes visible, and won't take care of further restyling 2945 and resizing.</dd> 2946 2947 <dt id="addon_simplescrollbars"><a href="../addon/scroll/simplescrollbars.js"><code>scroll/simplescrollbars.js</code></a></dt> 2948 <dd>Defines two additional scrollbar 2949 models, <code>"simple"</code> and <code>"overlay"</code> 2950 (see <a href="../demo/simplescrollbars.html">demo</a>) that can 2951 be selected with 2952 the <a href="#option_scrollbarStyle"><code>scrollbarStyle</code></a> 2953 option. Depends 2954 on <a href="../addon/scroll/simplescrollbars.css"><code>simplescrollbars.css</code></a>, 2955 which can be further overridden to style your own 2956 scrollbars.</dd> 2957 2958 <dt id="addon_annotatescrollbar"><a href="../addon/scroll/annotatescrollbar.js"><code>scroll/annotatescrollbar.js</code></a></dt> 2959 <dd>Provides functionality for showing markers on the scrollbar 2960 to call out certain parts of the document. Adds a 2961 method <code>annotateScrollbar</code> to editor instances that 2962 can be called, with a CSS class name as argument, to create a 2963 set of annotations. The method returns an object 2964 whose <code>update</code> method can be called with a sorted array 2965 of <code>{from: Pos, to: Pos}</code> objects marking the ranges 2966 to be highlighted. To detach the annotations, call the 2967 object's <code>clear</code> method.</dd> 2968 2969 <dt id="addon_rulers"><a href="../addon/display/rulers.js"><code>display/rulers.js</code></a></dt> 2970 <dd>Adds a <code>rulers</code> option, which can be used to show 2971 one or more vertical rulers in the editor. The option, if 2972 defined, should be given an array of <code>{column [, className, 2973 color, lineStyle, width]}</code> objects or numbers (which 2974 indicate a column). The ruler will be displayed at the column 2975 indicated by the number or the <code>column</code> property. 2976 The <code>className</code> property can be used to assign a 2977 custom style to a ruler. <a href="../demo/rulers.html">Demo 2978 here</a>.</dd> 2979 2980 <dt id="addon_panel"><a href="../addon/display/panel.js"><code>display/panel.js</code></a></dt> 2981 <dd>Defines an <code>addPanel</code> method for CodeMirror 2982 instances, which places a DOM node above or below an editor, and 2983 shrinks the editor to make room for the node. The method takes 2984 as first argument as DOM node, and as second an optional options 2985 object. The <code>Panel</code> object returned by this method 2986 has a <code>clear</code> method that is used to remove the 2987 panel, and a <code>changed</code> method that can be used to 2988 notify the addon when the size of the panel's DOM node has 2989 changed.<br/> 2990 The method accepts the following options: 2991 <dl> 2992 <dt><code><strong>position</strong>: string</code></dt> 2993 <dd>Controls the position of the newly added panel. The 2994 following values are recognized: 2995 <dl> 2996 <dt><code><strong>top</strong> (default)</code></dt> 2997 <dd>Adds the panel at the very top.</dd> 2998 <dt><code><strong>after-top</strong></code></dt> 2999 <dd>Adds the panel at the bottom of the top panels.</dd> 3000 <dt><code><strong>bottom</strong></code></dt> 3001 <dd>Adds the panel at the very bottom.</dd> 3002 <dt><code><strong>before-bottom</strong></code></dt> 3003 <dd>Adds the panel at the top of the bottom panels.</dd> 3004 </dl> 3005 </dd> 3006 <dt><code><strong>before</strong>: Panel</code></dt> 3007 <dd>The new panel will be added before the given panel.</dd> 3008 <dt><code><strong>after</strong>: Panel</code></dt> 3009 <dd>The new panel will be added after the given panel.</dd> 3010 <dt><code><strong>replace</strong>: Panel</code></dt> 3011 <dd>The new panel will replace the given panel.</dd> 3012 <dt><code><strong>stable</strong>: bool</code></dt> 3013 <dd>Whether to scroll the editor to keep the text's vertical 3014 position stable, when adding a panel above it. Defaults to false.</dd> 3015 </dl> 3016 When using the <code>after</code>, <code>before</code> or <code>replace</code> options, 3017 if the panel doesn't exists or has been removed, 3018 the value of the <code>position</code> option will be used as a fallback. 3019 <br> 3020 A demo of the addon is available <a href="../demo/panel.html">here</a>. 3021 </dd> 3022 3023 <dt id="addon_hardwrap"><a href="../addon/wrap/hardwrap.js"><code>wrap/hardwrap.js</code></a></dt> 3024 <dd>Addon to perform hard line wrapping/breaking for paragraphs 3025 of text. Adds these methods to editor instances: 3026 <dl> 3027 <dt><code><strong>wrapParagraph</strong>(?pos: {line, ch}, ?options: object)</code></dt> 3028 <dd>Wraps the paragraph at the given position. 3029 If <code>pos</code> is not given, it defaults to the cursor 3030 position.</dd> 3031 <dt><code><strong>wrapRange</strong>(from: {line, ch}, to: {line, ch}, ?options: object)</code></dt> 3032 <dd>Wraps the given range as one big paragraph.</dd> 3033 <dt><code><strong>wrapParagraphsInRange</strong>(from: {line, ch}, to: {line, ch}, ?options: object)</code></dt> 3034 <dd>Wraps the paragraphs in (and overlapping with) the 3035 given range individually.</dd> 3036 </dl> 3037 The following options are recognized: 3038 <dl> 3039 <dt><code><strong>paragraphStart</strong>, <strong>paragraphEnd</strong>: RegExp</code></dt> 3040 <dd>Blank lines are always considered paragraph boundaries. 3041 These options can be used to specify a pattern that causes 3042 lines to be considered the start or end of a paragraph.</dd> 3043 <dt><code><strong>column</strong>: number</code></dt> 3044 <dd>The column to wrap at. Defaults to 80.</dd> 3045 <dt><code><strong>wrapOn</strong>: RegExp</code></dt> 3046 <dd>A regular expression that matches only those 3047 two-character strings that allow wrapping. By default, the 3048 addon wraps on whitespace and after dash characters.</dd> 3049 <dt><code><strong>killTrailingSpace</strong>: boolean</code></dt> 3050 <dd>Whether trailing space caused by wrapping should be 3051 preserved, or deleted. Defaults to true.</dd> 3052 </dl> 3053 A demo of the addon is available <a href="../demo/hardwrap.html">here</a>. 3054 </dd> 3055 3056 <dt id="addon_merge"><a href="../addon/merge/merge.js"><code>merge/merge.js</code></a></dt> 3057 <dd>Implements an interface for merging changes, using either a 3058 2-way or a 3-way view. The <code>CodeMirror.MergeView</code> 3059 constructor takes arguments similar to 3060 the <a href="#CodeMirror"><code>CodeMirror</code></a> 3061 constructor, first a node to append the interface to, and then 3062 an options object. Options are passed through to the editors 3063 inside the view. These extra options are recognized: 3064 <dl> 3065 <dt><code><strong>origLeft</strong></code> and <code><strong>origRight</strong>: string</code></dt> 3066 <dd>If given these provide original versions of the 3067 document, which will be shown to the left and right of the 3068 editor in non-editable CodeMirror instances. The merge 3069 interface will highlight changes between the editable 3070 document and the original(s). To create a 2-way (as opposed 3071 to 3-way) merge view, provide only one of them.</dd> 3072 <dt><code><strong>revertButtons</strong>: boolean</code></dt> 3073 <dd>Determines whether buttons that allow the user to revert 3074 changes are shown. Defaults to true.</dd> 3075 <dt><code><strong>revertChunk</strong>: fn(mv: MergeView, from: CodeMirror, fromStart: Pos, fromEnd: Pos, to: CodeMirror, toStart: Pos, toEnd: Pos)</code></dt> 3076 <dd>Can be used to define custom behavior when the user 3077 reverts a changed chunk.</dd> 3078 <dt><code><strong>connect</strong>: string</code></dt> 3079 <dd>Sets the style used to connect changed chunks of code. 3080 By default, connectors are drawn. When this is set 3081 to <code>"align"</code>, the smaller chunk is padded to 3082 align with the bigger chunk instead.</dd> 3083 <dt><code><strong>collapseIdentical</strong>: boolean|number</code></dt> 3084 <dd>When true (default is false), stretches of unchanged 3085 text will be collapsed. When a number is given, this 3086 indicates the amount of lines to leave visible around such 3087 stretches (which defaults to 2).</dd> 3088 <dt><code><strong>allowEditingOriginals</strong>: boolean</code></dt> 3089 <dd>Determines whether the original editor allows editing. 3090 Defaults to false.</dd> 3091 <dt><code><strong>showDifferences</strong>: boolean</code></dt> 3092 <dd>When true (the default), changed pieces of text are 3093 highlighted.</dd> 3094 <dt><code><strong>chunkClassLocation</strong>: string|Array</code></dt> 3095 <dd>By default the chunk highlights are added 3096 using <a href="#addLineClass"><code>addLineClass</code></a> 3097 with "background". Override this to customize it to be any 3098 valid `where` parameter or an Array of valid `where` 3099 parameters.</dd> 3100 </dl> 3101 The addon also defines commands <code>"goNextDiff"</code> 3102 and <code>"goPrevDiff"</code> to quickly jump to the next 3103 changed chunk. <a href="../demo/merge.html">Demo 3104 here</a>.</dd> 3105 3106 <dt id="addon_tern"><a href="../addon/tern/tern.js"><code>tern/tern.js</code></a></dt> 3107 <dd>Provides integration with 3108 the <a href="http://ternjs.net">Tern</a> JavaScript analysis 3109 engine, for completion, definition finding, and minor 3110 refactoring help. See the <a href="../demo/tern.html">demo</a> 3111 for a very simple integration. For more involved scenarios, see 3112 the comments at the top of 3113 the <a href="../addon/tern/tern.js">addon</a> and the 3114 implementation of the 3115 (multi-file) <a href="http://ternjs.net/doc/demo.html">demonstration 3116 on the Tern website</a>.</dd> 3117 </dl> 3118 </section> 3119 3120 <section id=modeapi> 3121 <h2>Writing CodeMirror Modes</h2> 3122 3123 <p>Modes typically consist of a single JavaScript file. This file 3124 defines, in the simplest case, a lexer (tokenizer) for your 3125 language—a function that takes a character stream as input, 3126 advances it past a token, and returns a style for that token. More 3127 advanced modes can also handle indentation for the language.</p> 3128 3129 <p>This section describes the low-level mode interface. Many modes 3130 are written directly against this, since it offers a lot of 3131 control, but for a quick mode definition, you might want to use 3132 the <a href="../demo/simplemode.html">simple mode addon</a>.</p> 3133 3134 <p id="defineMode">The mode script should 3135 call <code><strong>CodeMirror.defineMode</strong></code> to 3136 register itself with CodeMirror. This function takes two 3137 arguments. The first should be the name of the mode, for which you 3138 should use a lowercase string, preferably one that is also the 3139 name of the files that define the mode (i.e. <code>"xml"</code> is 3140 defined in <code>xml.js</code>). The second argument should be a 3141 function that, given a CodeMirror configuration object (the thing 3142 passed to the <code>CodeMirror</code> function) and an optional 3143 mode configuration object (as in 3144 the <a href="#option_mode"><code>mode</code></a> option), returns 3145 a mode object.</p> 3146 3147 <p>Typically, you should use this second argument 3148 to <code>defineMode</code> as your module scope function (modes 3149 should not leak anything into the global scope!), i.e. write your 3150 whole mode inside this function.</p> 3151 3152 <p>The main responsibility of a mode script is <em>parsing</em> 3153 the content of the editor. Depending on the language and the 3154 amount of functionality desired, this can be done in really easy 3155 or extremely complicated ways. Some parsers can be stateless, 3156 meaning that they look at one element (<em>token</em>) of the code 3157 at a time, with no memory of what came before. Most, however, will 3158 need to remember something. This is done by using a <em>state 3159 object</em>, which is an object that is always passed when 3160 reading a token, and which can be mutated by the tokenizer.</p> 3161 3162 <p id="startState">Modes that use a state must define 3163 a <code><strong>startState</strong></code> method on their mode 3164 object. This is a function of no arguments that produces a state 3165 object to be used at the start of a document.</p> 3166 3167 <p id="token">The most important part of a mode object is 3168 its <code><strong>token</strong>(stream, state)</code> method. All 3169 modes must define this method. It should read one token from the 3170 stream it is given as an argument, optionally update its state, 3171 and return a style string, or <code>null</code> for tokens that do 3172 not have to be styled. For your styles, you are encouraged to use 3173 the 'standard' names defined in the themes (without 3174 the <code>cm-</code> prefix). If that fails, it is also possible 3175 to come up with your own and write your own CSS theme file.<p> 3176 3177 <p id="token_style_line">A typical token string would 3178 be <code>"variable"</code> or <code>"comment"</code>. Multiple 3179 styles can be returned (separated by spaces), for 3180 example <code>"string error"</code> for a thing that looks like a 3181 string but is invalid somehow (say, missing its closing quote). 3182 When a style is prefixed by <code>"line-"</code> 3183 or <code>"line-background-"</code>, the style will be applied to 3184 the whole line, analogous to what 3185 the <a href="#addLineClass"><code>addLineClass</code></a> method 3186 does—styling the <code>"text"</code> in the simple case, and 3187 the <code>"background"</code> element 3188 when <code>"line-background-"</code> is prefixed.</p> 3189 3190 <p id="StringStream">The stream object that's passed 3191 to <code>token</code> encapsulates a line of code (tokens may 3192 never span lines) and our current position in that line. It has 3193 the following API:</p> 3194 3195 <dl> 3196 <dt><code><strong>eol</strong>() → boolean</code></dt> 3197 <dd>Returns true only if the stream is at the end of the 3198 line.</dd> 3199 <dt><code><strong>sol</strong>() → boolean</code></dt> 3200 <dd>Returns true only if the stream is at the start of the 3201 line.</dd> 3202 3203 <dt><code><strong>peek</strong>() → string</code></dt> 3204 <dd>Returns the next character in the stream without advancing 3205 it. Will return a <code>null</code> at the end of the 3206 line.</dd> 3207 <dt><code><strong>next</strong>() → string</code></dt> 3208 <dd>Returns the next character in the stream and advances it. 3209 Also returns <code>null</code> when no more characters are 3210 available.</dd> 3211 3212 <dt><code><strong>eat</strong>(match: string|regexp|function(char: string) → boolean) → string</code></dt> 3213 <dd><code>match</code> can be a character, a regular expression, 3214 or a function that takes a character and returns a boolean. If 3215 the next character in the stream 'matches' the given argument, 3216 it is consumed and returned. Otherwise, <code>undefined</code> 3217 is returned.</dd> 3218 <dt><code><strong>eatWhile</strong>(match: string|regexp|function(char: string) → boolean) → boolean</code></dt> 3219 <dd>Repeatedly calls <code>eat</code> with the given argument, 3220 until it fails. Returns true if any characters were eaten.</dd> 3221 <dt><code><strong>eatSpace</strong>() → boolean</code></dt> 3222 <dd>Shortcut for <code>eatWhile</code> when matching 3223 white-space.</dd> 3224 <dt><code><strong>skipToEnd</strong>()</code></dt> 3225 <dd>Moves the position to the end of the line.</dd> 3226 <dt><code><strong>skipTo</strong>(str: string) → boolean</code></dt> 3227 <dd>Skips to the start of the next occurrence of the given string, if 3228 found on the current line (doesn't advance the stream if the 3229 string does not occur on the line). Returns true if the 3230 string was found.</dd> 3231 <dt><code><strong>match</strong>(pattern: string, ?consume: boolean, ?caseFold: boolean) → boolean</code></dt> 3232 <dt><code><strong>match</strong>(pattern: regexp, ?consume: boolean) → array&lt;string&gt;</code></dt> 3233 <dd>Act like a 3234 multi-character <code>eat</code>—if <code>consume</code> is true 3235 or not given—or a look-ahead that doesn't update the stream 3236 position—if it is false. <code>pattern</code> can be either a 3237 string or a regular expression starting with <code>^</code>. 3238 When it is a string, <code>caseFold</code> can be set to true to 3239 make the match case-insensitive. When successfully matching a 3240 regular expression, the returned value will be the array 3241 returned by <code>match</code>, in case you need to extract 3242 matched groups.</dd> 3243 3244 <dt><code><strong>backUp</strong>(n: integer)</code></dt> 3245 <dd>Backs up the stream <code>n</code> characters. Backing it up 3246 further than the start of the current token will cause things to 3247 break, so be careful.</dd> 3248 <dt><code><strong>column</strong>() → integer</code></dt> 3249 <dd>Returns the column (taking into account tabs) at which the 3250 current token starts.</dd> 3251 <dt><code><strong>indentation</strong>() → integer</code></dt> 3252 <dd>Tells you how far the current line has been indented, in 3253 spaces. Corrects for tab characters.</dd> 3254 3255 <dt><code><strong>current</strong>() → string</code></dt> 3256 <dd>Get the string between the start of the current token and 3257 the current stream position.</dd> 3258 3259 <dt><code><strong>lookAhead</strong>(n: number) → ?string</code></dt> 3260 <dd>Get the line <code>n</code> (&gt;0) lines after the current 3261 one, in order to scan ahead across line boundaries. Note that 3262 you want to do this carefully, since looking far ahead will make 3263 mode state caching much less effective.</dd> 3264 3265 <dt id="baseToken"><code><strong>baseToken</strong>() → ?{type: ?string, size: number}</code></dt> 3266 <dd>Modes added 3267 through <a href="#addOverlay"><code>addOverlay</code></a> 3268 (and <em>only</em> such modes) can use this method to inspect 3269 the current token produced by the underlying mode.</dd> 3270 </dl> 3271 3272 <p id="blankLine">By default, blank lines are simply skipped when 3273 tokenizing a document. For languages that have significant blank 3274 lines, you can define 3275 a <code><strong>blankLine</strong>(state)</code> method on your 3276 mode that will get called whenever a blank line is passed over, so 3277 that it can update the parser state.</p> 3278 3279 <p id="copyState">Because state object are mutated, and CodeMirror 3280 needs to keep valid versions of a state around so that it can 3281 restart a parse at any line, copies must be made of state objects. 3282 The default algorithm used is that a new state object is created, 3283 which gets all the properties of the old object. Any properties 3284 which hold arrays get a copy of these arrays (since arrays tend to 3285 be used as mutable stacks). When this is not correct, for example 3286 because a mode mutates non-array properties of its state object, a 3287 mode object should define 3288 a <code><strong>copyState</strong></code> method, which is given a 3289 state and should return a safe copy of that state.</p> 3290 3291 <p id="indent">If you want your mode to provide smart indentation 3292 (through the <a href="#indentLine"><code>indentLine</code></a> 3293 method and the <code>indentAuto</code> 3294 and <code>newlineAndIndent</code> commands, to which keys can be 3295 <a href="#option_extraKeys">bound</a>), you must define 3296 an <code><strong>indent</strong>(state, textAfter)</code> method 3297 on your mode object.</p> 3298 3299 <p>The indentation method should inspect the given state object, 3300 and optionally the <code>textAfter</code> string, which contains 3301 the text on the line that is being indented, and return an 3302 integer, the amount of spaces to indent. It should usually take 3303 the <a href="#option_indentUnit"><code>indentUnit</code></a> 3304 option into account. An indentation method may 3305 return <code>CodeMirror.Pass</code> to indicate that it 3306 could not come up with a precise indentation.</p> 3307 3308 <p id="mode_comment">To work well with 3309 the <a href="#addon_comment">commenting addon</a>, a mode may 3310 define <code><strong>lineComment</strong></code> (string that 3311 starts a line 3312 comment), <code><strong>blockCommentStart</strong></code>, <code><strong>blockCommentEnd</strong></code> 3313 (strings that start and end block comments), 3314 and <code>blockCommentLead</code> (a string to put at the start of 3315 continued lines in a block comment). All of these are 3316 optional.</p> 3317 3318 <p id="electricChars">Finally, a mode may define either 3319 an <code>electricChars</code> or an <code>electricInput</code> 3320 property, which are used to automatically reindent the line when 3321 certain patterns are typed and 3322 the <a href="#option_electricChars"><code>electricChars</code></a> 3323 option is enabled. <code>electricChars</code> may be a string, and 3324 will trigger a reindent whenever one of the characters in that 3325 string are typed. Often, it is more appropriate to 3326 use <code>electricInput</code>, which should hold a regular 3327 expression, and will trigger indentation when the part of the 3328 line <em>before</em> the cursor matches the expression. It should 3329 usually end with a <code>$</code> character, so that it only 3330 matches when the indentation-changing pattern was just typed, not when something was 3331 typed after the pattern.</p> 3332 3333 <p>So, to summarize, a mode <em>must</em> provide 3334 a <code>token</code> method, and it <em>may</em> 3335 provide <code>startState</code>, <code>copyState</code>, 3336 and <code>indent</code> methods. For an example of a trivial mode, 3337 see the <a href="../mode/diff/diff.js">diff mode</a>, for a more 3338 involved example, see the <a href="../mode/clike/clike.js">C-like 3339 mode</a>.</p> 3340 3341 <p>Sometimes, it is useful for modes to <em>nest</em>—to have one 3342 mode delegate work to another mode. An example of this kind of 3343 mode is the <a href="../mode/htmlmixed/htmlmixed.js">mixed-mode HTML 3344 mode</a>. To implement such nesting, it is usually necessary to 3345 create mode objects and copy states yourself. To create a mode 3346 object, there are <code>CodeMirror.getMode(options, 3347 parserConfig)</code>, where the first argument is a configuration 3348 object as passed to the mode constructor function, and the second 3349 argument is a mode specification as in 3350 the <a href="#option_mode"><code>mode</code></a> option. To copy a 3351 state object, call <code>CodeMirror.copyState(mode, state)</code>, 3352 where <code>mode</code> is the mode that created the given 3353 state.</p> 3354 3355 <p id="innerMode">In a nested mode, it is recommended to add an 3356 extra method, <code><strong>innerMode</strong></code> which, given 3357 a state object, returns a <code>{state, mode}</code> object with 3358 the inner mode and its state for the current position. These are 3359 used by utility scripts such as the <a href="#addon_closetag">tag 3360 closer</a> to get context information. Use 3361 the <code>CodeMirror.innerMode</code> helper function to, starting 3362 from a mode and a state, recursively walk down to the innermost 3363 mode and state.</p> 3364 3365 <p>To make indentation work properly in a nested parser, it is 3366 advisable to give the <code>startState</code> method of modes that 3367 are intended to be nested an optional argument that provides the 3368 base indentation for the block of code. The JavaScript and CSS 3369 parser do this, for example, to allow JavaScript and CSS code 3370 inside the mixed-mode HTML mode to be properly indented.</p> 3371 3372 <p id="defineMIME">It is possible, and encouraged, to associate 3373 your mode, or a certain configuration of your mode, with 3374 a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type. For 3375 example, the JavaScript mode associates itself 3376 with <code>text/javascript</code>, and its JSON variant 3377 with <code>application/json</code>. To do this, 3378 call <code><strong>CodeMirror.defineMIME</strong>(mime, 3379 modeSpec)</code>, where <code>modeSpec</code> can be a string or 3380 object specifying a mode, as in 3381 the <a href="#option_mode"><code>mode</code></a> option.</p> 3382 3383 <p>If a mode specification wants to add some properties to the 3384 resulting mode object, typically for use 3385 with <a href="#getHelpers"><code>getHelpers</code></a>, it may 3386 contain a <code>modeProps</code> property, which holds an object. 3387 This object's properties will be copied to the actual mode 3388 object.</p> 3389 3390 <p id="extendMode">Sometimes, it is useful to add or override mode 3391 object properties from external code. 3392 The <code><strong>CodeMirror.extendMode</strong></code> function 3393 can be used to add properties to mode objects produced for a 3394 specific mode. Its first argument is the name of the mode, its 3395 second an object that specifies the properties that should be 3396 added. This is mostly useful to add utilities that can later be 3397 looked up through <a href="#getMode"><code>getMode</code></a>.</p> 3398 </section> 3399 3400 <section id="vimapi"> 3401 <h2>VIM Mode API</h2> 3402 3403 <p>CodeMirror has a robust VIM mode that attempts to faithfully 3404 emulate VIM's most useful features. It can be enabled by 3405 including <a href="../keymap/vim.js"><code>keymap/vim.js</code> 3406 </a> and setting the <code>keyMap</code> option to 3407 <code>"vim"</code>.</p> 3408 3409 <h3 id="vimapi_configuration">Configuration</h3> 3410 3411 <p>VIM mode accepts configuration options for customizing 3412 behavior at run time. These methods can be called at any time 3413 and will affect all existing CodeMirror instances unless 3414 specified otherwise. The methods are exposed on the 3415 <code><strong>CodeMirror.Vim</strong></code> object.</p> 3416 3417 <dl> 3418 <dt id="vimapi_setOption"><code><strong>setOption(name: string, value: any, ?cm: CodeMirror, ?cfg: object)</strong></code></dt> 3419 <dd>Sets the value of a VIM option. <code>name</code> should 3420 be the name of an option. If <code>cfg.scope</code> is not set 3421 and <code>cm</code> is provided, then sets the global and 3422 instance values of the option. Otherwise, sets either the 3423 global or instance value of the option depending on whether 3424 <code>cfg.scope</code> is <code>global</code> or 3425 <code>local</code>.</dd> 3426 <dt id="vimapi_getOption"><code><strong>getOption(name: string, ?cm: CodeMirror: ?cfg: object)</strong></code></dt> 3427 <dd>Gets the current value of a VIM option. If 3428 <code>cfg.scope</code> is not set and <code>cm</code> is 3429 provided, then gets the instance value of the option, falling 3430 back to the global value if not set. If <code>cfg.scope</code> is provided, then gets the <code>global</code> or 3431 <code>local</code> value without checking the other.</dd> 3432 3433 <dt id="vimapi_map"><code><strong>map(lhs: string, rhs: string, ?context: string)</strong></code></dt> 3434 <dd>Maps a key sequence to another key sequence. Implements 3435 VIM's <code>:map</code> command. To map ; to : in VIM would be 3436 <code><strong>:map ; :</strong></code>. That would translate to 3437 <code><strong>CodeMirror.Vim.map(';', ':');</strong></code>. 3438 The <code>context</code> can be <code>normal</code>, 3439 <code>visual</code>, or <code>insert</code>, which correspond 3440 to <code>:nmap</code>, <code>:vmap</code>, and 3441 <code>:imap</code> 3442 respectively.</dd> 3443 3444 <dt id="vimapi_mapCommand"><code><strong>mapCommand(keys: string, type: string, name: string, ?args: object, ?extra: object)</strong></code></dt> 3445 <dd>Maps a key sequence to a <code>motion</code>, 3446 <code>operator</code>, or <code>action</code> type command. 3447 The args object is passed through to the command when it is 3448 invoked by the provided key sequence. 3449 <code>extras.context</code> can be <code>normal</code>, 3450 <code>visual</code>, or <code>insert</code>, to map the key 3451 sequence only in the corresponding mode. 3452 <code>extras.isEdit</code> is applicable only to actions, 3453 determining whether it is recorded for replay for the 3454 <code>.</code> single-repeat command. 3455 </dl> 3456 3457 <h3 id="vimapi_extending">Extending VIM</h3> 3458 3459 <p>CodeMirror's VIM mode implements a large subset of VIM's core 3460 editing functionality. But since there's always more to be 3461 desired, there is a set of APIs for extending VIM's 3462 functionality. As with the configuration API, the methods are 3463 exposed on <code><strong>CodeMirror.Vim</strong></code> and may 3464 be called at any time.</p> 3465 3466 <dl> 3467 <dt id="vimapi_defineOption"><code><strong>defineOption(name: string, default: any, type: string, ?aliases: array&lt;string&gt;, ?callback: function (?value: any, ?cm: CodeMirror) → ?any)</strong></code></dt> 3468 <dd>Defines a VIM style option and makes it available to the 3469 <code>:set</code> command. Type can be <code>boolean</code> or 3470 <code>string</code>, used for validation and by 3471 <code>:set</code> to determine which syntax to accept. If a 3472 <code>callback</code> is passed in, VIM does not store the value of the 3473 option itself, but instead uses the callback as a setter/getter. If the 3474 first argument to the callback is <code>undefined</code>, then the 3475 callback should return the value of the option. Otherwise, it should set 3476 instead. Since VIM options have global and instance values, whether a 3477 <code>CodeMirror</code> instance is passed in denotes whether the global 3478 or local value should be used. Consequently, it's possible for the 3479 callback to be called twice for a single <code>setOption</code> or 3480 <code>getOption</code> call. Note that right now, VIM does not support 3481 defining buffer-local options that do not have global values. If an 3482 option should not have a global value, either always ignore the 3483 <code>cm</code> parameter in the callback, or always pass in a 3484 <code>cfg.scope</code> to <code>setOption</code> and 3485 <code>getOption</code>.</dd> 3486 3487 <dt id="vimapi_defineMotion"><code><strong>defineMotion(name: string, fn: function(cm: CodeMirror, head: {line, ch}, ?motionArgs: object}) → {line, ch})</strong></code></dt> 3488 <dd>Defines a motion command for VIM. The motion should return 3489 the desired result position of the cursor. <code>head</code> 3490 is the current position of the cursor. It can differ from 3491 <code>cm.getCursor('head')</code> if VIM is in visual mode. 3492 <code>motionArgs</code> is the object passed into 3493 <strong><code>mapCommand()</code></strong>.</dd> 3494 3495 <dt id="vimapi_defineOperator"><strong><code>defineOperator(name: string, fn: function(cm: CodeMirror, ?operatorArgs: object, ranges: array&lt;{anchor, head}&gt;) → ?{line, ch})</code></strong></dt> 3496 <dd>Defines an operator command, similar to <strong><code> 3497 defineMotion</code></strong>. <code>ranges</code> is the range 3498 of text the operator should operate on. If the cursor should 3499 be set to a certain position after the operation finishes, it 3500 can return a cursor object.</dd> 3501 3502 <dt id="vimapi_defineActon"><strong><code>defineAction(name: string, fn: function(cm: CodeMirror, ?actionArgs: object))</code></strong></dt> 3503 <dd>Defines an action command, similar to 3504 <strong><code>defineMotion</code></strong>. Action commands 3505 can have arbitrary behavior, making them more flexible than 3506 motions and operators, at the loss of orthogonality.</dd> 3507 3508 <dt id="vimapi_defineEx"><strong><code>defineEx(name: string, ?prefix: string, fn: function(cm: CodeMirror, ?params: object))</code></strong></dt> 3509 <dd>Defines an Ex command, and maps it to <code>:name</code>. 3510 If a prefix is provided, it, and any prefixed substring of the 3511 <code>name</code> beginning with the <code>prefix</code> can 3512 be used to invoke the command. If the <code>prefix</code> is 3513 falsy, then <code>name</code> is used as the prefix. <code> 3514 params.argString</code> contains the part of the prompted 3515 string after the command name. <code>params.args</code> is 3516 <code>params.argString</code> split by whitespace. If the 3517 command was prefixed with a 3518 <code><strong><a href="http://vimdoc.sourceforge.net/htmldoc/cmdline.html#cmdline-ranges">line range</a></strong></code>, 3519 <code>params.line</code> and <code>params.lineEnd</code> will 3520 be set. 3521 </dl> 3522 3523 </section> 3524 3525 </article> 3526 3527 <script>setTimeout(function(){CodeMirror.colorize();}, 20);</script>
Download modules/editor/codemirror/doc/manual.html
History Tue, 22 May 2018 22:39:54 +0200 Jan Dankert Fix für PHP 7.2: 'Object' darf nun nicht mehr als Klassennamen verwendet werden. AUCH NICHT IN EINEM NAMESPACE! WTF, wozu habe ich das in einen verfickten Namespace gepackt? Wozu soll der sonst da sein??? Amateure. Daher nun notgedrungen unbenannt in 'BaseObject'.