Skip to content
Version 5.24.0

### Bug fixes

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.

[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 <code>#</code>, <code>@</code>, and <code>:</code> 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.

### New features

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 <code>useInnerComments</code> option to optionally suppress descending to the inner modes to get comment strings.

### Breaking changes

The [sass mode]( now depends on the [css mode](