Spaces:
Running
Running
| <html> | |
| <head> | |
| <meta charset="utf-8"/> | |
| <title>CodeMirror: User Manual</title> | |
| <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans:bold"/> | |
| <link rel="stylesheet" type="text/css" href="docs.css"/> | |
| <style>dl dl {margin: 0;}</style> | |
| <script src="../lib/codemirror.js"></script> | |
| <link rel="stylesheet" href="../lib/codemirror.css"> | |
| <script src="../addon/runmode/runmode.js"></script> | |
| <script src="../addon/runmode/colorize.js"></script> | |
| <script src="../mode/javascript/javascript.js"></script> | |
| <script src="../mode/xml/xml.js"></script> | |
| <script src="../mode/css/css.js"></script> | |
| <script src="../mode/htmlmixed/htmlmixed.js"></script> | |
| </head> | |
| <body> | |
| <h1><span class="logo-braces">{ }</span> <a href="http://codemirror.net/">CodeMirror</a></h1> | |
| <div class="grey"> | |
| <img src="baboon.png" class="logo" alt="logo"/> | |
| <pre> | |
| /* User manual and | |
| reference guide */ | |
| </pre> | |
| </div> | |
| <div class="clear"><div class="leftbig blk"> | |
| <h2 id="overview">Overview</h2> | |
| <p>CodeMirror is a code-editor component that can be embedded in | |
| Web pages. The core library provides <em>only</em> the editor | |
| component, no accompanying buttons, auto-completion, or other IDE | |
| functionality. It does provide a rich API on top of which such | |
| functionality can be straightforwardly implemented. See | |
| the <a href="#addons">add-ons</a> included in the distribution, | |
| and | |
| the <a href="https://github.com/jagthedrummer/codemirror-ui">CodeMirror | |
| UI</a> project, for reusable implementations of extra features.</p> | |
| <p>CodeMirror works with language-specific modes. Modes are | |
| JavaScript programs that help color (and optionally indent) text | |
| written in a given language. The distribution comes with a number | |
| of modes (see the <a href="../mode/"><code>mode/</code></a> | |
| directory), and it isn't hard to <a href="#modeapi">write new | |
| ones</a> for other languages.</p> | |
| <h2 id="usage">Basic Usage</h2> | |
| <p>The easiest way to use CodeMirror is to simply load the script | |
| and style sheet found under <code>lib/</code> in the distribution, | |
| plus a mode script from one of the <code>mode/</code> directories. | |
| (See <a href="compress.html">the compression helper</a> for an | |
| easy way to combine scripts.) For example:</p> | |
| <pre data-lang="text/html"><script src="lib/codemirror.js"></script> | |
| <link rel="stylesheet" href="../lib/codemirror.css"> | |
| <script src="mode/javascript/javascript.js"></script></pre> | |
| <p>Having done this, an editor instance can be created like | |
| this:</p> | |
| <pre data-lang="javascript">var myCodeMirror = CodeMirror(document.body);</pre> | |
| <p>The editor will be appended to the document body, will start | |
| empty, and will use the mode that we loaded. To have more control | |
| over the new editor, a configuration object can be passed | |
| to <code>CodeMirror</code> as a second argument:</p> | |
| <pre data-lang="javascript">var myCodeMirror = CodeMirror(document.body, { | |
| value: "function myScript(){return 100;}\n", | |
| mode: "javascript" | |
| });</pre> | |
| <p>This will initialize the editor with a piece of code already in | |
| it, and explicitly tell it to use the JavaScript mode (which is | |
| useful when multiple modes are loaded). | |
| See <a href="#config">below</a> for a full discussion of the | |
| configuration options that CodeMirror accepts.</p> | |
| <p>In cases where you don't want to append the editor to an | |
| element, and need more control over the way it is inserted, the | |
| first argument to the <code>CodeMirror</code> function can also | |
| be a function that, when given a DOM element, inserts it into the | |
| document somewhere. This could be used to, for example, replace a | |
| textarea with a real editor:</p> | |
| <pre data-lang="javascript">var myCodeMirror = CodeMirror(function(elt) { | |
| myTextArea.parentNode.replaceChild(elt, myTextArea); | |
| }, {value: myTextArea.value});</pre> | |
| <p>However, for this use case, which is a common way to use | |
| CodeMirror, the library provides a much more powerful | |
| shortcut:</p> | |
| <pre data-lang="javascript">var myCodeMirror = CodeMirror.fromTextArea(myTextArea);</pre> | |
| <p>This will, among other things, ensure that the textarea's value | |
| is updated with the editor's contents when the form (if it is part | |
| of a form) is submitted. See the <a href="#fromTextArea">API | |
| reference</a> for a full description of this method.</p> | |
| <h2 id="config">Configuration</h2> | |
| <p>Both the <code>CodeMirror</code> function and | |
| its <code>fromTextArea</code> method take as second (optional) | |
| argument an object containing configuration options. Any option | |
| not supplied like this will be taken | |
| from <code>CodeMirror.defaults</code>, an object containing the | |
| default options. You can update this object to change the defaults | |
| on your page.</p> | |
| <p>Options are not checked in any way, so setting bogus option | |
| values is bound to lead to odd errors.</p> | |
| <p>These are the supported options:</p> | |
| <dl> | |
| <dt id="option_value"><code>value (string or Doc)</code></dt> | |
| <dd>The starting value of the editor. Can be a string, or | |
| a <a href="#api_doc">document object</a>.</dd> | |
| <dt id="option_mode"><code>mode (string or object)</code></dt> | |
| <dd>The mode to use. When not given, this will default to the | |
| first mode that was loaded. It may be a string, which either | |
| simply names the mode or is | |
| a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type | |
| associated with the mode. Alternatively, it may be an object | |
| containing configuration options for the mode, with | |
| a <code>name</code> property that names the mode (for | |
| example <code>{name: "javascript", json: true}</code>). The demo | |
| pages for each mode contain information about what configuration | |
| parameters the mode supports. You can ask CodeMirror which modes | |
| and MIME types have been defined by inspecting | |
| the <code>CodeMirror.modes</code> | |
| and <code>CodeMirror.mimeModes</code> objects. The first maps | |
| mode names to their constructors, and the second maps MIME types | |
| to mode specs.</dd> | |
| <dt id="option_theme"><code>theme (string)</code></dt> | |
| <dd>The theme to style the editor with. You must make sure the | |
| CSS file defining the corresponding <code>.cm-s-[name]</code> | |
| styles is loaded (see | |
| the <a href="../theme/"><code>theme</code></a> directory in the | |
| distribution). The default is <code>"default"</code>, for which | |
| colors are included in <code>codemirror.css</code>. It is | |
| possible to use multiple theming classes at once—for | |
| example <code>"foo bar"</code> will assign both | |
| the <code>cm-s-foo</code> and the <code>cm-s-bar</code> classes | |
| to the editor.</dd> | |
| <dt id="option_indentUnit"><code>indentUnit (integer)</code></dt> | |
| <dd>How many spaces a block (whatever that means in the edited | |
| language) should be indented. The default is 2.</dd> | |
| <dt id="option_smartIndent"><code>smartIndent (boolean)</code></dt> | |
| <dd>Whether to use the context-sensitive indentation that the | |
| mode provides (or just indent the same as the line before). | |
| Defaults to true.</dd> | |
| <dt id="option_tabSize"><code>tabSize (integer)</code></dt> | |
| <dd>The width of a tab character. Defaults to 4.</dd> | |
| <dt id="option_indentWithTabs"><code>indentWithTabs (boolean)</code></dt> | |
| <dd>Whether, when indenting, the first N*<code>tabSize</code> | |
| spaces should be replaced by N tabs. Default is false.</dd> | |
| <dt id="option_electricChars"><code>electricChars (boolean)</code></dt> | |
| <dd>Configures whether the editor should re-indent the current | |
| line when a character is typed that might change its proper | |
| indentation (only works if the mode supports indentation). | |
| Default is true.</dd> | |
| <dt id="option_rtlMoveVisually"><code>rtlMoveVisually (boolean)</code></dt> | |
| <dd>Determines whether horizontal cursor movement through | |
| right-to-left (Arabic, Hebrew) text is visual (pressing the left | |
| arrow moves the cursor left) or logical (pressing the left arrow | |
| moves to the next lower index in the string, which is visually | |
| right in right-to-left text). The default is <code>false</code> | |
| on Windows, and <code>true</code> on other platforms.</dd> | |
| <dt id="option_keyMap"><code>keyMap (string)</code></dt> | |
| <dd>Configures the keymap to use. The default | |
| is <code>"default"</code>, which is the only keymap defined | |
| in <code>codemirror.js</code> itself. Extra keymaps are found in | |
| the <a href="../keymap/"><code>keymap</code></a> directory. See | |
| the <a href="#keymaps">section on keymaps</a> for more | |
| information.</dd> | |
| <dt id="option_extraKeys"><code>extraKeys (object)</code></dt> | |
| <dd>Can be used to specify extra keybindings for the editor, | |
| alongside the ones defined | |
| by <a href="#option_keyMap"><code>keyMap</code></a>. Should be | |
| either null, or a valid <a href="#keymaps">keymap</a> value.</dd> | |
| <dt id="option_lineWrapping"><code>lineWrapping (boolean)</code></dt> | |
| <dd>Whether CodeMirror should scroll or wrap for long lines. | |
| Defaults to <code>false</code> (scroll).</dd> | |
| <dt id="option_lineNumbers"><code>lineNumbers (boolean)</code></dt> | |
| <dd>Whether to show line numbers to the left of the editor.</dd> | |
| <dt id="option_firstLineNumber"><code>firstLineNumber (integer)</code></dt> | |
| <dd>At which number to start counting lines. Default is 1.</dd> | |
| <dt id="option_lineNumberFormatter"><code>lineNumberFormatter (function)</code></dt> | |
| <dd>A function used to format line numbers. The function is | |
| passed the line number, and should return a string that will be | |
| shown in the gutter.</dd> | |
| <dt id="option_gutters"><code>gutters (array)</code></dt> | |
| <dd>Can be used to add extra gutters (beyond or instead of the | |
| line number gutter). Should be an array of CSS class names, each | |
| of which defines a <code>width</code> (and optionally a | |
| background), and which will be used to draw the background of | |
| the gutters. <em>May</em> include | |
| the <code>CodeMirror-linenumbers</code> class, in order to | |
| explicitly set the position of the line number gutter (it will | |
| default to be to the right of all other gutters). These class | |
| names are the keys passed | |
| to <a href="#setGutterMarker"><code>setGutterMarker</code></a>.</dd> | |
| <dt id="option_fixedGutter"><code>fixedGutter (boolean)</code></dt> | |
| <dd>Determines whether the gutter scrolls along with the content | |
| horizontally (false) or whether it stays fixed during horizontal | |
| scrolling (true, the default).</dd> | |
| <dt id="option_readOnly"><code>readOnly (boolean)</code></dt> | |
| <dd>This disables editing of the editor content by the user. If | |
| the special value <code>"nocursor"</code> is given (instead of | |
| simply <code>true</code>), focusing of the editor is also | |
| disallowed.</dd> | |
| <dt id="option_showCursorWhenSelecting"><code>showCursorWhenSelecting (boolean)</code></dt> | |
| <dd>Whether the cursor should be drawn when a selection is | |
| active. Defaults to false.</dd> | |
| <dt id="option_undoDepth"><code>undoDepth (integer)</code></dt> | |
| <dd>The maximum number of undo levels that the editor stores. | |
| Defaults to 40.</dd> | |
| <dt id="option_tabindex"><code>tabindex (integer)</code></dt> | |
| <dd>The <a href="http://www.w3.org/TR/html401/interact/forms.html#adef-tabindex">tab | |
| index</a> to assign to the editor. If not given, no tab index | |
| will be assigned.</dd> | |
| <dt id="option_autofocus"><code>autofocus (boolean)</code></dt> | |
| <dd>Can be used to make CodeMirror focus itself on | |
| initialization. Defaults to off. | |
| When <a href="#fromTextArea"><code>fromTextArea</code></a> is | |
| used, and no explicit value is given for this option, it will be | |
| set to true when either the source textarea is focused, or it | |
| has an <code>autofocus</code> attribute and no other element is | |
| focused.</dd> | |
| </dl> | |
| <p>Below this a few more specialized, low-level options are | |
| listed. These are only useful in very specific situations, you | |
| might want to skip them the first time you read this manual.</p> | |
| <dl> | |
| <dt id="option_dragDrop"><code>dragDrop (boolean)</code></dt> | |
| <dd>Controls whether drag-and-drop is enabled. On by default.</dd> | |
| <dt id="option_onDragEvent"><code>onDragEvent (function)</code></dt> | |
| <dd>When given, this will be called when the editor is handling | |
| a <code>dragenter</code>, <code>dragover</code>, | |
| or <code>drop</code> event. It will be passed the editor instance | |
| and the event object as arguments. The callback can choose to | |
| handle the event itself, in which case it should | |
| return <code>true</code> to indicate that CodeMirror should not | |
| do anything further.</dd> | |
| <dt id="option_onKeyEvent"><code>onKeyEvent (function)</code></dt> | |
| <dd>This provides a rather low-level hook into CodeMirror's key | |
| handling. If provided, this function will be called on | |
| every <code>keydown</code>, <code>keyup</code>, | |
| and <code>keypress</code> event that CodeMirror captures. It | |
| will be passed two arguments, the editor instance and the key | |
| event. This key event is pretty much the raw key event, except | |
| that a <code>stop()</code> method is always added to it. You | |
| could feed it to, for example, <code>jQuery.Event</code> to | |
| further normalize it.<br>This function can inspect the key | |
| event, and handle it if it wants to. It may return true to tell | |
| CodeMirror to ignore the event. Be wary that, on some browsers, | |
| stopping a <code>keydown</code> does not stop | |
| the <code>keypress</code> from firing, whereas on others it | |
| does. If you respond to an event, you should probably inspect | |
| its <code>type</code> property and only do something when it | |
| is <code>keydown</code> (or <code>keypress</code> for actions | |
| that need character data).</dd> | |
| <dt id="option_cursorBlinkRate"><code>cursorBlinkRate (number)</code></dt> | |
| <dd>Half-period in milliseconds used for cursor blinking. The default blink | |
| rate is 530ms.</dd> | |
| <dt id="option_cursorHeight"><code>cursorHeight (number)</code></dt> | |
| <dd>Determines the height of the cursor. Default is 1, meaning | |
| it spans the whole height of the line. For some fonts (and by | |
| some tastes) a smaller height (for example <code>0.85</code>), | |
| which causes the cursor to not reach all the way to the bottom | |
| of the line, looks better</dd> | |
| <dt id="option_workTime"><code>workTime, workDelay (number)</code></dt> | |
| <dd>Highlighting is done by a pseudo background-thread that will | |
| work for <code>workTime</code> milliseconds, and then use | |
| timeout to sleep for <code>workDelay</code> milliseconds. The | |
| defaults are 200 and 300, you can change these options to make | |
| the highlighting more or less aggressive.</dd> | |
| <dt id="option_pollInterval"><code>pollInterval (number)</code></dt> | |
| <dd>Indicates how quickly CodeMirror should poll its input | |
| textarea for changes (when focused). Most input is captured by | |
| events, but some things, like IME input on some browsers, don't | |
| generate events that allow CodeMirror to properly detect it. | |
| Thus, it polls. Default is 100 milliseconds.</dd> | |
| <dt id="option_flattenSpans"><code>flattenSpans (boolean)</code></dt> | |
| <dd>By default, CodeMirror will combine adjacent tokens into a | |
| single span if they have the same class. This will result in a | |
| simpler DOM tree, and thus perform better. With some kinds of | |
| styling (such as rounded corners), this will change the way the | |
| document looks. You can set this option to false to disable this | |
| behavior.</dd> | |
| <dt id="option_viewportMargin"><code>viewportMargin (integer)</code></dt> | |
| <dd>Specifies the amount of lines that are rendered above and | |
| below the part of the document that's currently scrolled into | |
| view. This affects the amount of updates needed when scrolling, | |
| and the amount of work that such an update does. You should | |
| usually leave it at its default, 10. Can be set | |
| to <code>Infinity</code> to make sure the whole document is | |
| always rendered, and thus the browser's text search works on it. | |
| This <em>will</em> have bad effects on performance of big | |
| documents.</dd> | |
| </dl> | |
| <h2 id="events">Events</h2> | |
| <p>A CodeMirror instance emits a number of events, which allow | |
| client code to react to various situations. These are registered | |
| with the <a href="#on"><code>on</code></a> method (and | |
| removed with the <a href="#off"><code>off</code></a> | |
| method). These are the events that fire on the instance object. | |
| The name of the event is followed by the arguments that will be | |
| passed to the handler. The <code>instance</code> argument always | |
| refers to the editor instance.</p> | |
| <dl> | |
| <dt id="event_change"><code>"change" (instance, changeObj)</code></dt> | |
| <dd>Fires every time the content of the editor is changed. | |
| The <code>changeObj</code> is a <code>{from, to, text, | |
| next}</code> object containing information about the changes | |
| that occurred as second argument. <code>from</code> | |
| and <code>to</code> are the positions (in the pre-change | |
| coordinate system) where the change started and ended (for | |
| example, it might be <code>{ch:0, line:18}</code> if the | |
| position is at the beginning of line #19). <code>text</code> is | |
| an array of strings representing the text that replaced the | |
| changed range (split by line). If multiple changes happened | |
| during a single operation, the object will have | |
| a <code>next</code> property pointing to another change object | |
| (which may point to another, etc).</dd> | |
| <dt id="event_beforeChange"><code>"beforeChange" (instance, change)</code></dt> | |
| <dd>This event is fired before a change is applied, and its | |
| handler may choose to modify or cancel the change. | |
| The <code>change</code> object | |
| has <code>from</code>, <code>to</code>, and <code>text</code> | |
| properties, as with | |
| the <a href="#event_change"><code>"change"</code></a> event, but | |
| never a <code>next</code> property, since this is fired for each | |
| individual change, and not batched per operation. It also | |
| has <code>update(from, to, text)</code> | |
| and <code>cancel()</code> methods, which may be used to modify | |
| or cancel the change. All three arguments to <code>update</code> | |
| are optional, and can be left off to leave the existing value | |
| for that field intact. <strong>Note:</strong> you may not do | |
| anything from a <code>"beforeChange"</code> handler that would | |
| cause changes to the document or its visualization. Doing so | |
| will, since this handler is called directly from the bowels of | |
| the CodeMirror implementation, probably cause the editor to | |
| become corrupted.</dd> | |
| <dt id="event_cursorActivity"><code>"cursorActivity" (instance)</code></dt> | |
| <dd>Will be fired when the cursor or selection moves, or any | |
| change is made to the editor content.</dd> | |
| <dt id="event_beforeSelectionChange"><code>"beforeSelectionChange" (instance, selection)</code></dt> | |
| <dd>This event is fired before the selection is moved. Its | |
| handler may modify the resulting selection head and anchor. | |
| The <code>selection</code> parameter is an object | |
| with <code>head</code> and <code>anchor</code> properties | |
| holding <code>{line, ch}</code> objects, which the handler can | |
| read and update. Handlers for this event have the same | |
| restriction | |
| as <a href="#event_beforeChange"><code>"beforeChange"</code></a> | |
| handlers — they should not do anything to directly update the | |
| state of the editor.</dd> | |
| <dt id="event_viewportChange"><code>"viewportChange" (instance, from, to)</code></dt> | |
| <dd>Fires whenever the <a href="#getViewport">view port</a> of | |
| the editor changes (due to scrolling, editing, or any other | |
| factor). The <code>from</code> and <code>to</code> arguments | |
| give the new start and end of the viewport.</dd> | |
| <dt id="event_gutterClick"><code>"gutterClick" (instance, line, gutter, clickEvent)</code></dt> | |
| <dd>Fires when the editor gutter (the line-number area) is | |
| clicked. Will pass the editor instance as first argument, the | |
| (zero-based) number of the line that was clicked as second | |
| argument, the CSS class of the gutter that was clicked as third | |
| argument, and the raw <code>mousedown</code> event object as | |
| fourth argument.</dd> | |
| <dt id="event_focus"><code>"focus", "blur" (instance)</code></dt> | |
| <dd>These fire whenever the editor is focused or unfocused.</dd> | |
| <dt id="event_scroll"><code>"scroll" (instance)</code></dt> | |
| <dd>Fires when the editor is scrolled.</dd> | |
| <dt id="event_update"><code>"update" (instance)</code></dt> | |
| <dd>Will be fired whenever CodeMirror updates its DOM display.</dd> | |
| </dl> | |
| <p>It is also possible to <a href="#on">register</a> events on | |
| other objects. Use <code>CodeMirror.on(handle, "eventName", | |
| func)</code> to register handlers on objects that don't have their | |
| own <code>on</code> method. Document objects (instances | |
| of <a href="#Doc"><code>CodeMirror.Doc</code></a>) emit the | |
| following events:</p> | |
| <dl> | |
| <dt id="event_doc_change"><code>"change" (doc, changeObj)</code></dt> | |
| <dd>Fired whenever a change occurs to the | |
| document. <code>changeObj</code> has a similar type as the | |
| object passed to the | |
| editor's <a href="#event_change"><code>"change"</code></a> | |
| event, but it never has a <code>next</code> property, because | |
| document change events are not batched (whereas editor change | |
| events are).</dd> | |
| <dt id="event_doc_beforeChange"><code>"beforeChange" (doc, change)</code></dt> | |
| <dd>See the <a href="#event_beforeChange">description of the | |
| same event</a> on editor instances.</dd> | |
| <dt id="event_doc_cursorActivity"><code>"cursorActivity" (doc)</code></dt> | |
| <dd>Fired whenever the cursor or selection in this document | |
| changes.</dd> | |
| <dt id="event_doc_beforeSelectionChange"><code>"beforeSelectionChange" (doc, selection)</code></dt> | |
| <dd>Equivalent to | |
| the <a href="#event_beforeSelectionChange">event by the same | |
| name</a> as fired on editor instances.</dd> | |
| </dl> | |
| <p>Line handles (as returned by, for | |
| example, <a href="#getLineHandle"><code>getLineHandle</code></a>) | |
| support these events:</p> | |
| <dl> | |
| <dt id="event_delete"><code>"delete" ()</code></dt> | |
| <dd>Will be fired when the line object is deleted. A line object | |
| is associated with the <em>start</em> of the line. Mostly useful | |
| when you need to find out when your <a href="#setGutterMarker">gutter | |
| markers</a> on a given line are removed.</dd> | |
| <dt id="event_line_change"><code>"change" ()</code></dt> | |
| <dd>Fires when the line's text content is changed in any way | |
| (but the line is not deleted outright).</dd> | |
| </dl> | |
| <p>Marked range handles, as returned | |
| by <a href="#markText"><code>markText</code></a> | |
| and <a href="#setBookmark"><code>setBookmark</code></a>, emit the | |
| following events:</p> | |
| <dl> | |
| <dt id="event_clear"><code>"clear" ()</code></dt> | |
| <dd>Fired when the range is cleared, either through cursor | |
| movement in combination | |
| with <a href="#mark_clearOnEnter"><code>clearOnEnter</code></a> | |
| or through a call to its <code>clear()</code> method. Will only | |
| be fired once per handle. Note that deleting the range through | |
| text editing does not fire this event, because an undo | |
| action might bring the range back into existence.</dd> | |
| <dt id="event_hide"><code>"hide" ()</code></dt> | |
| <dd>Fired when the last part of the marker is removed from the | |
| document by editing operations.</dd> | |
| <dt id="event_unhide"><code>"unhide" ()</code></dt> | |
| <dd>Fired when, after the marker was removed by editing, a undo | |
| operation brought the marker back.</dd> | |
| </dl> | |
| <p>Line widgets, returned | |
| by <a href="#addLineWidget"><code>addLineWidget</code></a>, fire | |
| these events:</p> | |
| <dl> | |
| <dt id="event_redraw"><code>"redraw" ()</code></dt> | |
| <dd>Fired whenever the editor re-adds the widget to the DOM. | |
| This will happen once right after the widget is added (if it is | |
| scrolled into view), and then again whenever it is scrolled out | |
| of view and back in again, or when changes to the editor options | |
| or the line the widget is on require the widget to be | |
| redrawn.</dd> | |
| </dl> | |
| <h2 id="keymaps">Keymaps</h2> | |
| <p>Keymaps are ways to associate keys with functionality. A keymap | |
| is an object mapping strings that identify the keys to functions | |
| that implement their functionality.</p> | |
| <p>Keys are identified either by name or by character. | |
| The <code>CodeMirror.keyNames</code> object defines names for | |
| common keys and associates them with their key codes. Examples of | |
| names defined here are <code>Enter</code>, <code>F5</code>, | |
| and <code>Q</code>. These can be prefixed | |
| with <code>Shift-</code>, <code>Cmd-</code>, <code>Ctrl-</code>, | |
| and <code>Alt-</code> (in that order!) to specify a modifier. So | |
| for example, <code>Shift-Ctrl-Space</code> would be a valid key | |
| identifier.</p> | |
| <p>Alternatively, a character can be specified directly by | |
| surrounding it in single quotes, for example <code>'$'</code> | |
| or <code>'q'</code>. Due to limitations in the way browsers fire | |
| key events, these may not be prefixed with modifiers.</p> | |
| <p>The <code>CodeMirror.keyMap</code> object associates keymaps | |
| with names. User code and keymap definitions can assign extra | |
| properties to this object. Anywhere where a keymap is expected, a | |
| string can be given, which will be looked up in this object. It | |
| also contains the <code>"default"</code> keymap holding the | |
| default bindings.</p> | |
| <p id="commands">The values of properties in keymaps can be either functions of | |
| a single argument (the CodeMirror instance), strings, or | |
| <code>false</code>. Such strings refer to properties of the | |
| <code>CodeMirror.commands</code> object, which defines a number of | |
| common commands that are used by the default keybindings, and maps | |
| them to functions. If the property is set to <code>false</code>, | |
| CodeMirror leaves handling of the key up to the browser. A key | |
| handler function may return <code>CodeMirror.Pass</code> to indicate | |
| that it has decided not to handle the key, and other handlers (or | |
| the default behavior) should be given a turn.</p> | |
| <p>Keys mapped to command names that start with the | |
| characters <code>"go"</code> (which should be used for | |
| cursor-movement actions) will be fired even when an | |
| extra <code>Shift</code> modifier is present (i.e. <code>"Up": | |
| "goLineUp"</code> matches both up and shift-up). This is used to | |
| easily implement shift-selection.</p> | |
| <p>Keymaps can defer to each other by defining | |
| a <code>fallthrough</code> property. This indicates that when a | |
| key is not found in the map itself, one or more other maps should | |
| be searched. It can hold either a single keymap or an array of | |
| keymaps.</p> | |
| <p>When a keymap contains a <code>nofallthrough</code> property | |
| set to <code>true</code>, keys matched against that map will be | |
| ignored if they don't match any of the bindings in the map (no | |
| further child maps will be tried, and the default effect of | |
| inserting a character will not occur).</p> | |
| <h2 id="styling">Customized Styling</h2> | |
| <p>Up to a certain extent, CodeMirror's look can be changed by | |
| modifying style sheet files. The style sheets supplied by modes | |
| simply provide the colors for that mode, and can be adapted in a | |
| very straightforward way. To style the editor itself, it is | |
| possible to alter or override the styles defined | |
| in <a href="../lib/codemirror.css"><code>codemirror.css</code></a>.</p> | |
| <p>Some care must be taken there, since a lot of the rules in this | |
| file are necessary to have CodeMirror function properly. Adjusting | |
| colors should be safe, of course, and with some care a lot of | |
| other things can be changed as well. The CSS classes defined in | |
| this file serve the following roles:</p> | |
| <dl> | |
| <dt id="class_CodeMirror"><code>CodeMirror</code></dt> | |
| <dd>The outer element of the editor. This should be used for the | |
| editor width, height, borders and positioning. Can also be used | |
| to set styles that should hold for everything inside the editor | |
| (such as font and font size), or to set a background.</dd> | |
| <dt id="class_CodeMirror_scroll"><code>CodeMirror-scroll</code></dt> | |
| <dd>Whether the editor scrolls (<code>overflow: auto</code> + | |
| fixed height). By default, it does. Setting | |
| the <code>CodeMirror</code> class to have <code>height: | |
| auto</code> and giving this class <code>overflow-x: auto; | |
| overflow-y: hidden;</code> will cause the editor | |
| to <a href="../demo/resize.html">resize to fit its | |
| content</a>.</dd> | |
| <dt id="class_CodeMirror_focused"><code>CodeMirror-focused</code></dt> | |
| <dd>Whenever the editor is focused, the top element gets this | |
| class. This is used to hide the cursor and give the selection a | |
| different color when the editor is not focused.</dd> | |
| <dt id="class_CodeMirror_gutters"><code>CodeMirror-gutters</code></dt> | |
| <dd>This is the backdrop for all gutters. Use it to set the | |
| default gutter background color, and optionally add a border on | |
| the right of the gutters.</dd> | |
| <dt id="class_CodeMirror_linenumbers"><code>CodeMirror-linenumbers</code></dt> | |
| <dd>Use this for giving a background or width to the line number | |
| gutter.</dd> | |
| <dt id="class_CodeMirror_linenumber"><code>CodeMirror-linenumber</code></dt> | |
| <dd>Used to style the actual individual line numbers. These | |
| won't be children of the <code>CodeMirror-linenumbers</code> | |
| (plural) element, but rather will be absolutely positioned to | |
| overlay it. Use this to set alignment and text properties for | |
| the line numbers.</dd> | |
| <dt id="class_CodeMirror_lines"><code>CodeMirror-lines</code></dt> | |
| <dd>The visible lines. This is where you specify vertical | |
| padding for the editor content.</dd> | |
| <dt id="class_CodeMirror_cursor"><code>CodeMirror-cursor</code></dt> | |
| <dd>The cursor is a block element that is absolutely positioned. | |
| You can make it look whichever way you want.</dd> | |
| <dt id="class_CodeMirror_selected"><code>CodeMirror-selected</code></dt> | |
| <dd>The selection is represented by <code>span</code> elements | |
| with this class.</dd> | |
| <dt id="class_CodeMirror_matchingbracket"><code>CodeMirror-matchingbracket</code>, | |
| <code>CodeMirror-nonmatchingbracket</code></dt> | |
| <dd>These are used to style matched (or unmatched) brackets.</dd> | |
| </dl> | |
| <p>If your page's style sheets do funky things to | |
| all <code>div</code> or <code>pre</code> elements (you probably | |
| shouldn't do that), you'll have to define rules to cancel these | |
| effects out again for elements under the <code>CodeMirror</code> | |
| class.</p> | |
| <p>Themes are also simply CSS files, which define colors for | |
| various syntactic elements. See the files in | |
| the <a href="../theme/"><code>theme</code></a> directory.</p> | |
| <h2 id="api">Programming API</h2> | |
| <p>A lot of CodeMirror features are only available through its | |
| API. Thus, you need to write code (or | |
| use <a href="#addons">add-ons</a>) if you want to expose them to | |
| your users.</p> | |
| <p>Whenever points in the document are represented, the API uses | |
| objects with <code>line</code> and <code>ch</code> properties. | |
| Both are zero-based. CodeMirror makes sure to 'clip' any positions | |
| passed by client code so that they fit inside the document, so you | |
| shouldn't worry too much about sanitizing your coordinates. If you | |
| give <code>ch</code> a value of <code>null</code>, or don't | |
| specify it, it will be replaced with the length of the specified | |
| line.</p> | |
| <p>Methods prefixed with <code>doc.</code> can, unless otherwise | |
| specified, be called both on <code>CodeMirror</code> (editor) | |
| instances and <code>CodeMirror.Doc</code> instances. Methods | |
| prefixed with <code>cm.</code> are <em>only</em> available | |
| on <code>CodeMirror</code> instances.</p> | |
| <h3 id="api_content">Content manipulation methods</h3> | |
| <dl> | |
| <dt id="getValue"><code>doc.getValue() → string</code></dt> | |
| <dd>Get the current editor content. You can pass it an optional | |
| argument to specify the string to be used to separate lines | |
| (defaults to <code>"\n"</code>).</dd> | |
| <dt id="setValue"><code>doc.setValue(string)</code></dt> | |
| <dd>Set the editor content.</dd> | |
| <dt id="getRange"><code>doc.getRange(from, to) → string</code></dt> | |
| <dd>Get the text between the given points in the editor, which | |
| should be <code>{line, ch}</code> objects. An optional third | |
| argument can be given to indicate the line separator string to | |
| use (defaults to <code>"\n"</code>).</dd> | |
| <dt id="replaceRange"><code>doc.replaceRange(string, from, to)</code></dt> | |
| <dd>Replace the part of the document between <code>from</code> | |
| and <code>to</code> with the given string. <code>from</code> | |
| and <code>to</code> must be <code>{line, ch}</code> | |
| objects. <code>to</code> can be left off to simply insert the | |
| string at position <code>from</code>.</dd> | |
| <dt id="getLine"><code>doc.getLine(n) → string</code></dt> | |
| <dd>Get the content of line <code>n</code>.</dd> | |
| <dt id="setLine"><code>doc.setLine(n, text)</code></dt> | |
| <dd>Set the content of line <code>n</code>.</dd> | |
| <dt id="removeLine"><code>doc.removeLine(n)</code></dt> | |
| <dd>Remove the given line from the document.</dd> | |
| <dt id="lineCount"><code>doc.lineCount() → number</code></dt> | |
| <dd>Get the number of lines in the editor.</dd> | |
| <dt id="firstLine"><code>doc.firstLine() → number</code></dt> | |
| <dt id="lastLine"><code>doc.lastLine() → number</code></dt> | |
| <dd>Get the first and last lines of the editor. This will | |
| usually be zero and <code>doc.lineCount() - 1</code> respectively, | |
| but for <a href="#linkedDoc_from">linked sub-views</a>, | |
| or <a href="#api_doc">documents</a> instantiated with a non-zero | |
| first line, it might return other values.</dd> | |
| <dt id="getLineHandle"><code>doc.getLineHandle(num) → lineHandle</code></dt> | |
| <dd>Fetches the line handle for the given line number.</dd> | |
| <dt id="getLineNumber"><code>doc.getLineNumber(handle) → integer</code></dt> | |
| <dd>Given a line handle, returns the current position of that | |
| line (or <code>null</code> when it is no longer in the | |
| document).</dd> | |
| <dt id="eachLine"><code>doc.eachLine(f) | doc.eachLine(start, end, f)</code></dt> | |
| <dd>Iterate over the whole document, or if <code>start</code> | |
| and <code>end</code> line numbers are given, the range | |
| from <code>start</code> up to (not including) <code>end</code>, | |
| and call <code>f</code> for each line, passing the line handle. | |
| This is a faster way to visit a range of line handlers than | |
| calling <a href="#getLineHandle"><code>getLineHandle</code></a> | |
| for each of them. Note that line handles have | |
| a <code>text</code> property containing the line's content (as a | |
| string).</dd> | |
| <dt id="markClean"><code>doc.markClean()</code></dt> | |
| <dd>Set the editor content as 'clean', a flag that it will | |
| retain until it is edited, and which will be set again when such | |
| an edit is undone again. Useful to track whether the content | |
| needs to be saved.</dd> | |
| <dt id="isClean"><code>doc.isClean() → boolean</code></dt> | |
| <dd>Returns whether the document is currently clean (not | |
| modified since initialization or the last call | |
| to <a href="#markClean"><code>markClean</code></a>).</dd> | |
| </dl> | |
| <h3 id="api_selection">Cursor and selection methods</h3> | |
| <dl> | |
| <dt id="getSelection"><code>doc.getSelection() → string</code></dt> | |
| <dd>Get the currently selected code.</dd> | |
| <dt id="replaceSelection"><code>doc.replaceSelection(string)</code></dt> | |
| <dd>Replace the selection with the given string.</dd> | |
| <dt id="getCursor"><code>doc.getCursor(start) → object</code></dt> | |
| <dd><code>start</code> is a an optional string indicating which | |
| end of the selection to return. It may | |
| be <code>"start"</code>, <code>"end"</code>, <code>"head"</code> | |
| (the side of the selection that moves when you press | |
| shift+arrow), or <code>"anchor"</code> (the fixed side of the | |
| selection). Omitting the argument is the same as | |
| passing <code>"head"</code>. A <code>{line, ch}</code> object | |
| will be returned.</dd> | |
| <dt id="somethingSelected"><code>doc.somethingSelected() → boolean</code></dt> | |
| <dd>Return true if any text is selected.</dd> | |
| <dt id="setCursor"><code>doc.setCursor(pos)</code></dt> | |
| <dd>Set the cursor position. You can either pass a | |
| single <code>{line, ch}</code> object, or the line and the | |
| character as two separate parameters.</dd> | |
| <dt id="setSelection"><code>doc.setSelection(anchor, head)</code></dt> | |
| <dd>Set the selection range. <code>anchor</code> | |
| and <code>head</code> should be <code>{line, ch}</code> | |
| objects. <code>head</code> defaults to <code>anchor</code> when | |
| not given.</dd> | |
| <dt id="extendSelection"><code>doc.extendSelection(pos, pos2)</code></dt> | |
| <dd>Similar | |
| to <a href="#setSelection"><code>setSelection</code></a>, but | |
| will, if shift is held or | |
| the <a href="#setExtending">extending</a> flag is set, move the | |
| head of the selection while leaving the anchor at its current | |
| place. <code>pos2</code> is optional, and can be passed to | |
| ensure a region (for example a word or paragraph) will end up | |
| selected (in addition to whatever lies between that region and | |
| the current anchor).</dd> | |
| <dt id="setExtending"><code>doc.setExtending(bool)</code></dt> | |
| <dd>Sets or clears the 'extending' flag, which acts similar to | |
| the shift key, in that it will cause cursor movement and calls | |
| to <a href="#extendSelection"><code>extendSelection</code></a> | |
| to leave the selection anchor in place.</dd> | |
| <dt id="findPosH"><code>cm.findPosH(start, amount, unit, visually) → object</code></dt> | |
| <dd>Used to find the target position for horizontal cursor | |
| motion. <code>start</code> is a <code>{line, ch}</code> | |
| object, <code>amount</code> an integer (may be negative), | |
| and <code>unit</code> one of the | |
| string <code>"char"</code>, <code>"column"</code>, | |
| or <code>"word"</code>. Will return a position that is produced | |
| by moving <code>amount</code> times the distance specified | |
| by <code>unit</code>. When <code>visually</code> is true, motion | |
| in right-to-left text will be visual rather than logical. When | |
| the motion was clipped by hitting the end or start of the | |
| document, the returned value will have a <code>hitSide</code> | |
| property set to true.</dd> | |
| <dt id="findPosV"><code>cm.findPosV(start, amount, unit) → object</code></dt> | |
| <dd>Similar to <a href="#findPosH"><code>findPosH</code></a>, | |
| but used for vertical motion. <code>unit</code> may | |
| be <code>"line"</code> or <code>"page"</code>. The other | |
| arguments and the returned value have the same interpretation as | |
| they have in <code>findPosH</code>.</dd> | |
| </dl> | |
| <h3 id="api_configuration">Configuration methods</h3> | |
| <dl> | |
| <dt id="setOption"><code>cm.setOption(option, value)</code></dt> | |
| <dd>Change the configuration of the editor. <code>option</code> | |
| should the name of an <a href="#config">option</a>, | |
| and <code>value</code> should be a valid value for that | |
| option.</dd> | |
| <dt id="getOption"><code>cm.getOption(option) → value</code></dt> | |
| <dd>Retrieves the current value of the given option for this | |
| editor instance.</dd> | |
| <dt id="addKeyMap"><code>cm.addKeyMap(map)</code></dt> | |
| <dd>Attach an additional <a href="#keymaps">keymap</a> to the editor. This is mostly | |
| useful for add-ons that need to register some key handlers | |
| without trampling on | |
| the <a href="#option_extraKeys"><code>extraKeys</code></a> | |
| option. Maps added in this way have a lower precedence | |
| than <code>extraKeys</code>, a higher precedence than the | |
| base <a href="#option_keyMap"><code>keyMap</code></a>, and | |
| between them, the maps added earlier have a higher precedence | |
| than those added later.</dd> | |
| <dt id="removeKeyMap"><code>cm.removeKeyMap(map)</code></dt> | |
| <dd>Disable a keymap added | |
| with <a href="#addKeyMap"><code>addKeyMap</code></a>. Either | |
| pass in the keymap object itself, or a string, which will be | |
| compared against the <code>name</code> property of the active | |
| keymaps.</dd> | |
| <dt id="addOverlay"><code>cm.addOverlay(mode, options)</code></dt> | |
| <dd>Enable a highlighting overlay. This is a stateless mini-mode | |
| that can be used to add extra highlighting. For example, | |
| the <a href="../demo/search.html">search add-on</a> uses it to | |
| highlight the term that's currently being | |
| searched. <code>mode</code> can be a <a href="#option_mode">mode | |
| spec</a> or a mode object (an object with | |
| a <a href="#token"><code>token</code></a> method). | |
| The <code>option</code> parameter is optional. If given it | |
| should be an object. Currently, only the <code>opaque</code> | |
| option is recognized. This defaults to off, but can be given to | |
| allow the overlay styling, when not <code>null</code>, to | |
| override the styling of the base mode entirely, instead of the | |
| two being applied together.</dd> | |
| <dt id="removeOverlay"><code>cm.removeOverlay(mode)</code></dt> | |
| <dd>Pass this the exact argument passed for | |
| the <code>mode</code> parameter | |
| to <a href="#addOverlay"><code>addOverlay</code></a> to remove | |
| an overlay again.</dd> | |
| <dt id="on"><code>cm.on(type, func)</code></dt> | |
| <dd>Register an event handler for the given event type (a | |
| string) on the editor instance. There is also | |
| a <code>CodeMirror.on(object, type, func)</code> version | |
| that allows registering of events on any object.</dd> | |
| <dt id="off"><code>cm.off(type, func)</code></dt> | |
| <dd>Remove an event handler on the editor instance. An | |
| equivalent <code>CodeMirror.off(object, type, | |
| func)</code> also exists.</dd> | |
| </dl> | |
| <h3 id="api_doc">Document management methods</h3> | |
| <p id="Doc">Each editor is associated with an instance | |
| of <code>CodeMirror.Doc</code>, its document. A document | |
| represents the editor content, plus a selection, an undo history, | |
| and a <a href="#option_mode">mode</a>. A document can only be | |
| associated with a single editor at a time. You can create new | |
| documents by calling the <code>CodeMirror.Doc(text, mode, | |
| firstLineNumber)</code> constructor. The last two arguments are | |
| optional and can be used to set a mode for the document and make | |
| it start at a line number other than 0, respectively.</p> | |
| <dl> | |
| <dt id="getDoc"><code>cm.getDoc() → doc</code></dt> | |
| <dd>Retrieve the currently active document from an editor.</dd> | |
| <dt id="getEditor"><code>doc.getEditor() → editor</code></dt> | |
| <dd>Retrieve the editor associated with a document. May | |
| return <code>null</code>.</dd> | |
| <dt id="swapDoc"><code>cm.swapDoc(doc) → doc</code></dt> | |
| <dd>Attach a new document to the editor. Returns the old | |
| document, which is now no longer associated with an editor.</dd> | |
| <dt id="copy"><code>doc.copy(copyHistory) → doc</code></dt> | |
| <dd>Create an identical copy of the given doc. | |
| When <code>copyHistory</code> is true, the history will also be | |
| copied. Can not be called directly on an editor.</dd> | |
| <dt id="linkedDoc"><code>doc.linkedDoc(options) → doc</code></dt> | |
| <dd>Create a new document that's linked to the target document. | |
| Linked documents will stay in sync (changes to one are also | |
| applied to the other) until <a href="#unlinkDoc">unlinked</a>. | |
| These are the options that are supported: | |
| <dl> | |
| <dt id="linkedDoc_sharedHist"><code>sharedHist (boolean)</code></dt> | |
| <dd>When turned on, the linked copy will share an undo | |
| history with the original. Thus, something done in one of | |
| the two can be undone in the other, and vice versa.</dd> | |
| <dt id="linkedDoc_from"><code>from, to (integer)</code></dt> | |
| <dd>Can be given to make the new document a subview of the | |
| original. Subviews only show a given range of lines. Note | |
| that line coordinates inside the subview will be consistent | |
| with those of the parent, so that for example a subview | |
| starting at line 10 will refer to its first line as line 10, | |
| not 0.</dd> | |
| <dt id="linkedDoc_mode"><code>mode (mode spec)</code></dt> | |
| <dd>By default, the new document inherits the mode of the | |
| parent. This option can be set to | |
| a <a href="#option_mode">mode spec</a> to give it a | |
| different mode.</dd> | |
| </dl></dd> | |
| <dt id="unlinkDoc"><code>doc.unlinkDoc(doc)</code></dt> | |
| <dd>Break the link between two documents. After calling this, | |
| changes will no longer propagate between the documents, and, if | |
| they had a shared history, the history will become | |
| separate.</dd> | |
| <dt id="iterLinkedDocs"><code>doc.iterLinkedDocs(function)</code></dt> | |
| <dd>Will call the given function for all documents linked to the | |
| target document. It will be passed two arguments, the linked document | |
| and a boolean indicating whether that document shares history | |
| with the target.</dd> | |
| </dl> | |
| <h3 id="api_history">History-related methods</h3> | |
| <dl> | |
| <dt id="undo"><code>doc.undo()</code></dt> | |
| <dd>Undo one edit (if any undo events are stored).</dd> | |
| <dt id="redo"><code>doc.redo()</code></dt> | |
| <dd>Redo one undone edit.</dd> | |
| <dt id="historySize"><code>doc.historySize() → object</code></dt> | |
| <dd>Returns an object with <code>{undo, redo}</code> properties, | |
| both of which hold integers, indicating the amount of stored | |
| undo and redo operations.</dd> | |
| <dt id="clearHistory"><code>doc.clearHistory()</code></dt> | |
| <dd>Clears the editor's undo history.</dd> | |
| <dt id="getHistory"><code>doc.getHistory() → object</code></dt> | |
| <dd>Get a (JSON-serializeable) representation of the undo history.</dd> | |
| <dt id="setHistory"><code>doc.setHistory(object)</code></dt> | |
| <dd>Replace the editor's undo history with the one provided, | |
| which must be a value as returned | |
| by <a href="#getHistory"><code>getHistory</code></a>. Note that | |
| this will have entirely undefined results if the editor content | |
| isn't also the same as it was when <code>getHistory</code> was | |
| called.</dd> | |
| </dl> | |
| <h3 id="api_marker">Text-marking methods</h3> | |
| <dl> | |
| <dt id="markText"><code>doc.markText(from, to, options) → object</code></dt> | |
| <dd>Can be used to mark a range of text with a specific CSS | |
| class name. <code>from</code> and <code>to</code> should | |
| be <code>{line, ch}</code> objects. The <code>options</code> | |
| parameter is optional. When given, it should be an object that | |
| may contain the following configuration options: | |
| <dl> | |
| <dt id="mark_className"><code>className (string)</code></dt> | |
| <dd>Assigns a CSS class to the marked stretch of text.</dd> | |
| <dt id="mark_inclusiveLeft"><code>inclusiveLeft (boolean)</code></dt><dd>Determines whether | |
| text inserted on the left of the marker will end up inside | |
| or outside of it.</dd> | |
| <dt id="mark_inclusiveRight"><code>inclusiveRight</code> (boolean)</dt><dd>Like <code>inclusiveLeft</code>, | |
| but for the right side.</dd> | |
| <dt id="mark_atomic"><code>atomic (boolean)</code></dt> | |
| <dd>Atomic ranges act as a single unit when cursor movement is | |
| concerned—i.e. it is impossible to place the cursor inside of | |
| them. In atomic ranges, <code>inclusiveLeft</code> | |
| and <code>inclusiveRight</code> have a different meaning—they | |
| will prevent the cursor from being placed respectively | |
| directly before and directly after the range.</dd> | |
| <dt id="mark_collapsed"><code>collapsed (boolean)</code></dt> | |
| <dd>Collapsed ranges do not show up in the display. Setting a | |
| range to be collapsed will automatically make it atomic.</dd> | |
| <dt id="mark_clearOnEnter"><code>clearOnEnter (boolean)</code></dt> | |
| <dd>When enabled, will cause the mark to clear itself whenever | |
| the cursor enters its range. This is mostly useful for | |
| text-replacement widgets that need to 'snap open' when the | |
| user tries to edit them. A | |
| the <a href="#event_clear"><code>"clear"</code></a> event | |
| fired on the range handle can be used to be notified when this | |
| happens.</dd> | |
| <dt id="mark_replacedWith"><code>replacedWith (dom node)</code></dt> | |
| <dd>Use a given node to display this range. Implies both | |
| collapsed and atomic. The given DOM node <em>must</em> be an | |
| inline element (as opposed to a block element).</dd> | |
| <dt id="mark_readOnly"><code>readOnly</code></dt> | |
| <dd>A read-only span can, as long as it is not cleared, not be | |
| modified except by | |
| calling <a href="#setValue"><code>setValue</code></a> to reset | |
| the whole document. <em>Note:</em> adding a read-only span | |
| currently clears the undo history of the editor, because | |
| existing undo events being partially nullified by read-only | |
| spans would corrupt the history (in the current | |
| implementation).</dd> | |
| <dt id="mark_startStyle"><code>startStyle</code></dt><dd>Can be used to specify | |
| an extra CSS class to be applied to the leftmost span that | |
| is part of the marker.</dd> | |
| <dt id="mark_endStyle"><code>endStyle</code></dt><dd>Equivalent | |
| to <code>startStyle</code>, but for the rightmost span.</dd> | |
| <dt id="mark_shared"><code>shared</code></dt><dd>When the | |
| target document is <a href="#linkedDoc">linked</a> to other | |
| documents, you can set <code>shared</code> to true to make the | |
| marker appear in all documents. By default, a marker appears | |
| only in its target document.</dd> | |
| </dl> | |
| The method will return an object that represents the marker | |
| (with constuctor <code>CodeMirror.TextMarker</code>), which | |
| exposes three methods: | |
| <code>clear()</code>, to remove the mark, | |
| <code>find()</code>, which returns a <code>{from, to}</code> | |
| object (both holding document positions), indicating the current | |
| position of the marked range, or <code>undefined</code> if the | |
| marker is no longer in the document, and | |
| finally <code>getOptions(copyWidget)</code>, which returns an | |
| object representing the options for the marker. | |
| If <code>copyWidget</code> is given an true, it will clone the | |
| value of | |
| the <a href="#mark_replacedWith"><code>replacedWith</code></a> | |
| option, if any.</dd> | |
| <dt id="setBookmark"><code>doc.setBookmark(pos, options) → object</code></dt> | |
| <dd>Inserts a bookmark, a handle that follows the text around it | |
| as it is being edited, at the given position. A bookmark has two | |
| methods <code>find()</code> and <code>clear()</code>. The first | |
| returns the current position of the bookmark, if it is still in | |
| the document, and the second explicitly removes the bookmark. | |
| The options argument is optional. If given, the following | |
| properties are recognized: | |
| <dl> | |
| <dt><code>widget</code></dt><dd>Can be used to display a DOM | |
| node at the current location of the bookmark (analogous to | |
| the <a href="#mark_replacedWith"><code>replacedWith</code></a> | |
| option to <code>markText</code>).</dd> | |
| <dt><code>insertLeft</code></dt><dd>By default, text typed | |
| when the cursor is on top of the bookmark will end up to the | |
| right of the bookmark. Set this option to true to make it go | |
| to the left instead.</dd> | |
| </dl></dd> | |
| <dt id="findMarksAt"><code>doc.findMarksAt(pos) → array</code></dt> | |
| <dd>Returns an array of all the bookmarks and marked ranges | |
| present at the given position.</dd> | |
| <dt id="getAllMarks"><code>doc.getAllMarks() → array</code></dt> | |
| <dd>Returns an array containing all marked ranges in the document.</dd> | |
| </dl> | |
| <h3 id="api_decoration">Widget, gutter, and decoration methods</h3> | |
| <dl> | |
| <dt id="setGutterMarker"><code>cm.setGutterMarker(line, gutterID, value) → lineHandle</code></dt> | |
| <dd>Sets the gutter marker for the given gutter (identified by | |
| its CSS class, see | |
| the <a href="#option_gutters"><code>gutters</code></a> option) | |
| to the given value. Value can be either <code>null</code>, to | |
| clear the marker, or a DOM element, to set it. The DOM element | |
| will be shown in the specified gutter next to the specified | |
| line.</dd> | |
| <dt id="clearGutter"><code>cm.clearGutter(gutterID)</code></dt> | |
| <dd>Remove all gutter markers in | |
| the <a href="#option_gutters">gutter</a> with the given ID.</dd> | |
| <dt id="addLineClass"><code>cm.addLineClass(line, where, class) → lineHandle</code></dt> | |
| <dd>Set a CSS class name for the given line. <code>line</code> | |
| can be a number or a line handle. <code>where</code> determines | |
| to which element this class should be applied, can can be one | |
| of <code>"text"</code> (the text element, which lies in front of | |
| the selection), <code>"background"</code> (a background element | |
| that will be behind the selection), or <code>"wrap"</code> (the | |
| wrapper node that wraps all of the line's elements, including | |
| gutter elements). <code>class</code> should be the name of the | |
| class to apply.</dd> | |
| <dt id="removeLineClass"><code>cm.removeLineClass(line, where, class) → lineHandle</code></dt> | |
| <dd>Remove a CSS class from a line. <code>line</code> can be a | |
| line handle or number. <code>where</code> should be one | |
| of <code>"text"</code>, <code>"background"</code>, | |
| or <code>"wrap"</code> | |
| (see <a href="#addLineClass"><code>addLineClass</code></a>). <code>class</code> | |
| can be left off to remove all classes for the specified node, or | |
| be a string to remove only a specific class.</dd> | |
| <dt id="lineInfo"><code>cm.lineInfo(line) → object</code></dt> | |
| <dd>Returns the line number, text content, and marker status of | |
| the given line, which can be either a number or a line handle. | |
| The returned object has the structure <code>{line, handle, text, | |
| gutterMarkers, textClass, bgClass, wrapClass, widgets}</code>, | |
| where <code>gutterMarkers</code> is an object mapping gutter IDs | |
| to marker elements, and <code>widgets</code> is an array | |
| of <a href="#addLineWidget">line widgets</a> attached to this | |
| line, and the various class properties refer to classes added | |
| with <a href="#addLineClass"><code>addLineClass</code></a>.</dd> | |
| <dt id="addWidget"><code>cm.addWidget(pos, node, scrollIntoView)</code></dt> | |
| <dd>Puts <code>node</code>, which should be an absolutely | |
| positioned DOM node, into the editor, positioned right below the | |
| given <code>{line, ch}</code> position. | |
| When <code>scrollIntoView</code> is true, the editor will ensure | |
| that the entire node is visible (if possible). To remove the | |
| widget again, simply use DOM methods (move it somewhere else, or | |
| call <code>removeChild</code> on its parent).</dd> | |
| <dt id="addLineWidget"><code>cm.addLineWidget(line, node, options) → object</code></dt> | |
| <dd>Adds a line widget, an element shown below a line, spanning | |
| the whole of the editor's width, and moving the lines below it | |
| downwards. <code>line</code> should be either an integer or a | |
| line handle, and <code>node</code> should be a DOM node, which | |
| will be displayed below the given line. <code>options</code>, | |
| when given, should be an object that configures the behavior of | |
| the widget. The following options are supported (all default to | |
| false): | |
| <dl> | |
| <dt><code>coverGutter (boolean)</code></dt> | |
| <dd>Whether the widget should cover the gutter.</dd> | |
| <dt><code>noHScroll (boolean)</code></dt> | |
| <dd>Whether the widget should stay fixed in the face of | |
| horizontal scrolling.</dd> | |
| <dt><code>above (boolean)</code></dt> | |
| <dd>Causes the widget to be placed above instead of below | |
| the text of the line.</dd> | |
| <dt><code>showIfHidden (boolean)</code></dt> | |
| <dd>When true, will cause the widget to be rendered even if | |
| the line it is associated with is hidden.</dd> | |
| </dl> | |
| Note that the widget node will become a descendant of nodes with | |
| CodeMirror-specific CSS classes, and those classes might in some | |
| cases affect it. This method returns an object that represents | |
| the widget placement. It'll have a <code>line</code> property | |
| pointing at the line handle that it is associated with, and the following methods: | |
| <dl> | |
| <dt id="widget_clear"><code>clear()</code></dt><dd>Removes the widget.</dd> | |
| <dt id="widget_changed"><code>changed()</code></dt><dd>Call | |
| this if you made some change to the widget's DOM node that | |
| might affect its height. It'll force CodeMirror to update | |
| the height of the line that contains the widget.</dd> | |
| </dl> | |
| </dd> | |
| <h3 id="api_sizing">Sizing, scrolling and positioning methods</h3> | |
| <dl> | |
| <dt id="setSize"><code>cm.setSize(width, height)</code></dt> | |
| <dd>Programatically set the size of the editor (overriding the | |
| applicable <a href="#css-resize">CSS | |
| rules</a>). <code>width</code> and <code>height</code> height | |
| can be either numbers (interpreted as pixels) or CSS units | |
| (<code>"100%"</code>, for example). You can | |
| pass <code>null</code> for either of them to indicate that that | |
| dimension should not be changed.</dd> | |
| <dt id="scrollTo"><code>cm.scrollTo(x, y)</code></dt> | |
| <dd>Scroll the editor to a given (pixel) position. Both | |
| arguments may be left as <code>null</code> | |
| or <code>undefined</code> to have no effect.</dd> | |
| <dt id="getScrollInfo"><code>cm.getScrollInfo()</code></dt> | |
| <dd>Get an <code>{left, top, width, height, clientWidth, | |
| clientHeight}</code> object that represents the current scroll | |
| position, the size of the scrollable area, and the size of the | |
| visible area (minus scrollbars).</dd> | |
| <dt id="scrollIntoView"><code>cm.scrollIntoView(pos)</code></dt> | |
| <dd>Scrolls the given element into view. <code>pos</code> may be | |
| either a <code>{line, ch}</code> position, referring to a given | |
| character, <code>null</code>, to refer to the cursor, or | |
| a <code>{left, top, right, bottom}</code> object, in | |
| editor-local coordinates.</dd> | |
| <dt id="cursorCoords"><code>cm.cursorCoords(where, mode) → object</code></dt> | |
| <dd>Returns an <code>{left, top, bottom}</code> object | |
| containing the coordinates of the cursor position. | |
| If <code>mode</code> is <code>"local"</code>, they will be | |
| relative to the top-left corner of the editable document. If it | |
| is <code>"page"</code> or not given, they are relative to the | |
| top-left corner of the page. <code>where</code> can be a boolean | |
| indicating whether you want the start (<code>true</code>) or the | |
| end (<code>false</code>) of the selection, or, if a <code>{line, | |
| ch}</code> object is given, it specifies the precise position at | |
| which you want to measure.</dd> | |
| <dt id="charCoords"><code>cm.charCoords(pos, mode) → object</code></dt> | |
| <dd>Returns the position and dimensions of an arbitrary | |
| character. <code>pos</code> should be a <code>{line, ch}</code> | |
| object. This differs from <code>cursorCoords</code> in that | |
| it'll give the size of the whole character, rather than just the | |
| position that the cursor would have when it would sit at that | |
| position.</dd> | |
| <dt id="coordsChar"><code>cm.coordsChar(object) → pos</code></dt> | |
| <dd>Given an <code>{left, top}</code> object (in page coordinates), | |
| returns the <code>{line, ch}</code> position that corresponds to | |
| it.</dd> | |
| <dt id="defaultTextHeight"><code>cm.defaultTextHeight() → number</code></dt> | |
| <dd>Returns the line height of the default font for the editor.</dd> | |
| <dt id="getViewport"><code>cm.getViewport() → object</code></dt> | |
| <dd>Returns a <code>{from, to}</code> object indicating the | |
| start (inclusive) and end (exclusive) of the currently rendered | |
| part of the document. In big documents, when most content is | |
| scrolled out of view, CodeMirror will only render the visible | |
| part, and a margin around it. See also | |
| the <a href="#event_viewportChange"><code>viewportChange</code></a> | |
| event.</dd> | |
| <dt id="refresh"><code>cm.refresh()</code></dt> | |
| <dd>If your code does something to change the size of the editor | |
| element (window resizes are already listened for), or unhides | |
| it, you should probably follow up by calling this method to | |
| ensure CodeMirror is still looking as intended.</dd> | |
| </dl> | |
| <h3 id="api_mode">Mode, state, and token-related methods</h3> | |
| <p>When writing language-aware functionality, it can often be | |
| useful to hook into the knowledge thate the CodeMirror language | |
| mode has. See <a href="#modeapi">the section on modes</a> for a | |
| more detailed description of how these work.</p> | |
| <dl> | |
| <dt id="getMode"><code>doc.getMode() → object</code></dt> | |
| <dd>Gets the mode object for the editor. Note that this is | |
| distinct from <code>getOption("mode")</code>, which gives you | |
| the mode specification, rather than the resolved, instantiated | |
| <a href="#defineMode">mode object</a>.</dd> | |
| <dt id="getTokenAt"><code>cm.getTokenAt(pos) → object</code></dt> | |
| <dd>Retrieves information about the token the current mode found | |
| before the given position (a <code>{line, ch}</code> object). The | |
| returned object has the following properties: | |
| <dl> | |
| <dt><code>start</code></dt><dd>The character (on the given line) at which the token starts.</dd> | |
| <dt><code>end</code></dt><dd>The character at which the token ends.</dd> | |
| <dt><code>string</code></dt><dd>The token's string.</dd> | |
| <dt><code>type</code></dt><dd>The token type the mode assigned | |
| to the token, such as <code>"keyword"</code> | |
| or <code>"comment"</code> (may also be null).</dd> | |
| <dt><code>state</code></dt><dd>The mode's state at the end of this token.</dd> | |
| </dl></dd> | |
| <dt id="getStateAfter"><code>cm.getStateAfter(line) → state</code></dt> | |
| <dd>Returns the mode's parser state, if any, at the end of the | |
| given line number. If no line number is given, the state at the | |
| end of the document is returned. This can be useful for storing | |
| parsing errors in the state, or getting other kinds of | |
| contextual information for a line.</dd> | |
| </dl> | |
| <h3 id="api_misc">Miscellaneous methods</h3> | |
| <dl> | |
| <dt id="operation"><code>cm.operation(func) → result</code></dt> | |
| <dd>CodeMirror internally buffers changes and only updates its | |
| DOM structure after it has finished performing some operation. | |
| If you need to perform a lot of operations on a CodeMirror | |
| instance, you can call this method with a function argument. It | |
| will call the function, buffering up all changes, and only doing | |
| the expensive update after the function returns. This can be a | |
| lot faster. The return value from this method will be the return | |
| value of your function.</dd> | |
| <dt id="indentLine"><code>cm.indentLine(line, dir)</code></dt> | |
| <dd>Adjust the indentation of the given line. The second | |
| argument (which defaults to <code>"smart"</code>) may be one of: | |
| <dl> | |
| <dt><code>"prev"</code></dt> | |
| <dd>Base indentation on the indentation of the previous line.</dd> | |
| <dt><code>"smart"</code></dt> | |
| <dd>Use the mode's smart indentation if available, behave | |
| like <code>"prev"</code> otherwise.</dd> | |
| <dt><code>"add"</code></dt> | |
| <dd>Increase the indentation of the line by | |
| one <a href="#option_indentUnit">indent unit</a>.</dd> | |
| <dt><code>"subtract"</code></dt> | |
| <dd>Reduce the indentation of the line.</dd> | |
| </dl></dd> | |
| <dt id="posFromIndex"><code>doc.posFromIndex(index) → object</code></dt> | |
| <dd>Calculates and returns a <code>{line, ch}</code> object for a | |
| zero-based <code>index</code> who's value is relative to the start of the | |
| editor's text. If the <code>index</code> is out of range of the text then | |
| the returned object is clipped to start or end of the text | |
| respectively.</dd> | |
| <dt id="indexFromPos"><code>doc.indexFromPos(object) → number</code></dt> | |
| <dd>The reverse of <a href="#posFromIndex"><code>posFromIndex</code></a>.</dd> | |
| <dt id="focus"><code>cm.focus()</code></dt> | |
| <dd>Give the editor focus.</dd> | |
| <dt id="getInputField"><code>cm.getInputField() → textarea</code></dt> | |
| <dd>Returns the hidden textarea used to read input.</dd> | |
| <dt id="getWrapperElement"><code>cm.getWrapperElement() → node</code></dt> | |
| <dd>Returns the DOM node that represents the editor, and | |
| controls its size. Remove this from your tree to delete an | |
| editor instance.</dd> | |
| <dt id="getScrollerElement"><code>cm.getScrollerElement() → node</code></dt> | |
| <dd>Returns the DOM node that is responsible for the scrolling | |
| of the editor.</dd> | |
| <dt id="getGutterElement"><code>cm.getGutterElement() → node</code></dt> | |
| <dd>Fetches the DOM node that contains the editor gutters.</dd> | |
| </dl> | |
| <h3 id="api_static">Static properties</h3> | |
| <p id="version">The <code>CodeMirror</code> object itself provides | |
| several useful properties. Firstly, its <code>version</code> | |
| property contains a string that indicates the version of the | |
| library. For releases, this simply | |
| contains <code>"major.minor"</code> (for | |
| example <code>"2.33"</code>. For beta versions, <code>" B"</code> | |
| (space, capital B) is added at the end of the string, for | |
| development snapshots, <code>" +"</code> (space, plus) is | |
| added.</p> | |
| <p id="fromTextArea">The <code>CodeMirror.fromTextArea</code> | |
| method provides another way to initialize an editor. It takes a | |
| textarea DOM node as first argument and an optional configuration | |
| object as second. It will replace the textarea with a CodeMirror | |
| instance, and wire up the form of that textarea (if any) to make | |
| sure the editor contents are put into the textarea when the form | |
| is submitted. A CodeMirror instance created this way has three | |
| additional methods:</p> | |
| <dl> | |
| <dt id="save"><code>cm.save()</code></dt> | |
| <dd>Copy the content of the editor into the textarea.</dd> | |
| <dt id="toTextArea"><code>cm.toTextArea()</code></dt> | |
| <dd>Remove the editor, and restore the original textarea (with | |
| the editor's current content).</dd> | |
| <dt id="getTextArea"><code>cm.getTextArea() → textarea</code></dt> | |
| <dd>Returns the textarea that the instance was based on.</dd> | |
| </dl> | |
| <p id="defineExtension">If you want to define extra methods in terms | |
| of the CodeMirror API, it is possible to | |
| use <code>CodeMirror.defineExtension(name, value)</code>. This | |
| will cause the given value (usually a method) to be added to all | |
| CodeMirror instances created from then on.</p> | |
| <p id="defineOption">Similarly, <code>CodeMirror.defineOption(name, | |
| default, updateFunc)</code> can be used to define new options for | |
| CodeMirror. The <code>updateFunc</code> will be called with the | |
| editor instance and the new value when an editor is initialized, | |
| and whenever the option is modified | |
| through <a href="#setOption"><code>setOption</code></a>.</p> | |
| <p id="defineInitHook">If your extention just needs to run some | |
| code whenever a CodeMirror instance is initialized, | |
| use <code>CodeMirror.defineInitHook</code>. Give it a function as | |
| its only argument, and from then on, that function will be called | |
| (with the instance as argument) whenever a new CodeMirror instance | |
| is initialized.</p> | |
| <h2 id="addons">Add-ons</h2> | |
| <p>The <code>addon</code> directory in the distribution contains a | |
| number of reusable components that implement extra editor | |
| functionality. In brief, they are:</p> | |
| <dl> | |
| <dt id="addon_dialog"><a href="../addon/dialog/dialog.js"><code>dialog/dialog.js</code></a></dt> | |
| <dd>Provides a very simple way to query users for text input. | |
| Adds an <code>openDialog</code> method to CodeMirror instances, | |
| which can be called with an HTML fragment that provides the | |
| prompt (should include an <code>input</code> tag), and a | |
| callback function that is called when text has been entered. | |
| Depends on <code>addon/dialog/dialog.css</code>.</dd> | |
| <dt id="addon_searchcursor"><a href="../addon/search/searchcursor.js"><code>search/searchcursor.js</code></a></dt> | |
| <dd>Adds the <code>getSearchCursor(query, start, caseFold) → | |
| cursor</code> method to CodeMirror instances, which can be used | |
| to implement search/replace functionality. <code>query</code> | |
| can be a regular expression or a string (only strings will match | |
| across lines—if they contain newlines). <code>start</code> | |
| provides the starting position of the search. It can be | |
| a <code>{line, ch}</code> object, or can be left off to default | |
| to the start of the document. <code>caseFold</code> is only | |
| relevant when matching a string. It will cause the search to be | |
| case-insensitive. A search cursor has the following methods: | |
| <dl> | |
| <dt><code>findNext(), findPrevious() → boolean</code></dt> | |
| <dd>Search forward or backward from the current position. | |
| The return value indicates whether a match was found. If | |
| matching a regular expression, the return value will be the | |
| array returned by the <code>match</code> method, in case you | |
| want to extract matched groups.</dd> | |
| <dt><code>from(), to() → object</code></dt> | |
| <dd>These are only valid when the last call | |
| to <code>findNext</code> or <code>findPrevious</code> did | |
| not return false. They will return <code>{line, ch}</code> | |
| objects pointing at the start and end of the match.</dd> | |
| <dt><code>replace(text)</code></dt> | |
| <dd>Replaces the currently found match with the given text | |
| and adjusts the cursor position to reflect the | |
| replacement.</dd> | |
| </dl></dd> | |
| <dt id="addon_search"><a href="../addon/search/search.js"><code>search/search.js</code></a></dt> | |
| <dd>Implements the search commands. CodeMirror has keys bound to | |
| these by default, but will not do anything with them unless an | |
| implementation is provided. Depends | |
| on <code>searchcursor.js</code>, and will make use | |
| of <a href="#addon_dialog"><code>openDialog</code></a> when | |
| available to make prompting for search queries less ugly.</dd> | |
| <dt id="addon_matchbrackets"><a href="../addon/edit/matchbrackets.js"><code>edit/matchbrackets.js</code></a></dt> | |
| <dd>Defines an option <code>matchBrackets</code> which, when set | |
| to true, causes matching brackets to be highlighted whenever the | |
| cursor is next to them. It also adds a | |
| method <code>matchBrackets</code> that forces this to happen | |
| once, and a method <code>findMatchingBracket</code> that can be | |
| used to run the bracket-finding algorithm that this uses | |
| internally.</dd> | |
| <dt id="addon_closebrackets"><a href="../addon/edit/closebrackets.js"><code>edit/closebrackets.js</code></a></dt> | |
| <dd>Defines an option <code>autoCloseBrackets</code> that will | |
| auto-close brackets and quotes when typed. By default, it'll | |
| auto-close <code>()[]{}''""</code>, but you can pass it a | |
| string similar to that (containing pairs of matching characters) | |
| to customize it. <a href="../demo/closebrackets.html">Demo | |
| here</a>.</dd> | |
| <dt id="addon_foldcode"><a href="../addon/fold/foldcode.js"><code>fold/foldcode.js</code></a></dt> | |
| <dd>Helps with code folding. | |
| See <a href="../demo/folding.html">the demo</a> for an example. | |
| Call <code>CodeMirror.newFoldFunction</code> with a range-finder | |
| helper function to create a function that will, when applied to | |
| a CodeMirror instance and a line number, attempt to fold or | |
| unfold the block starting at the given line. A range-finder is a | |
| language-specific function that also takes an instance and a | |
| line number, and returns an range to be folded, or null if | |
| no block is started on that line. This file | |
| provides <code>CodeMirror.braceRangeFinder</code>, which finds | |
| blocks in brace languages (JavaScript, C, Java, | |
| etc), <code>CodeMirror.indentRangeFinder</code>, for languages | |
| where indentation determines block structure (Python, Haskell), | |
| and <code>CodeMirror.tagRangeFinder</code>, for XML-style | |
| languages.</dd> | |
| <dt id="addon_collapserange"><a href="../addon/fold/collapserange.js"><code>fold/collapserange.js</code></a></dt> | |
| <dd>Another approach to | |
| folding. <a href="../demo/collapserange.html">See demo</a>. | |
| Allows the user to select a range to fold by clicking in the | |
| gutter.</dd> | |
| <dt id="addon_runmode"><a href="../addon/runmode/runmode.js"><code>runmode/runmode.js</code></a></dt> | |
| <dd>Can be used to run a CodeMirror mode over text without | |
| actually opening an editor instance. | |
| See <a href="../demo/runmode.html">the demo</a> for an example. | |
| There are alternate versions of the file avaible for | |
| running <a href="../addon/runmode/runmode-standalone.js">stand-alone</a> | |
| (without including all of CodeMirror) and | |
| for <a href="../addon/runmode/runmode.node.js">running under | |
| node.js</a>.</dd> | |
| <dt id="addon_overlay"><a href="../addon/mode/overlay.js"><code>mode/overlay.js</code></a></dt> | |
| <dd>Mode combinator that can be used to extend a mode with an | |
| 'overlay' — a secondary mode is run over the stream, along with | |
| the base mode, and can color specific pieces of text without | |
| interfering with the base mode. | |
| Defines <code>CodeMirror.overlayMode</code>, which is used to | |
| create such a mode. See <a href="../demo/mustache.html">this | |
| demo</a> for a detailed example.</dd> | |
| <dt id="addon_multiplex"><a href="../addon/mode/multiplex.js"><code>mode/multiplex.js</code></a></dt> | |
| <dd>Mode combinator that can be used to easily 'multiplex' | |
| between several modes. | |
| Defines <code>CodeMirror.multiplexingMode</code> which, when | |
| given as first argument a mode object, and as other arguments | |
| any number of <code>{open, close, mode [, delimStyle]}</code> | |
| objects, will return a mode object that starts parsing using the | |
| mode passed as first argument, but will switch to another mode | |
| as soon as it encounters a string that occurs in one of | |
| the <code>open</code> fields of the passed objects. When in a | |
| sub-mode, it will go back to the top mode again when | |
| the <code>close</code> string is encountered. | |
| Pass <code>"\n"</code> for <code>open</code> or <code>close</code> | |
| if you want to switch on a blank line. | |
| When <code>delimStyle</code> is specified, it will be the token | |
| style returned for the delimiter tokens. The outer mode will not | |
| see the content between the delimiters. | |
| See <a href="../demo/multiplex.html">this demo</a> for an | |
| example.</dd> | |
| <dt id="addon_show-hint"><a href="../addon/hint/show-hint.js"><code>hint/show-hint.js</code></a></dt> | |
| <dd>Provides a framework for showing autocompletion hints. | |
| Defines <code>CodeMirror.showHint</code>, which takes a | |
| CodeMirror instance and a hinting function, and pops up a widget | |
| that allows the user to select a completion. Hinting functions | |
| are function that take an editor instance, and return | |
| a <code>{list, from, to}</code> object, where <code>list</code> | |
| is an array of strings (the completions), and <code>from</code> | |
| and <code>to</code> give the start and end of the token that is | |
| being completed. Depends | |
| on <code>addon/hint/show-hint.css</code>. See the other files in | |
| the <a href="../addon/hint/"><code>addon/hint</code></a> for | |
| hint sources for various languages. Check | |
| out <a href="../demo/complete.html">the demo</a> for an | |
| example.</dd> | |
| <dt id="addon_match-highlighter"><a href="../addon/search/match-highlighter.js"><code>match-highlighter.js</code></a></dt> | |
| <dd>Adds a <code>highlightSelectionMatches</code> option that | |
| can be enabled to highlight all instances of a currently | |
| selected word. | |
| Demo <a href="../demo/matchhighlighter.html">here</a>.</dd> | |
| <dt id="addon_lint"><a href="../addon/lint/lint.js"><code>lint/lint.js</code></a></dt> | |
| <dd>Defines an interface component for showing linting warnings, | |
| with pluggable warning sources | |
| (see <a href="../addon/lint/json-lint.js"><code>json-lint.js</code></a> | |
| and <a href="../addon/lint/javascript-lint.js"><code>javascript-lint.js</code></a> | |
| in the same directory). Defines a <code>lintWith</code> option | |
| that can be set to a warning source (for | |
| example <code>CodeMirror.javascriptValidator</code>). Depends | |
| on <code>addon/lint/lint.css</code>. A demo can be | |
| found <a href="../demo/lint.html">here</a>.</dd> | |
| <dt id="addon_mark-selection"><a href="../addon/selection/mark-selection.js"><code>selection/mark-selection.js</code></a></dt> | |
| <dd>Causes the selected text to be marked with the CSS class | |
| <code>CodeMirror-selectedtext</code> when the <code>styleSelectedText</code> option | |
| is enabled. Useful to change the colour of the selection (in addition to the background), | |
| like in <a href="../demo/markselection.html">this demo</a>.</dd> | |
| <dt id="addon_active-line"><a href="../addon/selection/active-line.js"><code>selection/active-line.js</code></a></dt> | |
| <dd>Defines a <code>styleActiveLine</code> option that, when enabled, | |
| gives the wrapper of the active line the class <code>CodeMirror-activeline</code>, | |
| and adds a background with the class <code>CodeMirror-activeline-background</code>. | |
| is enabled. See the <a href="../demo/activeline.html">demo</a>.</dd> | |
| <dt id="addon_closetag"><a href="../addon/edit/closetag.js"><code>edit/closetag.js</code></a></dt> | |
| <dd>Provides utility functions for adding automatic tag closing | |
| to XML modes. See | |
| the <a href="../demo/closetag.html">demo</a>.</dd> | |
| <dt id="addon_loadmode"><a href="../addon/mode/loadmode.js"><code>mode/loadmode.js</code></a></dt> | |
| <dd>Defines a <code>CodeMirror.requireMode(modename, | |
| callback)</code> function that will try to load a given mode and | |
| call the callback when it succeeded. You'll have to | |
| set <code>CodeMirror.modeURL</code> to a string that mode paths | |
| can be constructed from, for | |
| example <code>"mode/%N/%N.js"</code>—the <code>%N</code>'s will | |
| be replaced with the mode name. Also | |
| defines <code>CodeMirror.autoLoadMode(instance, mode)</code>, | |
| which will ensure the given mode is loaded and cause the given | |
| editor instance to refresh its mode when the loading | |
| succeeded. See the <a href="../demo/loadmode.html">demo</a>.</dd> | |
| <dt id="addon_continuecomment"><a href="../addon/edit/continuecomment.js"><code>edit/continuecomment.js</code></a></dt> | |
| <dd>Adds a <a href="#commands">command</a> | |
| called <code>newlineAndIndentContinueComment</code> that you can | |
| bind <code>Enter</code> to in order to have the editor prefix | |
| new lines inside C-like block comments with an asterisk.</dd> | |
| </dl> | |
| <h2 id="modeapi">Writing CodeMirror Modes</h2> | |
| <p>Modes typically consist of a single JavaScript file. This file | |
| defines, in the simplest case, a lexer (tokenizer) for your | |
| language—a function that takes a character stream as input, | |
| advances it past a token, and returns a style for that token. More | |
| advanced modes can also handle indentation for the language.</p> | |
| <p id="defineMode">The mode script should | |
| call <code>CodeMirror.defineMode</code> to register itself with | |
| CodeMirror. This function takes two arguments. The first should be | |
| the name of the mode, for which you should use a lowercase string, | |
| preferably one that is also the name of the files that define the | |
| mode (i.e. <code>"xml"</code> is defined in <code>xml.js</code>). The | |
| second argument should be a function that, given a CodeMirror | |
| configuration object (the thing passed to | |
| the <code>CodeMirror</code> function) and an optional mode | |
| configuration object (as in | |
| the <a href="#option_mode"><code>mode</code></a> option), returns | |
| a mode object.</p> | |
| <p>Typically, you should use this second argument | |
| to <code>defineMode</code> as your module scope function (modes | |
| should not leak anything into the global scope!), i.e. write your | |
| whole mode inside this function.</p> | |
| <p>The main responsibility of a mode script is <em>parsing</em> | |
| the content of the editor. Depending on the language and the | |
| amount of functionality desired, this can be done in really easy | |
| or extremely complicated ways. Some parsers can be stateless, | |
| meaning that they look at one element (<em>token</em>) of the code | |
| at a time, with no memory of what came before. Most, however, will | |
| need to remember something. This is done by using a <em>state | |
| object</em>, which is an object that is always passed when | |
| reading a token, and which can be mutated by the tokenizer.</p> | |
| <p id="startState">Modes that use a state must define | |
| a <code>startState</code> method on their mode object. This is a | |
| function of no arguments that produces a state object to be used | |
| at the start of a document.</p> | |
| <p id="token">The most important part of a mode object is | |
| its <code>token(stream, state)</code> method. All modes must | |
| define this method. It should read one token from the stream it is | |
| given as an argument, optionally update its state, and return a | |
| style string, or <code>null</code> for tokens that do not have to | |
| be styled. For your styles, you are encouraged to use the | |
| 'standard' names defined in the themes (without | |
| the <code>cm-</code> prefix). If that fails, it is also possible | |
| to come up with your own and write your own CSS theme file.<p> | |
| <p id="StringStream">The stream object that's passed | |
| to <code>token</code> encapsulates a line of code (tokens may | |
| never span lines) and our current position in that line. It has | |
| the following API:</p> | |
| <dl> | |
| <dt><code>eol() → boolean</code></dt> | |
| <dd>Returns true only if the stream is at the end of the | |
| line.</dd> | |
| <dt><code>sol() → boolean</code></dt> | |
| <dd>Returns true only if the stream is at the start of the | |
| line.</dd> | |
| <dt><code>peek() → character</code></dt> | |
| <dd>Returns the next character in the stream without advancing | |
| it. Will return an <code>null</code> at the end of the | |
| line.</dd> | |
| <dt><code>next() → character</code></dt> | |
| <dd>Returns the next character in the stream and advances it. | |
| Also returns <code>null</code> when no more characters are | |
| available.</dd> | |
| <dt><code>eat(match) → character</code></dt> | |
| <dd><code>match</code> can be a character, a regular expression, | |
| or a function that takes a character and returns a boolean. If | |
| the next character in the stream 'matches' the given argument, | |
| it is consumed and returned. Otherwise, <code>undefined</code> | |
| is returned.</dd> | |
| <dt><code>eatWhile(match) → boolean</code></dt> | |
| <dd>Repeatedly calls <code>eat</code> with the given argument, | |
| until it fails. Returns true if any characters were eaten.</dd> | |
| <dt><code>eatSpace() → boolean</code></dt> | |
| <dd>Shortcut for <code>eatWhile</code> when matching | |
| white-space.</dd> | |
| <dt><code>skipToEnd()</code></dt> | |
| <dd>Moves the position to the end of the line.</dd> | |
| <dt><code>skipTo(ch) → boolean</code></dt> | |
| <dd>Skips to the next occurrence of the given character, if | |
| found on the current line (doesn't advance the stream if the | |
| character does not occur on the line). Returns true if the | |
| character was found.</dd> | |
| <dt><code>match(pattern, consume, caseFold) → boolean</code></dt> | |
| <dd>Act like a | |
| multi-character <code>eat</code>—if <code>consume</code> is true | |
| or not given—or a look-ahead that doesn't update the stream | |
| position—if it is false. <code>pattern</code> can be either a | |
| string or a regular expression starting with <code>^</code>. | |
| When it is a string, <code>caseFold</code> can be set to true to | |
| make the match case-insensitive. When successfully matching a | |
| regular expression, the returned value will be the array | |
| returned by <code>match</code>, in case you need to extract | |
| matched groups.</dd> | |
| <dt><code>backUp(n)</code></dt> | |
| <dd>Backs up the stream <code>n</code> characters. Backing it up | |
| further than the start of the current token will cause things to | |
| break, so be careful.</dd> | |
| <dt><code>column() → integer</code></dt> | |
| <dd>Returns the column (taking into account tabs) at which the | |
| current token starts.</dd> | |
| <dt><code>indentation() → integer</code></dt> | |
| <dd>Tells you how far the current line has been indented, in | |
| spaces. Corrects for tab characters.</dd> | |
| <dt><code>current() → string</code></dt> | |
| <dd>Get the string between the start of the current token and | |
| the current stream position.</dd> | |
| </dl> | |
| <p id="blankLine">By default, blank lines are simply skipped when | |
| tokenizing a document. For languages that have significant blank | |
| lines, you can define a <code>blankLine(state)</code> method on | |
| your mode that will get called whenever a blank line is passed | |
| over, so that it can update the parser state.</p> | |
| <p id="copyState">Because state object are mutated, and CodeMirror | |
| needs to keep valid versions of a state around so that it can | |
| restart a parse at any line, copies must be made of state objects. | |
| The default algorithm used is that a new state object is created, | |
| which gets all the properties of the old object. Any properties | |
| which hold arrays get a copy of these arrays (since arrays tend to | |
| be used as mutable stacks). When this is not correct, for example | |
| because a mode mutates non-array properties of its state object, a | |
| mode object should define a <code>copyState</code> method, | |
| which is given a state and should return a safe copy of that | |
| state.</p> | |
| <p id="indent">If you want your mode to provide smart indentation | |
| (through the <a href="#indentLine"><code>indentLine</code></a> | |
| method and the <code>indentAuto</code> | |
| and <code>newlineAndIndent</code> commands, to which keys can be | |
| <a href="#option_extraKeys">bound</a>), you must define | |
| an <code>indent(state, textAfter)</code> method on your mode | |
| object.</p> | |
| <p>The indentation method should inspect the given state object, | |
| and optionally the <code>textAfter</code> string, which contains | |
| the text on the line that is being indented, and return an | |
| integer, the amount of spaces to indent. It should usually take | |
| the <a href="#option_indentUnit"><code>indentUnit</code></a> | |
| option into account. An indentation method may | |
| return <code>CodeMirror.Pass</code> to indicate that it | |
| could not come up with a precise indentation.</p> | |
| <p id="electricChars">Finally, a mode may define | |
| an <code>electricChars</code> property, which should hold a string | |
| containing all the characters that should trigger the behaviour | |
| described for | |
| the <a href="#option_electricChars"><code>electricChars</code></a> | |
| option.</p> | |
| <p>So, to summarize, a mode <em>must</em> provide | |
| a <code>token</code> method, and it <em>may</em> | |
| provide <code>startState</code>, <code>copyState</code>, | |
| and <code>indent</code> methods. For an example of a trivial mode, | |
| see the <a href="../mode/diff/diff.js">diff mode</a>, for a more | |
| involved example, see the <a href="../mode/clike/clike.js">C-like | |
| mode</a>.</p> | |
| <p>Sometimes, it is useful for modes to <em>nest</em>—to have one | |
| mode delegate work to another mode. An example of this kind of | |
| mode is the <a href="../mode/htmlmixed/htmlmixed.js">mixed-mode HTML | |
| mode</a>. To implement such nesting, it is usually necessary to | |
| create mode objects and copy states yourself. To create a mode | |
| object, there are <code>CodeMirror.getMode(options, | |
| parserConfig)</code>, where the first argument is a configuration | |
| object as passed to the mode constructor function, and the second | |
| argument is a mode specification as in | |
| the <a href="#option_mode"><code>mode</code></a> option. To copy a | |
| state object, call <code>CodeMirror.copyState(mode, state)</code>, | |
| where <code>mode</code> is the mode that created the given | |
| state.</p> | |
| <p id="innerMode">In a nested mode, it is recommended to add an | |
| extra methods, <code>innerMode</code> which, given a state object, | |
| returns a <code>{state, mode}</code> object with the inner mode | |
| and its state for the current position. These are used by utility | |
| scripts such as the <a href="#addon_formatting">autoformatter</a> | |
| and the <a href="#addon_closetag">tag closer</a> to get context | |
| information. Use the <code>CodeMirror.innerMode</code> helper | |
| function to, starting from a mode and a state, recursively walk | |
| down to the innermost mode and state.</p> | |
| <p>To make indentation work properly in a nested parser, it is | |
| advisable to give the <code>startState</code> method of modes that | |
| are intended to be nested an optional argument that provides the | |
| base indentation for the block of code. The JavaScript and CSS | |
| parser do this, for example, to allow JavaScript and CSS code | |
| inside the mixed-mode HTML mode to be properly indented.</p> | |
| <p>It is possible, and encouraged, to associate your mode, or a | |
| certain configuration of your mode, with | |
| a <a href="http://en.wikipedia.org/wiki/MIME">MIME</a> type. For | |
| example, the JavaScript mode associates itself | |
| with <code>text/javascript</code>, and its JSON variant | |
| with <code>application/json</code>. To do this, | |
| call <code>CodeMirror.defineMIME(mime, modeSpec)</code>, | |
| where <code>modeSpec</code> can be a string or object specifying a | |
| mode, as in the <a href="#option_mode"><code>mode</code></a> | |
| option.</p> | |
| <p id="extendMode">Sometimes, it is useful to add or override mode | |
| object properties from external code. | |
| The <code>CodeMirror.extendMode</code> can be used to add | |
| properties to mode objects produced for a specific mode. Its first | |
| argument is the name of the mode, its second an object that | |
| specifies the properties that should be added. This is mostly | |
| useful to add utilities that can later be looked | |
| up through <a href="#getMode"><code>getMode</code></a>.</p> | |
| </div><div class="rightsmall blk"> | |
| <h2>Contents</h2> | |
| <ul> | |
| <li><a href="#overview">Overview</a></li> | |
| <li><a href="#usage">Basic Usage</a></li> | |
| <li><a href="#config">Configuration</a></li> | |
| <li><a href="#events">Events</a></li> | |
| <li><a href="#keymaps">Keymaps</a></li> | |
| <li><a href="#styling">Customized Styling</a></li> | |
| <li><a href="#api">Programming API</a> | |
| <ul> | |
| <li><a href="#api_content">Content manipulation</a></li> | |
| <li><a href="#api_selection">Selection</a></li> | |
| <li><a href="#api_configuration">Configuration</a></li> | |
| <li><a href="#api_doc">Document management</a></li> | |
| <li><a href="#api_history">History</a></li> | |
| <li><a href="#api_marker">Text-marking</a></li> | |
| <li><a href="#api_decoration">Widget, gutter, and decoration</a></li> | |
| <li><a href="#api_sizing">Sizing, scrolling, and positioning</a></li> | |
| <li><a href="#api_mode">Mode, state, and tokens</a></li> | |
| <li><a href="#api_misc">Miscellaneous methods</a></li> | |
| <li><a href="#api_static">Static properties</a></li> | |
| </ul> | |
| </li> | |
| <li><a href="#addons">Add-ons</a></li> | |
| <li><a href="#modeapi">Writing CodeMirror Modes</a></li> | |
| </ul> | |
| </div></div> | |
| <div style="height: 2em"> </div> | |
| <script>setTimeout(function(){CodeMirror.colorize();}, 20);</script> | |
| </body> | |
| </html> | |