Changelog
ecode 0.8.1 adds LSP snippet support, a built-in scientific calculator, a new system font picker, configurable tab placement, date and time insertion, new syntax definitions, and numerous improvements to stability, performance, file dialogs, AI assistance, localization, and editor behavior.
Highlights
LSP snippet support
ecode now expands snippets received through LSP completion responses.
The new snippet editing mode supports:
- Tab stops and final cursor positions
- Linked placeholders
- Placeholder choices
- Snippet variables and transformations
- Visual placeholder feedback
- Navigation using Tab and Shift+Tab
- Multi-cursor snippet insertion
This currently applies to snippets provided by language servers. Support for user-defined snippets is planned separately.
Built-in scientific calculator
The Universal Bar can now evaluate mathematical expressions directly, without opening a terminal or leaving the editor.
It supports common arithmetic operations, constants, and scientific functions such as trigonometric functions, logarithms, powers, and square roots.
New system font picker
ecode now includes a full font picker dialog capable of discovering installed system fonts and selecting the font family, style, and size with a live preview.
The new dialog is used by ecode’s font-selection settings and replaces the previous basic file-oriented font selection workflow.
Configurable new-tab placement
A new New Tab Position setting controls where newly opened tabs are placed.
Available positions include:
- After the active tab
- Before the active tab
- At the beginning of the tab bar
- At the end of the tab bar
The selected behavior now applies consistently to all newly created tabs.
Insert date and time
New editor commands can insert the current date, time, or date and time into the active document.
The commands are available from Edit → Insert Date and can also be assigned custom keybindings.
Editor improvements
- Added optional documentation display to the LSP signature-help popup. Documentation is enabled by default. #911
- Fixed a crash that could occur while displaying LSP signature help or autocomplete information. #902
- Improved overriding of inherited LSP server configurations, including
command_parameters, making it possible to customize language-specific configurations without modifying their parent template. #913 - Fixed custom keybindings being overwritten or removed when ecode merged newly introduced default bindings into the user configuration. #914
- Recently closed files now preserve their cursor and focus state when reopened during the same session. State is tracked independently for each editor view. #893
- Fixed horizontal scrolling remaining available when line wrapping was configured to break at a specific column. #915
- Improved the display of keyboard shortcuts in menus for commands that previously omitted them.
- Fixed a use-after-free condition in the code-editor splitter.
- Improved handling of mixed or unexpected line endings in files otherwise detected as CRLF.
File dialogs
- Pasting an absolute directory path into the file-name field of the folder chooser now navigates to and opens that directory when valid. #872
- Improved file-picker behavior and integration throughout ecode.
- Fixed row selection behavior when interacting with the file dialog’s text input.
- Improved dropdown-list scrolling used by dialogs and other interface elements.
AI Assistant
- Fixed a crash that could occur while cancelling an AI Assistant request. #906
- Improved AI Assistant request handling and error behavior.
- Added further configuration capabilities for supported AI providers.
Search and performance
- Project-wide search now uses memory-mapped access for large files and reduces unnecessary allocations, improving search performance and memory usage on large projects.
- Improved UI and stylesheet matching performance through optimized CSS selector indexing, cached hashes, faster attribute matching, and reduced layout overhead.
- Improved application shutdown and asynchronous resource cleanup, reducing leaks, stale callbacks, and shutdown-time crashes.
- Fixed several graphics, font, SVG, OpenGL-context, HTTP, TLS, and resource-lifetime issues.
Syntax highlighting
- Added syntax highlighting for Gemini protocol documents using the
.gmiextension. #917 - Registered Genie source files, temporarily using Python syntax highlighting until a dedicated definition is available. #924
- Registered
.vapifiles as Vala source code. #925 - Registered
.mesonfiles as Meson source files. #926 - Added recognition for CMake
.infiles. - Improved Vala function-call detection.
- Added and pre-registered several additional file extensions and syntax definitions.
Localization
- Fixed Chinese language resource loading by using the expected ISO 639-1 language identifier and renaming the translation resource accordingly. #908
- Updated German, French, Chinese, and English translation resources.
- Corrected several translated strings and removed outdated entries.
Interface and usability
- Removed trailing ellipses from menu actions that execute immediately rather than requesting additional user input. #892
- Improved Breeze theme styling and consistency.
- Improved font discovery and native font-weight/style resolution.
- Improved scrolling visibility and layout behavior in several UI components.
- ecode now respects SDL hints explicitly configured by the user instead of unconditionally replacing them with internal defaults. #921
- Window raising behavior was improved on supported SDL versions.
Stability fixes
- Fixed crashes related to LSP signature help and completion handling. #902
- Fixed AI Assistant request-cancellation crashes. #906
- Fixed a code-editor splitter use-after-free.
- Fixed unsafe asynchronous UI resource deliveries during application shutdown.
- Fixed several HTTP request cancellation, callback re-entry, and shutdown issues.
- Fixed socket initialization and failed TLS-handshake cleanup.
- Fixed OpenGL context and SVG resource leaks.
- Fixed stale image and layout resource caching.
- Fixed several editor, layout, rendering, and resource-lifetime race conditions.
Build and platform support
- Added preliminary SDL 3 build support to Windows and MinGW build scripts through the
--backend=sdl3option. - Improved Windows ARM64 nightly builds.
- Improved macOS and Windows build compatibility.
- Updated bundled dependencies, including efsw and SOIL2.
- GLEW is now disabled by default while the renderer transitions away from the dependency.
Additional fixes
- Improved HTML, Markdown preview, and rich-text layout behavior.
- Fixed CSS variable resolution, specificity, font-weight selection,
box-sizing, percentage sizing, floats, flex layouts, inline blocks, whitespace handling, and image sizing. - Fixed HTML documents containing a UTF-8 byte-order mark.
- Improved UIWebView resource loading, local-path resolution, font handling, isolation, hit testing, and asynchronous cleanup.
- Fixed incorrect external-resource loading attempts for non-URL paths.
- Improved memory management and deterministic application shutdown.