-
Notifications
You must be signed in to change notification settings - Fork 6
Release v6.0.2
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.
-
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_depthwith 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)
-
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/shellare gone and the protocol now lives inlibshfs, which is compiled into the plugin, and the core no longer linkslibssh2. Helper scripts moved with the plugin while per-host overrides still take precedence. The panel plugin API gainedstat,exists,resumeandstreaming read/write, so copying, overwriting and resuming work between plugin panels. A newshfs-toolruns 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)
- 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: preserve output of the first command. Adds mcterm support for
zsh. Fixes lost console output when a command is run before the firstCtrl-Oby creating the mcterm shell on the first command and waiting briefly for its initialOSC 7prompt. If that initialization times out, it falls back to the legacy execution path so the command is not lost. It also sharesOSC 7setup bookkeeping betweenbashandzsh. (#93)
-
Editor column type consistency. Fixes build warnings by making the
editor's visual column a
longinstead of anoff_t. On systems whereoff_tislong long(such as macOS) passing its address to code that expects along *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 nowlongthroughout and the narrowing cast that previously converted it back tolonghas been removed. (#97)
-
Panel plugin hotkey handling and reassignable arcmc hotkey. This
consolidates the hotkey config logic into
lib/plugin-prefsso every panel plugin resolves bindings identically, and it makes arcmc's "Create archive" hotkey user-configurable. The per-plugin*_parse_hotkeyand*_read_config_stringcopies 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 inlib/plugin-prefsincludeparse_hotkey(name -> normalized keycode,\\"none\\"disables, mc-native label),read_config_string, andload_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 viaarcmc.iniat[arcmc]/hotkey_create(defaultshift-f1,\\"none\\"disables) and the menu shortcut label is derived from the binding so text and key stay in sync. (#87)