Significantly improved load times, match times and reduced cache size on disk
embed is now lazy loaded, resulting in much higher performance for syntaxes like markdown
Added branch and fail for non-deterministic parsing
Added version: 2 to fix edge cases while retaining backwards compatibility
Added extends to inherit from another syntax definition. Multiple inheritance is supported, provided all parents have the same base syntax
Added hidden_extensions
Allow using pop alongside push/set/embed/branch
Fixed a performance issue with bounded repeats in regular expressions
Syntax tests can now assert that reindent is working as expected
Syntax tests can now assert that symbols are indexed
Prevent infinite include loops via with_prototype
Fixed a number of scope related bugs
Fixed some regex capture related bugs
Added more information to the Show Scope Name popup
OS Compatibility
The following operating systems are no longer supported as a result of adding Python 3.8:
OS X 10.7
OS X 10.8
Windows XP
Windows Vista
Platform Integration
Added automatic dark/light theme and color scheme switching, based on OS theme changes
subl - can now be used to read from stdin on all platforms
Windows will remember their Virtual Desktop/Space/Workspace, controlled by the remember_workspace setting
Scroll bars now follow platform conventions when clicking on them. Configurable using Scroll Bar.sublime-mousemap
Mac: Releases use universal binaries with Apple Silicon support
Mac: Updated icon to follow macOS 11 style
Mac: Windows will now stay maximized when using Mac window tabs
Mac: Fix various issues with the wrong cursor being used
Linux: ARM64 builds are now available
Linux: Text drag and drop is now supported
Linux: Added proper support for Wayland
Linux: Touch screen events are now handled
Linux: Better support for copy+paste with other applications that don’t support utf8 text
Linux: Native file dialogs like those for KDE will be used when configured
Windows: IME preview and multi-select support
Windows, Linux: Added support for custom title bars
Windows, Linux: Use vsync for animations instead of a fixed 60hz
Mac, Linux: Improved compatibility with some keyboard layouts
Application Behavior
Added Safe Mode, to simulate a clean install. Enabled by passing --safe-mode on the command line or holding shift+alt/option at startup on Windows/macOS respectively
Added Help/Report a Bug to link to our public issue tracker
Added options to hot_exit setting to control behavior when the last window is closed
Fixed a possible case where an update loses the current session
Settings containing a UTF-8 BOM will no longer fail to load
Added support for previewing TGA and PSD images
Added close_deleted_files setting to control behavior of session restoration when files have been deleted on disk
Popup windows now use virtual windows for improved performance
Improved performance when loading files with very long lines
Improved rendering performance on very long lines
Improved performance with large session files
Data directories have dropped the “3”, though if a “3” directory still exists it will be used
Mac: Quick Switch Project now works without any windows open
Mac, Linux: The cache and index are now located in the proper location (~/.cache and ~/Library/Caches respectively)
Auto Complete
Typing the full tab trigger of a snippet will move it to the top of the results
Manually typing in the only available completion will hide the auto complete popup
.sublime-completion files can now specify annotation, kind and details
Ranking quality improvements
Improved behavior of completions starting with non-word characters
auto_complete_trailing_symbols is now disabled by default
cancelCompletion will no longer prevent manual invocation
Added auto_complete_use_history setting to control if previous choices are automatically selected
Running the auto_complete command when auto complete is already showing will re-query plugins for results
auto_complete_selector now applies to the position before the just-typed in character, matching auto_complete_triggers
Input Handling
Modifier key taps can now be used as part of a key binding. For example, ["ctrl", "ctrl"] will trigger when Ctrl is pressed twice without pressing any other keys in between
Linux: AltGr can now be used in key bindings via altgr
Linux: Added a workaround for a touchscreen driver bug, which would cause right click and mouse scrolling to stop working
Linux: When the menu is hidden, pressing alt will show it
Mac: Fix Pinyin input
Mac: Keypad keys can now be bound to as expected
Mac: Added key bindings for macOS application tabs
Windows, Linux: Hide mouse cursor when typing. Controlled via hide_pointer_while_typing setting
Windows, Linux: Fixed being unable to bind Ctrl+Break
Editor Control
Added File/Print, which prints via a browser
Added Edit/Copy as HTML
Build systems now use new annotations functionality instead of phantoms, reducing re-flow
Undo history is preserved in the session
Comments and layout are preserved when programmatically editing preferences
Caret blinking is disabled by default. Set caret_style setting to smooth for previous behavior
Improved automatic indentation detection
Added relative line numbers, controlled by the relative_line_numbers setting
Added setting scroll_context_lines
Added setting hide_pointer_while_typing
Added setting control_character_style
Added Project/Recent/Remove Deleted
Added chain command to run multiple commands in series
switch_file command now handles filenames with compound extensions
The scroll_past_end setting now supports customizing the scroll distance using numbers from 0.0 to 1.0
Double-clicking a semi-transient sheet’s tab will now fully open the sheet
trim_trailing_white_space_on_save can now be set to "not_on_caret"
trim_trailing_white_space_on_save now trims only newly inserted trailing whitespace by default. Controlled via trim_only_modified_white_space setting
Expanded draw_white_space setting, supporting leading and trailing white space
Unicode white space characters, such as the zero width no-break space, are now drawn as hex values. Controlled via draw_unicode_white_space setting
Fixed spelling correction to support languages with upper case characters after start of word
Added commands to simplify customizing the active theme or color scheme
Quick Switch Project will open the selected project in a new window if Ctrl (Cmd on Mac) is held down
Added wrap_width_style preference
Added console_max_history_lines
Added additional settings to control the status bar: show_sidebar_button, show_indentation and show_syntax
Console now uses Python syntax highlighting by default
Added Central European (Mac) encoding support
Key Bindings: Join Lines is now on Ctrl+Shift+J / Cmd+Shift+J
Key Bindings: Expand Selection to Indentation is no longer bound by default
Key Bindings: Ctrl+J / Cmd+J is now used as a prefix for sequential key bindings, similar to Ctrl+K / Cmd+K
Code Folding: fixed some edge-case incorrect behaviors
Linux: Added support for alternate font weight names
Linux: Selection is no longer cleared when another application makes a selection
Linux: Added Ctrl+Space to trigger Auto Complete
Linux, Windows: Added Alt+Shift+Left Mouse Button as an alternative column selection binding
Linux, Windows: Added Shift+F10 key binding to open the context menu
Text Commands
Macros now record Find commands
Reworked Jump Back and Jump Forward commands
Improved behavior of Wrap Paragraph
Improved behavior of Swap Lines
Added Revert Diff Hunk
Added Selection/Expand Selection as a general mechanism to expand the selection
Selection/Split into Lines will now split a selection into words if the selection doesn’t contain any newlines
Show a sum in the status bar when there are multiple selections and all of them are numbers
set_file_type command now accepts “scope:” prefixed syntax names
Fixed sort_lines replacing unicode newlines with regular ones
Snippets
Added auto_complete_include_snippets setting, for disabling auto complete integration
Added ignored_snippets setting, for disabling default snippets
Indexing (Goto Definition)
Files ignored by .gitignore are not indexed by default. Controlled via index_exclude_gitignore setting
Files without known extensions are no longer indexed by default. Controlled via index_skip_unknown_extensions setting
Improved behavior with constantly changing files
Significantly improved load times
Files and Folders
Saving files is now asynchronous
Improved performance when adding directories with extreme amounts of files
When save_on_focus_lost is enabled, closing an unsaved file will save and close it, instead of prompting to save
Improved behavior of save_on_focus_lost in conjunction with administrator owned files
Added reload_file_on_change setting to control if files are automatically reloaded or not
folder_exclude_patterns and folder_include_patterns now support project-relative paths, by starting the path with //
Folders in the sidebar can be recursively expanded via alt+arrow key
Added preview_on_click setting to support only previewing files on left click
Windows: Fixed Open Containing Folder for UNC paths
Windows: Fixed Save dialog not showing for new files with control characters on the first line
Windows: Fixed Ctrl+Backspace inserting a DEL character when a dialog is open in the background
Linux: Fix recreated directories not working correctly with file change monitoring
Linux: Recursively expanding and collapsing sidebar folders now works with alt or super
Find
Find results are highlighted on the scroll bar, controlled by highlight_find_results_in_scrollbar
Find in Selection now highlights the area that will be searched
Commands can now be run without the find panel having input focus
Fix keypad enter not working in find panel
Improved find history behavior
Find: Various performance improvements with large files using graceful degradation
Find: Fixed adjacent matches being skipped when find in selection is in use
Find: Fixed find in selection option not being cleared when changing tabs
Find: Selection will no longer be reset after Find All is used when finding in selection
Find: Results are now properly highlighted on Find All when close_find_after_find_all is turned off
Find in Files: Improved performance with large numbers of matches
Find in Files: Can now filter by .gitignore
Find in Files: Added Preserve Case option for replacements
Find in Files: Fix not recursing into directories on networked file systems
Find in Files: Hide rulers by default in find results
Find in Files: Added Find/Cancel Find in Files menu item
Find in Files: Binary file patterns are applied when an explicit folder is given
Find in Files: Using “Find in Folder…” from the sidebar context menu will apply project file filters
Find in Files: Added close_find_after_find_all preference
Find in Files: Added close_find_after_replace_all preference
New: assign_syntax() sets the syntax used in a view, supports Syntax objects, paths and scope selectors
New: syntax() returns the currently set Syntax
New: clones()
New: sheet() and sheet_id()
New: export_to_html()
Window has some changes and improvements:
show_quick_panel now accepts placeholder text, via the placeholder argument
Added sublime.CLEAR_TO_RIGHT and sublime.SEMI_TRANSIENT for use with open_file()
Added the flag sublime.REPLACE_MRU for use with open_file(). When multiple sheets are selected, this flag will cause the opened file to replace the most recently used sheet with the file being opened
Added the flag sublime.WANT_EVENT for use with show_quick_panel(). This will pass an event dict to the on_select callback. The dict will contain the key modifier_keys, which will be a dict that may contain zero or more of the keys: primary, ctrl, super, alt, altgr
open_file now accepts sublime.ADD_TO_SELECTION as a flag
New: selected_sheets(), selected_sheets_in_group() and select_sheets()
New: workspace_file_name()
New: bring_to_front()
sublime.ok_cancel_dialog() and sublime.yes_no_cancel_dialog() now accept an optional title parameter
Added sublime.open_dialog, sublime.save_dialog and sublime.select_folder_dialog
Syntax definitions can be queried via sublime.list_syntaxes(), sublime.find_syntax(), sublime.syntax_from_path(), sublime.find_syntax_by_name(), sublime.find_syntax_by_scope(), and sublime.find_syntax_for_file(). They return Syntax objects
Improved sys.stdout to extend io.TextIOBase
sublime.executable_path(), sublime.packages_path(), sublime.installed_packages_path() and sublime.cache_path() may now be called at import time
Added sublime.SymbolRegion and sublime.SymbolLocation with corresponding methods on View and Window
Fix a bug with popup being stuck open when a popup is shown in the hide event handler of another popup
Added open_project_or_workspace command
append command has new, optional disable_tab_translation argument
Added modifier_keys to event dicts when commands are invoked via a menu
Added sublime.DYNAMIC_COMPLETIONS. on_query_completions() can return this flag to indicate that completion results should be re-queried as the user types
Added sublime.INHIBIT_REORDER. Returned by on_query_competions()
CompletionItem now accepts a details parameter, which can include basic HTML
CommandInputHandler now has an initial_selection() method
Added Region.to_tuple and Phantom.to_tuple
Fixed ViewEventListener.on_load_async() sometimes not being called
Added sublime.QuickPanelItem() with support for kind info, annotations and basic minihtml
Plugins may now add selections to the Jump Back history list via the add_jump_record command
Plugins may suppress selections from the Jump Back history list via the jump_ignore_selection region
Plugins may now disable the default HTML and CSS completions
Added Buffer.id() and Buffer.file_name()
The TextInputHandler and ListInputHandler classes may define a method want_event() that returns True to receive an extra parameter, an event dict, when the validate() and confirm() methods are called. The dict will contain the key modifier_keys, which will be a dict that may contain zero or more of the keys: primary, ctrl, super, alt, altgr
Add sublime.ui_info() for high-level information about the UI
Popups will be properly positioned when displayed near the right-hand side of the editor
Popups near the right-hand side of the editor with wrapped lines will now be properly sized
Added ListInputItem so that ListInputHandler objects can provide kind info, annotations and details
Improvements to the API, applied to the new Python 3.8 environment only:
bool(sublime.Selection()) will return False when len() == 0
sublime.load_binary_resource() now returns bytes instead of bytearray
Added Selection.__iter__()
Added Region.__iter__()
Added Region.__contains__()
Added Settings.to_dict()
Settings can now be treated like a dict
Plugins starting with _ will be ignored, __all__ global will be respected
Events won’t be reported until plugin_loaded() has been called
.pyc files can now be imported when contained within .sublime-package files, although they will not be scanned for plugins
The certifi Python package is preinstalled
Significant performance improvements when rapidly printing to the Console
Added sublime.log_control_tree(). When enabled, clicking with ctrl+alt will log the control tree under the mouse to the console
Added sublime.log_fps(). When enabled, the render times are tracked and logged
Added logging status functions:
sublime.get_log_commands()
sublime.get_log_input()
sublime.get_log_build_systems()
sublime.get_log_result_regex()
sublime.get_log_indexing()
sublime.get_log_fps()
sublime.get_log_control_tree()
Logging functions are now toggle when no argument is passed:
sublime.log_commands()
sublime.log_input()
sublime.log_build_systems()
sublime.log_result_regex()
sublime.log_indexing()
sublime.log_fps()
sublime.log_control_tree()
Backwards Compatibility Break: The event parameter passed to commands when a minihtml link is clicked changed from a two-element list to a dict with the keys x and y