CodeMirror: Release History

## Release notes and version history

## Version 5.x

20-02-2018: Version 5.35.0:

- Fix problem where selection undo might change read-only documents.
- Fix crash when calling `addLineWidget` on a document that has no attached editor.
- searchcursor addon: Fix behavior of `^` in multiline regexp mode.
- match-highlighter addon: Fix problem with matching words that have regexp special syntax in them.
- sublime bindings: Fix `addCursorToSelection` for short lines.
- vim bindings: Support alternative delimiters in replace command.
- javascript mode: Support TypeScript intersection types, dynamic `import`.
- stex mode: Fix parsing of `\(` `\)` delimiters, recognize more atom arguments.
- haskell mode: Highlight more builtins, support `<*` and `*>`.
- sql mode: Make it possible to disable backslash escapes in strings for dialects that don't have them, do this for MS SQL.
- dockerfile mode: Highlight strings and ports, recognize more instructions.

29-01-2018: Version 5.34.0:

- markdown mode: Fix a problem where inline styles would persist across list items.
- sublime bindings: Fix the `toggleBookmark` command.
- closebrackets addon: Improve behavior when closing triple quotes.
- xml-fold addon: Fix folding of line-broken XML tags.
- shell mode: Better handling of nested quoting.
- javascript-lint addon: Clean up and simplify.
- matchbrackets addon: Fix support for multiple editors at the same time.
- New themes: oceanic-next and shadowfox.

21-12-2017: Version 5.33.0:

- lint addon: Make updates more efficient.
- css mode: The mode is now properly case-insensitive.
- continuelist addon: Fix broken handling of unordered lists introduced in previous release.
- swift and scala modes: Support nested block comments.
- mllike mode: Improve OCaml support.
- sublime bindings: Use the proper key bindings for `addCursorToNextLine` and `addCursorToPrevLine`.
- jsx mode: Support JSX fragments.
- closetag addon: Add an option to disable auto-indenting.

22-11-2017: Version 5.32.0:

- Increase contrast on default bracket-matching colors.
- javascript mode: Recognize TypeScript type parameters for calls, type guards, and type parameter defaults. Improve handling of `enum` and `module` keywords.
- comment addon: Fix bug when uncommenting a comment that spans all but the last selected line.
- searchcursor addon: Fix bug in case folding.
- emacs bindings: Prevent single-character deletions from resetting the kill ring.
- closebrackets addon: Tweak quote matching behavior.
- continuelist addon: Increment ordered list numbers when adding one.

20-10-2017: Version 5.31.0:

- Modes added with `addOverlay` now have access to a `baseToken` method on their input stream, giving access to the tokens of the underlying mode.
- Further improve selection drawing and cursor motion in right-to-left documents.
- vim bindings: Fix ctrl-w behavior, support quote-dot and backtick-dot marks, make the wide cursor visible in contentEditable input mode.
- continuecomment addon: Fix bug when pressing enter after a single-line block comment.
- markdown mode: Fix issue with leaving indented fenced code blocks.
- javascript mode: Fix bad parsing of operators without spaces between them. Fix some corner cases around semicolon insertion and regexps.

20-09-2017: Version 5.30.0:

- Fixed a number of issues with drawing right-to-left selections and mouse selection in bidirectional text.
- search addon: Fix crash when restarting search after doing empty search.
- mark-selection addon: Fix off-by-one bug.
- tern addon: Fix bad request made when editing at the bottom of a large document.
- javascript mode: Improve parsing in a number of corner cases.
- markdown mode: Fix crash when a sub-mode doesn't support indentation, allow uppercase X in task lists.
- gfm mode: Don't highlight SHA1 'hashes' without numbers to avoid false positives.
- soy mode: Support injected data and `@param` in comments.
- simple mode addon: Allow groups in regexps when `token` isn't an array.

24-08-2017: Version 5.29.0:

- Fix crash in contentEditable input style when editing near a bookmark.
- Make sure change origins are preserved when splitting changes on read-only marks.
- javascript mode: More support for TypeScript syntax.
- d mode: Support nested comments.
- python mode: Improve tokenizing of operators.
- markdown mode: Further improve CommonMark conformance.
- css mode: Don't run comment tokens through the mode's state machine.
- shell mode: Allow strings to span lines.
- search addon: Fix crash in persistent search when `extraKeys` is null.

21-07-2017: Version 5.28.0:

- Fix copying of, or replacing editor content with, a single dash character when copying a big selection in some corner cases.
- Make `"goLineLeft"`/`"goLineRight"` behave better on wrapped lines.
- sql mode: Fix tokenizing of multi-dot operator and allow digits in subfield names.
- searchcursor addon: Fix infinite loop on some composed character inputs.
- markdown mode: Make list parsing more CommonMark-compliant.
- gfm mode: Highlight colon syntax for emoji.

29-06-2017: Version 5.27.4:

- Fix crash when using mode lookahead.
- markdown mode: Don't block inner mode's indentation support.

22-06-2017: Version 5.27.2:

- Fix crash in the simple mode addon.

22-06-2017: Version 5.27.0:

- Fix infinite loop in forced display update.
- Properly disable the hidden textarea when `readOnly` is `"nocursor"`.
- Calling the `Doc` constructor without `new` works again.
- sql mode: Handle nested comments.
- javascript mode: Improve support for TypeScript syntax.
- markdown mode: Fix bug where markup was ignored on indented paragraph lines.
- vim bindings: Referencing invalid registers no longer causes an uncaught exception.
- rust mode: Add the correct MIME type.
- matchbrackets addon: Document options.
- Mouse button clicks can now be bound in keymaps by using names like `"LeftClick"` or `"Ctrl-Alt-MiddleTripleClick"`. When bound to a function, that function will be passed the position of the click as second argument.
- The behavior of mouse selection and dragging can now be customized with the `configureMouse` option.
- Modes can now look ahead across line boundaries with the `StringStream``.lookahead` method.
- Introduces a `"type"` token type, makes modes that recognize types output it, and add styling for it to the themes.
- New `pasteLinesPerSelection` option to control the behavior of pasting multiple lines into multiple selections.
- searchcursor addon: Support multi-line regular expression matches, and normalize strings when matching.

22-05-2017: Version 5.26.0:

