Skip to content
github-actions[bot] edited this page Aug 2, 2026 · 1 revision

mc6 v6.0.3 (2026-08-02)

The centre of this release is work on plugins and the plugin API: most prominently the new Quick View support for panel plugins via an optional get_quick_view(), and a substantial rework of spell checking as a plugin. Quick View lets a panel preview neighbouring entries (including non-files such as pod logs, kubectl describe output or connection settings), is kept separate from get_local_copy() so previews are not made editable/copyable, and raises MC_PANEL_PLUGIN_API_VERSION to 10 (out-of-tree plugins must be rebuilt). It's implemented in k8s, docker, shell-link, ftp, sftp and s3; preview files now live while shown, failed previews report inside the panel, plugins can query quiet-messages via mc_pp_quiet_messages(), and previews over FISH are capped by the new get helper (version 3) using SHELL_MAX_BYTES (64 KB for a preview) while F3/F4 still fetch whole files; temporary previews retain their 0600 mode fixing cases with pod manifests and S3 keys.

Surrounding that are coordinated plugin/infra and core fixes. Spell checking is always built now: there's a Spell engine selection setting to choose aspell or hunspell, the plugin dlopens the library at runtime and reports its availability truthfully (including language/dictionary reporting), probes aren't latched across restarts, the Check word dialog focuses suggestions and Add word pre-fills input, and MC_SPELL_LOG=<file> lets you trace engine/language/dictionary decisions. Packaging was updated (no --enable-aspell, try libaspell.so.15 first, Arch/Debian/rpm changes described) and the spell plugin gained a runtime soname search that counts down libaspell.so.24...libaspell.so.15 and then libaspell. Other fixes include mcterm terminal query replies via a VTERM_REPLY event (consuming DCS strings and answering Device Attributes and XTGETTCAP), subshell handling for plain sh (treat sh as unknown and disable the subshell to avoid hangs), a TTY non-ASCII key redraw bug fix, fallback libarchive detection for arcmc builds on systems without libarchive.pc, the removal of the cpio VFS in favor of arcmc, and the removal of the tar filesystem from the VFS layer.


Features

Plugins

docker

  • Quick View in panel plugins. Adds Quick View to panel plugins through a new optional get_quick_view(); an entry on a plugin panel can now be previewed in the neighbouring panel, including entries that are not files such as a pod's logs, kubectl describe output, or a connection's settings. This is kept separate from get_local_copy() because that function also backs F4/F5/F6 and would make those previewed entries editable and copyable, and the change raises MC_PANEL_PLUGIN_API_VERSION to 10 so out-of-tree plugins must be rebuilt; the feature is implemented in k8s, docker, shell-link, ftp, sftp and s3 while plugins without it keep working exactly as before. The preview file now lives as long as it is shown so structured view and other users reopening it by name find it, failed previews are reported inside the panel instead of a modal that froze the cursor, and plugins can see the core's quiet-messages state via mc_pp_quiet_messages(). Quick View over FISH no longer drags whole files across because the GET stream cannot be cut short, so the cap goes to the far end and the get helper (version 3) takes SHELL_MAX_BYTES and sends exactly min(size - offset, max) (64 KB for a preview), while F3 and F4 still fetch whole files, and temporary previews keep the 0600 they are created with which fixes cases where g_file_set_contents() had been dropping that to the umask for pod manifests and an S3 access key. (#108)

