Skip to main content

Pragtical v3.14.0 Release

· 10 min read
Jefferson Gonzalez
Contributor of Pragtical

Before getting into the changes, here is a look at how Pragtical has been evolving, including some of the new interface improvements in this release.

Pragtical v3.14.0 brings application menus, more flexible placement of command prompts and project search, workspace session management, a refreshed Plugin Manager, and lower idle CPU usage. The changes below cover the work since v3.13.1.

Application Menus And Toolbar​

Many editor commands can now be found under the File, Edit, Search, View, Tools and Help menus. This makes it easier to discover commands without knowing their names or remembering every keybinding. Plugins can also add their own entries, with shortcuts and enabled states following the registered commands.

Borderless mode and the menu bar are now enabled by default. In borderless mode, the menu sits beside the logo in the title bar, leaving the rest of the title area available for dragging the window. Thanks to Tocal on Discord for suggesting this placement!

Application menu embedded in the borderless title bar, with the Tools menu open

Both Borderless and Show Menu Bar can be changed under Settings > Core > User Interface. The borderless resize area is now a thin strip on all four edges, so it no longer steals clicks from status bar items. Resizing is disabled while maximized or fullscreen.

Here is the menu demonstration from PR #630:

The toolbar can also move. Settings > Plugins > Treeview > Toolbar Position offers Left, Bottom, Top and Right: place it beside, above or below the file tree, or at the editor's right edge. This screenshot from the initial menu and toolbar PR shows the right-hand layout:

Application menu and toolbar placed at the editor's right edge

Command Prompts And Floating Views​

Command prompts are no longer limited to the bottom of the window. The Command Palette Position setting under Core > User Interface offers Bottom, Top and Center. Center floats the input and its suggestions over the editor instead of resizing the document panes. Bottom remains the default.

The same option can be set in your user module:

local config = require "core.config"
config.commandview_position = "center"

The next prompt uses the new placement. Centered prompts keep their top edge steady while filtering results, instead of moving around as the list gets shorter.

Underneath these changes is a shared floating-view API. Menus, completion popups and dialogs can use the same placement, focus and mouse handling, instead of each plugin having to intercept editor events on its own. Plugin authors can find more details in the floating views guide.

More floating-view demos from PR #630

Command prompts and the floating About dialog:

Completion and documentation popups with the optional LSP plugin:

Prompts can also remember where you left them. CommandView now supports optional snapshots of input, selection and result scrolling. Core commands use this to resume repeated searches and commands, with context checks so a Go To Line search does not accidentally follow you into a different document. The video from PR #631 shows returning to a previous Go To Line search:

Project Search Placement​

Global project search can now stay on the left, move to the right, or open as a centered popup. Choose Settings > Plugins > Project Search > Position to change it. Keyboard result navigation remains available, and the centered view stays open while a live search updates its matches.

Project search transitions were restored too, and centered search and About can slide into view. The shared floating API respects the transition settings, so disabling animations works consistently for these popups.

Search and About animation preview from PR #635

Workspace Sessions​

The previous release fixed automatic session restoration. This release adds a way to choose which saved session to load and remove sessions you no longer need. Open File > Sessions, or use the workspace:load-session, workspace:remove-session and workspace:clear-sessions commands.

File menu showing saved workspace sessions and load, remove and clear actions

Before loading another session, Pragtical backs up the current workspace, including unsaved text. Loading replaces the current document layout, while removing saved sessions leaves the open tabs alone. These operations apply to the current project, without clearing sessions belonging to other projects.

TreeView File Counts​

Thanks to Vinfall, the file tree can show how many files are inside a collapsed directory. Counts follow the tree's hidden and ignored-file settings. Here is the preview from the original contribution:

Directory file counts beside collapsed folders in TreeView

The follow-up work moved counting into its own bundled plugin and made the scans yield while traversing directories, keeping the editor usable during large counts. Enable it under Settings > Plugins > Treeview File Counts; it is off by default. TreeView also has separate row drawing hooks for plugins that need to add gutter content or information beside a filename.

Plugin Manager​

The Plugin Manager has a refreshed interface with search, category and status filters, sorting, a details pane, and checkboxes for selecting several plugins. Install, upgrade or uninstall the selected entries without having to repeat the operation for every row. Filters and selection state are retained through the view's workspace restoration.

The package manager now uses core.json, and the old standalone JSON library copies have been removed from local runs, packages and AppImages. The plugins pin also includes the latest LSP and Ghostty updates, the Center Doc menu-bar toggle for Zen mode, and Emoji fixes.

Lower Idle CPU And UI Fixes​

The main loop now uses SDL events for long waits and precise sleeps for short frame delays. The unfocused grace period is renewed only when there is actual activity. In the idle check shared with PR #645, unfocused CPU usage fell from 1.6% to about 0.24% of one core; the result depends on the workload and enabled plugins.

Widget updates do less work, and collapsed panes no longer receive negative dimensions that could keep hidden content animating and redrawing. Animations also snap to their exact destination, allowing floating views to finish closing instead of leaving a border behind.

There are fixes for layout invalidation after scaling, stray dividers from hidden panes, nested list scrollbars, and selecting long TextBox input with the mouse. TextBox inputs can no longer accidentally open a Save dialog when using document save commands. SDL GPU also preserves color emoji RGB values, applying text opacity without tinting the glyphs with the current text color.

Build Updates​

Bundled dependencies were refreshed to SDL3 3.4.18, SDL3_image 3.4.8, FreeType 2.15.0, PCRE2 10.49 and libpng 1.6.59, alongside updated Widget, Plugin Manager, colors and plugins revisions. CI actions and macOS runners were updated too.

Vinfall is now included in the About dialog's contributors list. Thanks to everybody who reported issues, tested the rolling builds and helped improve the editor!

Downloads on GitHub.

Changes Log​

New Features​

  • Add application menus, floating views, command palette placement and toolbar docking (#630)

  • Add optional command prompt state recall (#631)

  • Add configurable project search placement (#632)

  • Add workspace session management (#633)

  • Add optional directory file counts to TreeView (#623)

Enhancements​

  • Enable borderless mode and the application menu by default (#643)

  • Embed the application menu in the borderless title bar (#637)

  • Make more editor commands accessible from the application menus (#640)

  • Add TreeView drawing hooks and asynchronous file counting (#641)

  • Lower idle CPU usage (#645)

  • Update Widget to reduce CPU usage (#646)

  • Integrate the updated Plugin Manager and remove obsolete JSON library copies (#624)

Fixes​

  • Allow disabling save commands for embedded document views (#626)

  • Fix mouse selection and scrolling in TextBox inputs (#628)

  • Fix Widget list layout and nested scrollbar input (#629)

  • Fix UI scaling, hidden pane drawing and Widget integration (#634)

  • Fix project search and floating view sliding animations (#635)

  • Preserve color emoji colors in SDL GPU text rendering (#636)

  • Keep centered command prompts stable while filtering (#638)

  • Finish animations at their exact destination (#639)

  • Keep split nodes and tab content within nonnegative bounds (#647)

Build System​

  • Update CI actions, macOS runners and bundled dependencies (#644)

  • Update plugins subproject (a8f3b1a0)

Other Changes​

  • Add Vinfall to the About dialog contributors (#642)