- In textarea-mode, don't reset the input field during composition.
- More careful restoration of selections in widgets, during editor redraw.
- vim bindings: Parse line offsets in line or range specs.
- javascript mode: More TypeScript parsing fixes.
- julia mode: Fix issue where the mode gets stuck.
- markdown mode: Understand cross-line links, parse all bracketed things as links.
- soy mode: Support single-quoted strings.
- go mode: Don't try to indent inside strings or comments.

20-04-2017: Version 5.25.2:

- Better handling of selections that cover the whole viewport in contentEditable-mode.
- No longer accidentally scroll the editor into view when calling `setValue`.
- Work around Chrome Android bug when converting screen coordinates to editor positions.
- Make sure long-clicking a selection sets a cursor and doesn't show the editor losing focus.
- Fix issue where pointer events were incorrectly disabled on Chrome's overlay scrollbars.
- javascript mode: Recognize annotations and TypeScript-style type parameters.
- shell mode: Handle nested braces.
- markdown mode: Make parsing of strong/em delimiters CommonMark-compliant.

20-03-2017: Version 5.25.0:

- In contentEditable-mode, properly locate changes that repeat a character when inserted with IME.
- Fix handling of selections bigger than the viewport in contentEditable mode.
- Improve handling of changes that insert or delete lines in contentEditable mode.
- Count Unicode control characters 0x80 to 0x9F as special (non-printing) chars.
- Fix handling of shadow DOM roots when finding the active element.
- Add `role=presentation` to more DOM elements to improve screen reader support.
- merge addon: Make aligning of unchanged chunks more robust.
- comment addon: Fix comment-toggling on a block of text that starts and ends in a (differnet) block comment.
- javascript mode: Improve support for TypeScript syntax.
- r mode: Fix indentation after semicolon-less statements.
- shell mode: Properly handle escaped parentheses in parenthesized expressions.
- markdown mode: Fix a few bugs around leaving fenced code blocks.
- soy mode: Improve indentation.
- lint addon: Support asynchronous linters that return promises.
- continuelist addon: Support continuing task lists.
- vim bindings: Make Y behave like yy.
- sql mode: Support sqlite dialect.

22-02-2017: Version 5.24.2:

- javascript mode: Support computed class method names.
- merge addon: Improve aligning of unchanged code in the presence of marks and line widgets.

20-02-2017: Version 5.24.0:

- Positions now support a `sticky` property which determines whether they should be associated with the character before (value `"before"`) or after (value `"after"`) them.
- vim bindings: Make it possible to remove built-in bindings through the API.
- comment addon: Support a per-mode `useInnerComments` option to optionally suppress descending to the inner modes to get comment strings.
- A cursor directly before a line-wrapping break is now drawn before or after the line break depending on which direction you arrived from.
- Visual cursor motion in line-wrapped right-to-left text should be much more correct.
- Fix bug in handling of read-only marked text.
- shell mode: Properly tokenize nested parentheses.
- python mode: Support underscores in number literals.
- sass mode: Uses the full list of CSS properties and keywords from the CSS mode, rather than defining its own incomplete subset. Now depends on the css mode.
- css mode: Expose `lineComment` property for LESS and SCSS dialects. Recognize vendor prefixes on pseudo-elements.
- julia mode: Properly indent `elseif` lines.
- markdown mode: Properly recognize the end of fenced code blocks when inside other markup.
- scala mode: Improve handling of operators containing `#`, `@`, and `:` chars.
- xml mode: Allow dashes in HTML tag names.
- javascript mode: Improve parsing of async methods, TypeScript-style comma-separated superclass lists.
- indent-fold addon: Ignore comment lines.

19-01-2017: Version 5.23.0:

- Presentation-related elements DOM elements are now marked as such to help screen readers.
- markdown mode: Be more picky about what HTML tags look like to avoid false positives.
- `findModeByMIME` now understands `+json` and `+xml` MIME suffixes.
- closebrackets addon: Add support for an `override` option to ignore language-specific defaults.
- panel addon: Add a `stable` option that auto-scrolls the content to keep it in the same place when inserting/removing a panel.

20-12-2016: Version 5.22.0:

- sublime bindings: Make `selectBetweenBrackets` work with multiple cursors.
- javascript mode: Fix issues with parsing complex TypeScript types, imports, and exports.
- A contentEditable editor instance with autofocus enabled no longer crashes during initializing.
- emacs bindings: Export `CodeMirror.emacs` to allow other addons to hook into Emacs-style functionality.
- active-line addon: Add `nonEmpty` option.
- New event: `optionChange`.

21-11-2016: Version 5.21.0:

- Tapping/clicking the editor in contentEditable mode on Chrome now puts the cursor at the tapped position.
- Fix various crashes and misbehaviors when reading composition events in contentEditable mode.
- Catches and ignores an IE 'Unspecified Error' when creating an editor in an iframe before there is a `<body>`.
- merge addon: Fix several issues in the chunk-aligning feature.
- verilog mode: Rewritten to address various issues.
- julia mode: Recognize Julia 0.5 syntax.
- swift mode: Various fixes and adjustments to current syntax.
- markdown mode: Allow lists without a blank line above them.
- The `setGutterMarker`, `clearGutter`, and `lineInfo` methods are now available on `Doc` objects.
- The `heightAtLine` method now takes an extra argument to allow finding the height at the top of the line's line widgets.
- ruby mode: `else` and `elsif` are now immediately indented.
- vim bindings: Bind Ctrl-T and Ctrl-D to in- and dedent in insert mode.

20-10-2016: Version 5.20.0:

- Make `newlineAndIndent` command work with multiple cursors on the same line.
- Make sure keypress events for backspace are ignored.
- Tokens styled with overlays no longer get a nonsense `cm-cm-overlay` class.
- Line endings for pasted content are now normalized to the editor's preferred ending.
- javascript mode: Improve support for class expressions. Support TypeScript optional class properties, the `abstract` keyword, and return type declarations for arrow functions.
- css mode: Fix highlighting of mixed-case keywords.
- closebrackets addon: Improve behavior when typing a quote before a string.
- The core is now maintained as a number of small files, using ES6 syntax and modules, under the `src/` directory. A git checkout no longer contains a working `codemirror.js` until you `npm build` (but when installing from NPM, it is included).
- The `refresh` event is now documented and stable.

20-09-2016: Version 5.19.0:

