Release 5.24.0

Version 5.24.0 is out, with quite a long list of fixes and changes.

If you’re using the SASS mode without using a module system, you’ll have to manually make sure the CSS mode is loaded, since that is now a dependency of the SASS mode. That’s the only breaking change.

The main new feature in this release is that position objects for a given line/char position can now distinguish between the position to the right of the character before that position, and the position the left of the character after it, with the optional sticky property. This is used to improve cursor behavior around line wraps and in bidirectional text. Thanks go to @adrianheine for doing all the scary bidirectional work that was involved in that, and to Mozilla for sponsoring that work.

You can see the list of new patches here, and get the zip file here. Enjoy!

Release notes

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 #, @, 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.

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

Breaking changes

The sass mode now depends on the css mode.