plugin API / infra

  • Spell engine selection. Spell checking no longer depends on --enable-aspell: it is always built, only needs gmodule and dlopens the library at run time, and the engine is a plugin setting letting you choose aspell or hunspell, each with its own dictionary lookup. The plugin now reports its own state truthfully: it is unavailable when the library is present but no dictionary for the chosen language exists, the probe is no longer latched across restarts, and the messages name the language and list the dictionaries actually present instead of guessing package names. The ordering bug that made "Spell checking is off" answer any keystroke while Ctrl-P alone produced no response has been fixed. The Check word dialog now focuses the suggestion list so Enter replaces the word instead of cancelling; a word with no suggestions still opens the dialog with Replace dropped and the focus on Add word, and Add word prefills an input while the language line shows the code the user typed and the engine answering. Set MC_SPELL_LOG=<file> to trace engine, language, dictionary, word and verdict in a release build. (#112)

Fixes

mcterm

  • Terminal query replies. This answers terminal capability queries that shells such as fish 4 send before drawing the first prompt in the embedded terminal. Previously the emulator did not consume DCS strings so ESC P and the following bytes were printed as normal text, the unanswered query stayed on the screen, and fish waited ten seconds, printed a warning over the screen and turned off part of its features. To fix this, mcterm adds a VTERM_REPLY event that carries the answer, consumes DCS strings, and replies to two questions: Device Attributes with a VT100 that has an advanced video option, and XTGETTCAP with "I know none of these". The answer is written to the pty by mcterm, and mcview ignores the event when showing a terminal recording. (#123)

Core

  • Subshell handling for plain sh. When your login shell is a plain sh (as on FreeBSD), mc no longer aborts or hangs during subshell initialization. mc now treats sh as an unknown shell: it preserves the command line and disables the subshell. Previously mc attempted to drive sh like ash, but the BSD sh does not expand command substitutions in PS1 so the subshell handshake never completed and mc hung. The new behavior avoids that handshake and allows mc to start in all modes without requiring -u. (#117)
  • TTY non-ASCII key handling. Typing a non-ASCII character in the editor previously produced no visible character until the next keypress; a Russian word stayed invisible until the cursor was moved. This was a regression from PR #92. The cause was that is_idle() used SLang_input_pending(), which reads waiting bytes into S-Lang's own buffer, so the second byte of a multibyte character was consumed there, select() no longer saw it, and mc waited for new input while one byte remained unread, preventing a redraw. (#113)

Plugins

arcmc

  • Fallback libarchive detection. The build now falls back to compiler checks when libarchive.pc is not provided by pkg-config. Those checks verify the presence of archive.h and the symbol archive_read_free and will configure the arcmc plugin when those are found. This allows FreeBSD builds to keep the arcmc plugin enabled when libarchive is present in the base system but no libarchive.pc is installed, preventing the plugin from being dropped solely because pkg-config is absent and preserving the existing behavior when a libarchive.pc is available. (#114)

plugin API / infra

  • Spell checking packaging. Spell checking is now built in unconditionally and the packaging has been updated to match. The plugin no longer insists on libaspell.so and now tries libaspell.so.15 first, which avoids telling users that the library is missing when distributions place libaspell.so only in the development package. The --enable-aspell configure option and the need for aspell headers have been removed, so the option and development packages were dropped from the Arch PKGBUILD and CI jobs, Debian now suggests aspell and hunspell, and doc/INSTALL documents what is built. The rpm packaging stops producing bogus dependencies on /usr/sbin/perl and /usr/sbin/python3 by passing the interpreter paths to configure after Fedora 42 made /usr/sbin a symlink to bin. The Gentoo ebuild required no change. (#115)

Internal

  • Spell plugin soname lookup. The spell plugin now searches for the libaspell library at runtime across multiple sonames instead of relying on a single hardcoded name. It counts down through the range libaspell.so.24 to libaspell.so.15 and tries the bare libaspell name last. No single version is written into the code any more. The answer of the search is remembered like the hunspell path so failed searches are not repeated, avoiding cases where mismatched sonames caused spell checking to stop and report a missing library. (#124)
  • cpio vfs replaced by arcmc. The cpio vfs backend has been removed and replaced with arcmc. (#119)
  • Tar filesystem removal. The tar filesystem has been removed from the VFS layer. All registration, handlers and associated code paths were deleted and the build and tests were updated accordingly. This simplifies the VFS implementation and reduces the maintenance burden. Tar archives remain accessible via external tools or other VFS backends. (#118)

Clone this wiki locally