- erlang mode: Fix mode crash when trying to read an empty context.
- comment addon: Fix broken behavior when toggling comments inside a comment.
- xml-fold addon: Fix a null-dereference bug.
- Page up and page down now do something even in single-line documents.
- Fix an issue where the cursor position could be off in really long (~8000 character) tokens.
- javascript mode: Better indentation when semicolons are missing. Better support for TypeScript classes, optional parameters, and the `type` keyword.
- The `blur` and `focus` events now pass the DOM event to their handlers.

23-08-2016: Version 5.18.2:

- vue mode: Fix outdated references to renamed Pug mode dependency.

22-08-2016: Version 5.18.0:

- Make sure gutter backgrounds stick to the rest of the gutter during horizontal scrolling.
- The contenteditable `inputStyle` now properly supports pasting on pre-Edge IE versions.
- javascript mode: Fix some small parsing bugs and improve TypeScript support.
- matchbrackets addon: Fix bug where active highlighting was left in editor when the addon was disabled.
- match-highlighter addon: Only start highlighting things when the editor gains focus.
- javascript-hint addon: Also complete non-enumerable properties.
- The `addOverlay` method now supports a `priority` option to control the order in which overlays are applied.
- MIME types that end in `+json` now default to the JSON mode when the MIME itself is not defined.
- The mode formerly known as Jade was renamed to Pug.
- The Python mode now defaults to Python 3 (rather than 2) syntax.

19-07-2016: Version 5.17.0:

- Fix problem with wrapped trailing whitespace displaying incorrectly.
- Prevent IME dialog from overlapping typed content in Chrome.
- Improve measuring of characters near a line wrap.
- javascript mode: Improve support for `async`, allow trailing commas in `import` lists.
- vim bindings: Fix backspace in replace mode.
- sublime bindings: Fix some key bindings on OS X to match Sublime Text.
- markdown mode: Add more classes to image links in highlight-formatting mode.

20-06-2016: Version 5.16.0:

- Fix glitches when dragging content caused by the drop indicator receiving mouse events.
- Make Control-drag work on Firefox.
- Make clicking or selection-dragging at the end of a wrapped line select the right position.
- show-hint addon: Prevent widget scrollbar from hiding part of the hint text.
- rulers addon: Prevent rulers from forcing a horizontal editor scrollbar.
- search addon: Automatically bind search-related keys in persistent dialog.
- sublime keymap: Add a multi-cursor aware smart backspace binding.

20-05-2016: Version 5.15.2:

- Fix a critical document corruption bug that occurs when a document is gradually grown.

20-05-2016: Version 5.15.0:

- Fix bug that caused the selection to reset when focusing the editor in contentEditable input mode.
- Fix issue where not all ASCII control characters were being replaced by placeholders.
- Remove the assumption that all modes have a `startState` method from several wrapping modes.
- Fix issue where the editor would complain about overlapping collapsed ranges when there weren't any.
- Optimize document tree building when loading or pasting huge chunks of content.
- Explicitly bind Ctrl-O on OS X to make that binding (“open line”) act as expected.
- Pasting linewise-copied content when there is no selection now inserts the lines above the current line.
- markdown mode: Fix several issues in matching link targets.
- clike mode: Improve indentation of C++ template declarations.
- javascript mode: Support `async`/`await` and improve support for TypeScript type syntax.

20-04-2016: Version 5.14.0:

- `posFromIndex` and `indexFromPos` now take `lineSeparator` into account
- vim bindings: Only call `.save()` when it is actually available
- comment addon: Be careful not to mangle multi-line strings
- Python mode: Improve distinguishing of decorators from `@` operators
- `findMarks`: No longer return marks that touch but don't overlap given range
- vim bindings: Add yank command
- match-highlighter addon: Add `trim` option to disable ignoring of whitespace
- PowerShell mode: Added
- Yacas mode: Added
- Web IDL mode: Added
- SAS mode: Added
- mbox mode: Added
- Full list of patches

21-03-2016: Version 5.13.2:

- Solves a problem where the gutter would sometimes not extend all the way to the end of the document.

21-03-2016: Version 5.13:

- New DOM event forwarded: `"dragleave"`.
- protobuf mode: Newly added.
- Fix problem where `findMarks` sometimes failed to find multi-line marks.
- Fix crash that showed up when atomic ranges and bidi text were combined.
- show-hint addon: Completion widgets no longer close when the line indented or dedented.
- merge addon: Fix bug when merging chunks at the end of the file.
- placeholder addon: No longer gets confused by `swapDoc`.
- simplescrollbars addon: Fix invalid state when deleting at end of document.
- clike mode: No longer gets confused when a comment starts after an operator.
- markdown mode: Now supports CommonMark-style flexible list indentation.
- dylan mode: Several improvements and fixes.
- Full list of patches

19-02-2016: Version 5.12:

- Vim bindings: Ctrl-Q is now an alias for Ctrl-V.
- Vim bindings: The Vim API now exposes an `unmap` method to unmap bindings.
- active-line addon: This addon can now style the active line's gutter.
- FCL mode: Newly added.
- SQL mode: Now has a Postgresql dialect.
- Fix issue where trying to scroll to a horizontal position outside of the document's width could cause the gutter to be positioned incorrectly.
- Use absolute, rather than fixed positioning in the context-menu intercept hack, to work around a problem when the editor is inside a transformed parent container.
- Solve a problem where the horizontal scrollbar could hide text in Firefox.
- Fix a bug that caused phantom scroll space under the text in some situations.
- Sublime Text bindings: Bind delete-line to Shift-Ctrl-K on OS X.
- Markdown mode: Fix issue where the mode would keep state related to fenced code blocks in an unsafe way, leading to occasional corrupted parses.
- Markdown mode: Ignore backslashes in code fragments.
- Markdown mode: Use whichever mode is registered as `text/html` to parse HTML.
- Clike mode: Improve indentation of Scala `=>` functions.
- Python mode: Improve indentation of bracketed code.
- HTMLMixed mode: Support multi-line opening tags for sub-languages (`<script>`, `<style>`, etc).
- Spreadsheet mode: Fix bug where the mode did not advance the stream when finding a backslash.
- XML mode: The mode now takes a `matchClosing` option to configure whether mismatched closing tags should be highlighted as errors.

20-01-2016: Version 5.11:

- New modes: JSX, literate Haskell
- The editor now forwards more DOM events: `cut`, `copy`, `paste`, and `touchstart`. It will also forward `mousedown` for drag events
- Fixes a bug where bookmarks next to collapsed spans were not rendered
- The Swift mode now supports auto-indentation
- Frontmatters in the YAML frontmatter mode are now optional as intended
- Full list of patches

