Skip to content
github-actions[bot] edited this page Jul 31, 2026 · 2 revisions

v6.0.2 (2026-07-31)

The centre of this release is mcview's new Built-in XML mctree parser: a non-validating, well-formedness parser implemented in the same three-layer shape as the JSON provider (micro-lexer, token parsers, grammar rules). It covers elements, attributes, text, CDATA, comments, processing instructions, DOCTYPE and character or predefined entity references; declared encodings are converted up front so non-UTF-8 input is transcoded before parsing; nesting is bounded by config->max_depth and every failure carries a byte offset. The HTML provider and the libxml2-based XML provider were dropped (.xhtml still resolves as XML) and the libxml2 dependency and its headers are removed. The new parser was tested against 1,067 XML files under /usr/share and /etc and rejected only a zero-byte file and a multi-root fragment.

Around that, plugin and core refactors and several targeted fixes polish behaviour. The shell-link work moves the shell VFS out of the core into a library compiled into the plugin (libshfs), removes the old src/vfs/shell core files and the core linkage to libssh2, relocates helper scripts, keeps per-host overrides, adds panel plugin API calls (stat, exists, resume, streaming read/write), introduces shfs-tool, and drops the unused dynamic VFS plugin loader. Fixes include mcedit reducing repainting during large pastes to avoid freezing, mcterm preserving the output of the first command with added zsh support and shared OSC 7 bookkeeping (falling back to legacy execution on timeout), a core type fix making the editor visual column a long instead of off_t, and panel plugin hotkey consolidation in lib/plugin-prefs that removes per-plugin duplicates and makes arcmc's "Create archive" hotkey user-configurable via arcmc.ini at [arcmc]/hotkey_create (default shift-f1, "none" disables) with menu labels derived from the binding.


Features

mcview

  • Built-in XML mctree parser. It implements a non-validating well-formedness parser in the same three-layer shape as the JSON provider (micro-lexer, token parsers, grammar rules) and covers the tree view needs: elements, attributes, text, CDATA, comments, processing instructions, DOCTYPE and character or predefined entity references. Declared encodings are converted up front from the encoding named in the XML declaration so non-UTF-8 input is transcoded before parsing, and nesting is bounded by config->max_depth with every failure carrying a byte offset. The HTML provider and the libxml2-based XML provider were dropped; .xhtml keeps resolving as XML and the libxml2 dependency and its headers are removed entirely. The new parser was tested against 1067 XML files under /usr/share and /etc and only rejected a zero-byte file and a multi-root fragment, neither of which is a well-formed document. (#88)

Plugins

shell-link

  • Shell-link plugin as a library. The shell VFS that used to be a core VFS class has been moved out of the core and now lives as a library behind the shell-link panel plugin. The old core files at src/vfs/shell are gone and the protocol now lives in libshfs, which is compiled into the plugin, and the core no longer links libssh2. Helper scripts moved with the plugin while per-host overrides still take precedence. The panel plugin API gained stat, exists, resume and streaming read/write, so copying, overwriting and resuming work between plugin panels. A new shfs-tool runs the library without the UI to help tell a protocol bug from a UI bug, and the dynamic VFS plugin loader was removed because nothing used it. (#90)

Fixes

mcedit

  • Reduced repainting during large pastes. This prevents the MC editor from freezing when you paste tens of kilobytes of text by stopping the program from repainting the screen for nearly every key event. Previously a large paste arrived as thousands of individual key events and MC tried to repaint for almost every one, which translated 30 KB of text into roughly 286 KB of escape sequences and could overwhelm the terminal and block in a write() syscall. MC now also checks the screen library's buffer and its decoded key queue and caps the repaint rate while input is still arriving, so the screen can show progress without flooding the terminal. (#92)

mcterm

  • mcterm: preserve output of the first command. Adds mcterm support for zsh. Fixes lost console output when a command is run before the first Ctrl-O by creating the mcterm shell on the first command and waiting briefly for its initial OSC 7 prompt. If that initialization times out, it falls back to the legacy execution path so the command is not lost. It also shares OSC 7 setup bookkeeping between bash and zsh. (#93)

Core

  • Editor column type consistency. Fixes build warnings by making the editor's visual column a long instead of an off_t. On systems where off_t is long long (such as macOS) passing its address to code that expects a long * could cause a pointer type mismatch, leading the callee to write eight bytes through a pointer to four or to write in the wrong layout. On x86_64 Linux the types coincided so the problem went unnoticed. The declaration is now long throughout and the narrowing cast that previously converted it back to long has been removed. (#97)

Plugins

git

  • Panel plugin hotkey handling and reassignable arcmc hotkey. This consolidates the hotkey config logic into lib/plugin-prefs so every panel plugin resolves bindings identically, and it makes arcmc's "Create archive" hotkey user-configurable. The per-plugin *_parse_hotkey and *_read_config_string copies were removed from arcmc, ftp, git, k8s, s3, sftp and shell-link and routed through the shared code. git (legacy paths) and k8s (own kubectl reader) keep thin wrappers around the shared helpers. The shared helpers in lib/plugin-prefs include parse_hotkey (name -> normalized keycode, \\"none\\" disables, mc-native label), read_config_string, and load_hotkey (reads user dir then system dir), and default seeding now runs after the shared read so a seeded user file cannot shadow a system config value. The arcmc "Create archive" hotkey is now reassignable via arcmc.ini at [arcmc]/hotkey_create (default shift-f1, \\"none\\" disables) and the menu shortcut label is derived from the binding so text and key stay in sync. (#87)

Clone this wiki locally