21-12-2015: Version 5.10:

- Modify the way atomic ranges are skipped by selection to try and make it less surprising.
- The Swift mode was rewritten.
- New addon: jump-to-line.
- New method: `isReadOnly`.
- The show-hint addon now defaults to picking completions on single click.
- The object passed to `"beforeSelectionChange"` events now has an `origin` property.
- New mode: Crystal.
- Full list of patches

23-11-2015: Version 5.9:

- Improve the way overlay (OS X-style) scrollbars are handled
- Make annotatescrollbar and scrollpastend addons work properly together
- Make show-hint addon select options on single click by default, move selection to hovered item
- Properly fold comments that include block-comment-start markers
- Many small language mode fixes
- Full list of patches

20-10-2015: Version 5.8:

- Fixes an infinite loop in the hardwrap addon
- New modes: NSIS, Ceylon
- The Kotlin mode is now a clike dialect, rather than a stand-alone mode
- New option: `allowDropFileTypes`. Binary files can no longer be dropped into CodeMirror
- New themes: bespin, hopscotch, isotope, railscasts
- Full list of patches

20-09-2015: Version 5.7:

- New modes: Vue, Oz, MscGen (and dialects), Closure Stylesheets
- Implement CommonMark-style flexible list indent and cross-line code spans in Markdown mode
- Add a replace-all button to the search addon, and make the persistent search dialog transparent when it obscures the match
- Handle `acync`/`await` and ocal and binary numbers in JavaScript mode
- Fix various issues with the Haxe mode
- Make the closebrackets addon select only the wrapped text when wrapping selection in brackets
- Tokenize properties as properties in the CoffeeScript mode
- The placeholder addon now accepts a DOM node as well as a string placeholder
- Full list of patches

20-08-2015: Version 5.6:

- Fix bug where you could paste into a `readOnly` editor
- Show a cursor at the drop location when dragging over the editor
- The Rust mode was rewritten to handle modern Rust
- The editor and theme CSS was cleaned up. Some selectors are now less specific than before
- New theme: abcdef
- Lines longer than `maxHighlightLength` are now less likely to mess up indentation
- New addons: `autorefresh` for refreshing an editor the first time it becomes visible, and `html-lint` for using HTMLHint
- The `search` addon now recognizes `\r` and `\n` in pattern and replacement input
- Full list of patches

20-07-2015: Version 5.5:

- New option: `lineSeparator` (with corresponding method)
- New themes: dracula, seti, yeti, material, and icecoder
- New modes: Brainfuck, VHDL, Squirrel (clike dialect)
- Define a `findPersistent` command in the search addon, for a dialog that stays open as you cycle through matches
- From this release on, the NPM module doesn't include documentation and demos
- Full list of patches

25-06-2015: Version 5.4:

- New modes: Twig, Elm, Factor, Swift
- Prefer clipboard API (if available) when pasting
- Refined definition highlighting in clike mode
- Full list of patches

20-05-2015: Version 5.3:

- Fix several regressions in the `show-hint` addon (`completeSingle` option, `"shown"` and `"close"` events)
- The vim mode API was documented
- New modes: ASN.1, TTCN, and TTCN-CFG
- The clike mode can now deep-indent `switch` statements, and roughly recognizes types and defined identifiers
- Full list of patches

20-04-2015: Version 5.2:

- Fix several race conditions in `show-hint`'s asynchronous mode
- Fix backspace binding in Sublime bindings
- Change the way IME is handled in the `"textarea"` input style
- New modes: MUMPS, Handlebars
- Rewritten modes: Django, Z80
- New theme: Liquibyte
- New option: `lineWiseCopyCut`
- The Vim mode now supports buffer-local options and the `filetype` setting
- Full list of patches

23-03-2015: Version 5.1:

- New modes: ASCII armor (PGP data), Troff, and CMake.
- Remove SmartyMixed mode, rewrite Smarty mode to supersede it.
- New commands in the merge addon: `goNextDiff` and `goPrevDiff`.
- The closebrackets addon can now be configured per mode.
- Full list of patches.

20-02-2015: Version 5.0:

- Experimental mobile support (tested on iOS, Android Chrome, stock Android browser)
- New option `inputStyle` to switch between hidden textarea and contenteditable input.
- The `getInputField` method is no longer guaranteed to return a textarea.
- Full list of patches.

## Version 4.x

20-02-2015: Version 4.13:

- Fix the way the `closetag` demo handles the slash character.
- New modes: Forth, Stylus.
- Make the CSS mode understand some modern CSS extensions.
- Have the Scala mode handle symbols and triple-quoted strings.
- Full list of patches.

22-01-2015: Version 4.12:

- The `closetag` addon now defines a `"closeTag"` command.
- Adds a `findModeByFileName` to the mode metadata addon.
- Simple mode rules can now contain a `sol` property to only match at the start of a line.
- New addon: `selection-pointer` to style the mouse cursor over the selection.
- Improvements to the Sass mode's indentation.
- The Vim keymap's search functionality now supports scrollbar annotation.
- Full list of patches.

9-01-2015: Version 4.11:

Unfortunately, 4.10 did not take care of the Firefox scrolling issue entirely. This release adds two more patches to address that.

29-12-2014: Version 4.10:

Emergency single-patch update to 4.9. Fixes Firefox-specific problem where the cursor could end up behind the horizontal scrollbar.

23-12-2014: Version 4.9:

- Overhauled scroll bar handling. Add pluggable scrollbar implementations.
- Tweaked behavior for the completion addons to not take text after cursor into account.
- Two new optional features in the merge addon: aligning editors, and folding unchanged text.
- New modes: Dart, EBNF, spreadsheet, and Soy.
- New addon to show persistent panels below/above an editor.
- New themes: zenburn and tomorrow night bright.
- Allow ctrl-click to clear existing cursors.
- Full list of patches.

22-11-2014: Version 4.8:

- Built-in support for multi-stroke key bindings.
- New method: `getLineTokens`.
- New modes: dockerfile, IDL, Objective C (crude).
- Support styling of gutter backgrounds, allow `"gutter"` styles in `addLineClass`.
- Many improvements to the Vim mode, rewritten visual mode.
- Improvements to modes: gfm (strikethrough), SPARQL (version 1.1 support), and sTeX (no more runaway math mode).
- Full list of patches.

20-10-2014: Version 4.7:

- Incompatible: The lint addon now passes the editor's value as first argument to asynchronous lint functions, for consistency. The editor is still passed, as fourth argument.
- Improved handling of unicode identifiers in modes for languages that support them.
- More mode improvements: CoffeeScript (indentation), Verilog (indentation), Scala (indentation, triple-quoted strings), and PHP (interpolated variables in heredoc strings).
- New modes: Textile and Tornado templates.
- Experimental new way to define modes.
- Improvements to the Vim bindings: Arbitrary insert mode key mappings are now possible, and text objects are supported in visual mode.
- The mode meta-information file now includes information about file extensions, and helper functions `findModeByMIME` and `findModeByExtension`.
- New logo!
- Full list of patches.

19-09-2014: Version 4.6:

- New mode: Modelica
- New method: `findWordAt`
- Make it easier to use text background styling
- Full list of patches.

21-08-2014: Version 4.5:

- Fix several serious bugs with horizontal scrolling
- New mode: Slim
- New command: `goLineLeftSmart`
- More fixes and extensions for the Vim visual block mode
- Full list of patches.

21-07-2014: Version 4.4:

- Note: Some events might now fire in slightly different order (`"change"` is still guaranteed to fire before `"cursorActivity"`)
- Nested operations in multiple editors are now synced (complete at same time, reducing DOM reflows)
- Visual block mode for vim (<C-v>) is nearly complete
- New mode: Kotlin
- Better multi-selection paste for text copied from multiple CodeMirror selections
- Full list of patches.

23-06-2014: Version 4.3:

- Several vim bindings improvements: search and exCommand history, global flag for `:substitute`, `:global` command.
- Allow hiding the cursor by setting `cursorBlinkRate` to a negative value.
- Make gutter markers themeable, use this in foldgutter.
- Full list of patches.

19-05-2014: Version 4.2:

- Fix problem where some modes were broken by the fact that empty tokens were forbidden.
- Several fixes to context menu handling.
- On undo, scroll change, not cursor, into view.
- Rewritten Jade mode.
- Various improvements to Shell (support for more syntax) and Python (better indentation) modes.
- New mode: Cypher.
- New theme: Neo.
- Support direct styling options (color, line style, width) in the rulers addon.
- Recognize per-editor configuration for the show-hint and foldcode addons.
- More intelligent scanning for existing close tags in closetag addon.
- In the Vim bindings: Fix bracket matching, support case conversion in visual mode, visual paste, append action.
- Full list of patches.

22-04-2014: Version 4.1:

- Slightly incompatible: The `"cursorActivity"` event now fires after all other events for the operation (and only for handlers that were actually registered at the time the activity happened).
- New command: `insertSoftTab`.
- New mode: Django.
- Improved modes: Verilog (rewritten), Jinja2, Haxe, PHP (string interpolation highlighted), JavaScript (indentation of trailing else, template strings), LiveScript (multi-line strings).
- Many small issues from the 3.x→4.x transition were found and fixed.
- Full list of patches.

20-03-2014: Version 4.0:

This is a new major version of CodeMirror. There are a few incompatible changes in the API. Upgrade with care, and read the upgrading guide.

- Multiple selections (ctrl-click, alt-drag, API).
- Sublime Text bindings.
- Module loader shims wrapped around all modules.
- Selection undo/redo.
- Improved character measuring (faster, handles wrapped lines more robustly).
- Full list of patches.

## Version 3.x

22-04-2014: Version 3.24:

Merges the improvements from 4.1 that could easily be applied to the 3.x code. Also improves the way the editor size is updated when line widgets change.

20-03-2014: Version 3.23:

- In the XML mode, add `brackets` style to angle brackets, fix case-sensitivity of tags for HTML.
- New mode: Dylan.
- Many improvements to the Vim bindings.

21-02-2014: Version 3.22:

- Adds the `findMarks` method.
- New addons: rulers, markdown-fold, yaml-lint.
- New theme: mdn-like.
- New mode: Solr.
- Full list of patches.

16-01-2014: Version 3.21:

- Auto-indenting a block will no longer add trailing whitespace to blank lines.
- Marking text has a new option `clearWhenEmpty` to control auto-removal.
- Several bugfixes in the handling of bidirectional text.
- The XML and CSS modes were largely rewritten. LESS support was added to the CSS mode.
- The OCaml mode was moved to an mllike mode, F# support added.
- Make it possible to fetch multiple applicable helper values with `getHelpers`, and to register helpers matched on predicates with `registerGlobalHelper`.
- New theme pastel-on-dark.
- Better ECMAScript 6 support in JavaScript mode.
- Full list of patches.

21-11-2013: Version 3.20:

- New modes: Julia and PEG.js.
- Support ECMAScript 6 in the JavaScript mode.
- Improved indentation for the CoffeeScript mode.
- Make non-printable-character representation configurable.
- Add ‘notification’ functionality to dialog addon.
- Full list of patches.

21-10-2013: Version 3.19:

- New modes: Eiffel, Gherkin, MSSQL dialect.
- New addons: hardwrap, sql-hint.
- New theme: MBO.
- Add support for line-level styling from mode tokenizers.
- Full list of patches.

23-09-2013: Version 3.18:

Emergency release to fix a problem in 3.17 where `.setOption("lineNumbers", false)` would raise an error.

23-09-2013: Version 3.17:

- New modes: Fortran, Octave (Matlab), TOML, and DTD.
- New addons: `css-lint`, `css-hint`.
- Improve resilience to CSS 'frameworks' that globally mess up `box-sizing`.
- Full list of patches.

21-08-2013: Version 3.16:

- The whole codebase is now under a single license file.
- The project page was overhauled and redesigned.
- New themes: Paraiso (light), The Matrix.
- Improved interaction between themes and active-line/matchbrackets addons.
- New folding function `CodeMirror.fold.comment`.
- Added fullscreen addon.
- Full list of patches.

29-07-2013: Version 3.15:

- New modes: Jade, Nginx.
- New addons: Tern, matchtags, and foldgutter.
- Introduced helper concept (context).
- New method: `getModeAt`.
- New themes: base16 dark/light, 3024 dark/light, tomorrow-night.
- Full list of patches.

20-06-2013: Version 3.14:

- New addons: trailing space highlight, XML completion (rewritten), and diff merging.
- `markText` and `addLineWidget` now take a `handleMouseEvents` option.
- New methods: `lineAtHeight`, `getTokenTypeAt`.
- More precise cleanness-tracking using `changeGeneration` and `isClean`.
- Many extensions to Emacs mode (prefixes, more navigation units, and more).
- New events `"keyHandled"` and `"inputRead"`.
- Various improvements to Ruby, Smarty, SQL, and Vim modes.
- Full list of patches.

20-05-2013: Version 3.13:

- New modes: COBOL and HAML.
- New options: `cursorScrollMargin` and `coverGutterNextToScrollbar`.
- New addon: commenting.
- More features added to the Vim keymap.
- Full list of patches.

19-04-2013: Version 3.12:

- New mode: GNU assembler.
- New options: `maxHighlightLength` and `historyEventDelay`.
- Added `addToHistory` option for `markText`.
- Various fixes to JavaScript tokenization and indentation corner cases.
- Further improvements to the vim mode.
- Full list of patches.

20-03-2013: Version 3.11:

- Removed code: `collapserange`, `formatting`, and `simple-hint` addons. `plsql` and `mysql` modes (use `sql` mode).
- Moved code: the range-finding functions for folding now have their own files.
- Changed interface: the `continuecomment` addon now exposes an option, rather than a command.
- New modes: SCSS, Tcl, LiveScript, and mIRC.
- New addons: `placeholder`, HTML completion.
- New methods: `hasFocus`, `defaultCharWidth`.
- New events: `beforeCursorEnter`, `renderLine`.
- Many improvements to the `show-hint` completion dialog addon.
- Tweak behavior of by-word cursor motion.
- Further improvements to the vim mode.
- Full list of patches.

21-02-2013: Version 3.1:

- Incompatible: key handlers may now return, rather than throw `CodeMirror.Pass` to signal they didn't handle the key.
- Make documents a first-class construct, support split views and subviews.
- Add a new module for showing completion hints. Deprecate `simple-hint.js`.
- Extend htmlmixed mode to allow custom handling of script types.
- Support an `insertLeft` option to `setBookmark`.
- Add an `eachLine` method to iterate over a document.
- New addon modules: selection marking, linting, and automatic bracket closing.
- Add `"beforeChange"` and `"beforeSelectionChange"` events.
- Add `"hide"` and `"unhide"` events to marked ranges.
- Fix `coordsChar`'s interpretation of its argument to match the documentation.
- New modes: Turtle and Q.
- Further improvements to the vim mode.
- Full list of patches.

25-01-2013: Version 3.02:

Single-bugfix release. Fixes a problem that prevents CodeMirror instances from being garbage-collected after they become unused.

21-01-2013: Version 3.01:

- Move all add-ons into an organized directory structure under `/addon`. You might have to adjust your paths.
- New modes: D, Sass, APL, SQL (configurable), and Asterisk.
- Several bugfixes in right-to-left text support.
- Add `rtlMoveVisually` option.
- Improvements to vim keymap.
- Add built-in (lightweight) overlay mode support.
- Support `showIfHidden` option for line widgets.
- Add simple Python hinter.
- Bring back the `fixedGutter` option.
- Full list of patches.

10-12-2012: Version 3.0:

New major version. Only partially backwards-compatible. See the upgrading guide for more information. Changes since release candidate 2:

- Rewritten VIM mode.
- Fix a few minor scrolling and sizing issues.
- Work around Safari segfault when dragging.
- Full list of patches.

20-11-2012: Version 3.0, release candidate 2:

- New mode: HTTP.
- Improved handling of selection anchor position.
- Improve IE performance on longer lines.
- Reduce gutter glitches during horiz. scrolling.
- Add `addKeyMap` and `removeKeyMap` methods.
- Rewrite `formatting` and `closetag` add-ons.
- Full list of patches.

20-11-2012: Version 3.0, release candidate 1:

- New theme: Solarized.
- Introduce `addLineClass` and `removeLineClass`, drop `setLineClass`.
- Add a lot of new options for marked text (read-only, atomic, collapsed, widget replacement).
- Remove the old code folding interface in favour of these new ranges.
- Add `isClean`/`markClean` methods.
- Remove `compoundChange` method, use better undo-event-combining heuristic.
- Improve scrolling performance smoothness.
- Full list of patches.

22-10-2012: Version 3.0, beta 2:

- Fix page-based coordinate computation.
- Fix firing of `gutterClick` event.
- Add `cursorHeight` option.
- Fix bi-directional text regression.
- Add `viewportMargin` option.
- Directly handle mousewheel events (again, hopefully better).
- Make vertical cursor movement more robust (through widgets, big line gaps).
- Add `flattenSpans` option.
- Many optimizations. Poor responsiveness should be fixed.
- Initialization in hidden state works again.
- Full list of patches.

19-09-2012: Version 3.0, beta 1:

- Bi-directional text support.
- More powerful gutter model.
- Support for arbitrary text/widget height.
- In-line widgets.
- Generalized event handling.

## Version 2.x

21-01-2013: Version 2.38:

Integrate some bugfixes, enhancements to the vim keymap, and new modes (D, Sass, APL) from the v3 branch.

20-12-2012: Version 2.37:

- New mode: SQL (will replace plsql and mysql modes).
- Further work on the new VIM mode.
- Fix Cmd/Ctrl keys on recent Operas on OS X.
- Full list of patches.

20-11-2012: Version 2.36:

- New mode: Z80 assembly.
- New theme: Twilight.
- Add command-line compression helper.
- Make `scrollIntoView` public.
- Add `defaultTextHeight` method.
- Various extensions to the vim keymap.
- Make PHP mode build on mixed HTML mode.
- Add comment-continuing add-on.
- Full list of patches.

22-10-2012: Version 2.35:

- New (sub) mode: TypeScript.
- Don't overwrite (insert key) when pasting.
- Fix several bugs in `markText`/undo interaction.
- Better indentation of JavaScript code without semicolons.
- Add `defineInitHook` function.
- Full list of patches.

19-09-2012: Version 2.34:

- New mode: Common Lisp.
- Fix right-click select-all on most browsers.
- Change the way highlighting happens:
  Saves memory and CPU cycles.
  `compareStates` is no longer needed.
  `onHighlightComplete` no longer works.
- Integrate mode (Markdown, XQuery, CSS, sTex) tests in central testsuite.
- Add a `CodeMirror.version` property.
- More robust handling of nested modes in formatting and closetag plug-ins.
- Un/redo now preserves marked text and bookmarks.
- Full list of patches.

23-08-2012: Version 2.33:

- New mode: Sieve.
- New `getViewPort` and `onViewportChange` API.
- Configurable cursor blink rate.
- Make binding a key to `false` disabling handling (again).
- Show non-printing characters as red dots.
- More tweaks to the scrolling model.
- Expanded testsuite. Basic linter added.
- Remove most uses of `innerHTML`. Remove `CodeMirror.htmlEscape`.
- Full list of patches.

23-07-2012: Version 2.32:

Emergency fix for a bug where an editor with line wrapping on IE will break when there is no scrollbar.

20-07-2012: Version 2.31:

- New modes: OCaml, Haxe, and VB.NET.
- Several fixes to the new scrolling model.
- Add a `setSize` method for programmatic resizing.
- Add `getHistory` and `setHistory` methods.
- Allow custom line separator string in `getValue` and `getRange`.
- Support double- and triple-click drag, double-clicking whitespace.
- And more... (all patches)

22-06-2012: Version 2.3:

- New scrollbar implementation. Should flicker less. Changes DOM structure of the editor.
- New theme: vibrant-ink.
- Many extensions to the VIM keymap (including text objects).
- Add mode-multiplexing utility script.
- Fix bug where right-click paste works in read-only mode.
- Add a `getScrollInfo` method.
- Lots of other fixes.

23-05-2012: Version 2.25:

- New mode: Erlang.
- Remove xmlpure mode (use xml.js).
- Fix line-wrapping in Opera.
- Fix X Windows middle-click paste in Chrome.
- Fix bug that broke pasting of huge documents.
- Fix backspace and tab key repeat in Opera.

23-04-2012: Version 2.24:

- Drop support for Internet Explorer 6.
- New modes: Shell, Tiki wiki, Pig Latin.
- New themes: Ambiance, Blackboard.
- More control over drag/drop with `dragDrop` and `onDragEvent` options.
- Make HTML mode a bit less pedantic.
- Add `compoundChange` API method.
- Several fixes in undo history and line hiding.
- Remove (broken) support for `catchall` in key maps, add `nofallthrough` boolean field instead.

26-03-2012: Version 2.23:

- Change default binding for tab [more]
  Starting in 2.23, these bindings are default:
  - Tab: Insert tab character
  - Shift-tab: Reset line indentation to default
  - Ctrl/Cmd-[: Reduce line indentation (old tab behaviour)
  - Ctrl/Cmd-]: Increase line indentation (old shift-tab behaviour)
- New modes: XQuery and VBScript.
- Two new themes: lesser-dark and xq-dark.
- Differentiate between background and text styles in `setLineClass`.
- Fix drag-and-drop in IE9+.
- Extend `charCoords` and `cursorCoords` with a `mode` argument.
- Add `autofocus` option.
- Add `findMarksAt` method.

27-02-2012: Version 2.22:

- Allow key handlers to pass up events, allow binding characters.
- Add `autoClearEmptyLines` option.
- Properly use tab stops when rendering tabs.
- Make PHP mode more robust.
- Support indentation blocks in code folder.
- Add a script for highlighting instances of the selection.
- New .properties mode.
- Fix many bugs.

27-01-2012: Version 2.21:

- Added LESS, MySQL, Go, and Verilog modes.
- Add `smartIndent` option.
- Support a cursor in `readOnly`-mode.
- Support assigning multiple styles to a token.
- Use a new approach to drawing the selection.
- Add `scrollTo` method.
- Allow undo/redo events to span non-adjacent lines.
- Lots and lots of bugfixes.

20-12-2011: Version 2.2:

- Slightly incompatible API changes. Read this.
- New approach to binding keys, support for custom bindings.
- Support for overwrite (insert).
- Custom-width and stylable tabs.
- Moved more code into add-on scripts.
- Support for sane vertical cursor movement in wrapped lines.
- More reliable handling of editing marked text.
- Add minimal emacs and vim bindings.
- Rename `coordsFromIndex` to `posFromIndex`, add `indexFromPos` method.

21-11-2011: Version 2.18:

Fixes `TextMarker.clear`, which is broken in 2.17.

21-11-2011: Version 2.17:

- Add support for line wrapping and code folding.
- Add Github-style Markdown mode.
- Add Monokai and Rubyblue themes.
- Add `setBookmark` method.
- Move some of the demo code into reusable components under `lib/util`.
- Make screen-coord-finding code faster and more reliable.
- Fix drag-and-drop in Firefox.
- Improve support for IME.
- Speed up content rendering.
- Fix browser's built-in search in Webkit.
- Make double- and triple-click work in IE.
- Various fixes to modes.

27-10-2011: Version 2.16:

- Add Perl, Rust, TiddlyWiki, and Groovy modes.
- Dragging text inside the editor now moves, rather than copies.
- Add a `coordsFromIndex` method.
- API change: `setValue` now no longer clears history. Use `clearHistory` for that.
- API change: `markText` now returns an object with `clear` and `find` methods. Marked text is now more robust when edited.
- Fix editing code with tabs in Internet Explorer.

26-09-2011: Version 2.15:

Fix bug that snuck into 2.14: Clicking the character that currently has the cursor didn't re-focus the editor.

26-09-2011: Version 2.14:

- Add Clojure, Pascal, NTriples, Jinja2, and Markdown modes.
- Add Cobalt and Eclipse themes.
- Add a `fixedGutter` option.
- Fix bug with `setValue` breaking cursor movement.
- Make gutter updates much more efficient.
- Allow dragging of text out of the editor (on modern browsers).

23-08-2011: Version 2.13:

- Add Ruby, R, CoffeeScript, and Velocity modes.
- Add `getGutterElement` to API.
- Several fixes to scrolling and positioning.
- Add `smartHome` option.
- Add an experimental pure XML mode.

25-07-2011: Version 2.12:

- Add a SPARQL mode.
- Fix bug with cursor jumping around in an unfocused editor in IE.
- Allow key and mouse events to bubble out of the editor. Ignore widget clicks.
- Solve cursor flakiness after undo/redo.
- Fix block-reindent ignoring the last few lines.
- Fix parsing of multi-line attrs in XML mode.
- Use `innerHTML` for HTML-escaping.
- Some fixes to indentation in C-like mode.
- Shrink horiz scrollbars when long lines removed.
- Fix width feedback loop bug that caused the width of an inner DIV to shrink.

04-07-2011: Version 2.11:

- Add a Scheme mode.
- Add a `replace` method to search cursors, for cursor-preserving replacements.
- Make the C-like mode mode more customizable.
- Update XML mode to spot mismatched tags.
- Add `getStateAfter` API and `compareState` mode API methods for finer-grained mode magic.
- Add a `getScrollerElement` API method to manipulate the scrolling DIV.
- Fix drag-and-drop for Firefox.
- Add a C# configuration for the C-like mode.
- Add full-screen editing and mode-changing demos.

07-06-2011: Version 2.1:

Add a theme system (demo). Note that this is not backwards-compatible—you'll have to update your styles and modes!

07-06-2011: Version 2.02:

- Add a Lua mode.
- Fix reverse-searching for a regexp.
- Empty lines can no longer break highlighting.
- Rework scrolling model (the outer wrapper no longer does the scrolling).
- Solve horizontal jittering on long lines.
- Add runmode.js.
- Immediately re-highlight text when typing.
- Fix problem with 'sticking' horizontal scrollbar.

26-05-2011: Version 2.01:

- Add a Smalltalk mode.
- Add a reStructuredText mode.
- Add a Python mode.
- Add a PL/SQL mode.
- `coordsChar` now works
- Fix a problem where `onCursorActivity` interfered with `onChange`.
- Fix a number of scrolling and mouse-click-position glitches.
- Pass information about the changed lines to `onChange`.
- Support cmd-up/down on OS X.
- Add triple-click line selection.
- Don't handle shift when changing the selection through the API.
- Support `"nocursor"` mode for `readOnly` option.
- Add an `onHighlightComplete` option.
- Fix the context menu for Firefox.

28-03-2011: Version 2.0:

CodeMirror 2 is a complete rewrite that's faster, smaller, simpler to use, and less dependent on browser quirks. See this and this for more information.

22-02-2011: Version 2.0 beta 2:

Somewhat more mature API, lots of bugs shaken out.

17-02-2011: Version 0.94:

- `tabMode: "spaces"` was modified slightly (now indents when something is selected).
- Fixes a bug that would cause the selection code to break on some IE versions.
- Disabling spell-check on WebKit browsers now works.

08-02-2011: Version 2.0 beta 1:

CodeMirror 2 is a complete rewrite of CodeMirror, no longer depending on an editable frame.

19-01-2011: Version 0.93:

- Added a Regular Expression parser.
- Fixes to the PHP parser.
- Support for regular expression in search/replace.
- Add `save` method to instances created with `fromTextArea`.
- Add support for MS T-SQL in the SQL parser.
- Support use of CSS classes for highlighting brackets.
- Fix yet another hang with line-numbering in hidden editors.

## Version 0.x

28-03-2011: Version 1.0:

- Fix error when debug history overflows.
- Refine handling of C# verbatim strings.
- Fix some issues with JavaScript indentation.

17-12-2010: Version 0.92:

- Make CodeMirror work in XHTML documents.
- Fix bug in handling of backslashes in Python strings.
- The `styleNumbers` option is now officially supported and documented.
- `onLineNumberClick` option added.
- More consistent names `onLoad` and `onCursorActivity` callbacks. Old names still work, but are deprecated.
- Add a Freemarker mode.

11-11-2010: Version 0.91:

- Adds support for Java.
- Small additions to the PHP and SQL parsers.
- Work around various Webkit issues.
- Fix `toTextArea` to update the code in the textarea.
- Add a `noScriptCaching` option (hack to ease development).
- Make sub-modes of HTML mixed mode configurable.

02-10-2010: Version 0.9:

- Add support for searching backwards.
- There are now parsers for Scheme, XQuery, and OmetaJS.
- Makes `height: "dynamic"` more robust.
- Fixes bug where paste did not work on OS X.
- Add a `enterMode` and `electricChars` options to make indentation even more customizable.
- Add `firstLineNumber` option.
- Fix bad handling of `@media` rules by the CSS parser.
- Take a new, more robust approach to working around the invisible-last-line bug in WebKit.

22-07-2010: Version 0.8:

- Add a `cursorCoords` method to find the screen coordinates of the cursor.
- A number of fixes and support for more syntax in the PHP parser.
- Fix indentation problem with JSON-mode JS parser in Webkit.
- Add a minification UI.
- Support a `height: dynamic` mode, where the editor's height will adjust to the size of its content.
- Better support for IME input mode.
- Fix JavaScript parser getting confused when seeing a no-argument function call.
- Have CSS parser see the difference between selectors and other identifiers.
- Fix scrolling bug when pasting in a horizontally-scrolled editor.
- Support `toTextArea` method in instances created with `fromTextArea`.
- Work around new Opera cursor bug that causes the cursor to jump when pressing backspace at the end of a line.

27-04-2010: Version 0.67:

More consistent page-up/page-down behaviour across browsers. Fix some issues with hidden editors looping forever when line-numbers were enabled. Make PHP parser parse `"\\"` correctly. Have `jumpToLine` work on line handles, and add `cursorLine` function to fetch the line handle where the cursor currently is. Add new `setStylesheet` function to switch style-sheets in a running editor.

01-03-2010: Version 0.66:

Adds `removeLine` method to API. Introduces the PLSQL parser. Marks XML errors by adding (rather than replacing) a CSS class, so that they can be disabled by modifying their style. Fixes several selection bugs, and a number of small glitches.

12-11-2009: Version 0.65:

Add support for having both line-wrapping and line-numbers turned on, make paren-highlighting style customisable (`markParen` and `unmarkParen` config options), work around a selection bug that Opera reintroduced in version 10.

23-10-2009: Version 0.64:

Solves some issues introduced by the paste-handling changes from the previous release. Adds `setSpellcheck`, `setTextWrapping`, `setIndentUnit`, `setUndoDepth`, `setTabMode`, and `setLineNumbers` to customise a running editor. Introduces an SQL parser. Fixes a few small problems in the Python parser. And, as usual, add workarounds for various newly discovered browser incompatibilities.

31-08-2009: Version 0.63:

Overhaul of paste-handling (less fragile), fixes for several serious IE8 issues (cursor jumping, end-of-document bugs) and a number of small problems.

30-05-2009: Version 0.62:

Introduces Python and Lua parsers. Add `setParser` (on-the-fly mode changing) and `clearHistory` methods. Make parsing passes time-based instead of lines-based (see the `passTime` option).