Major changes
The project is now consistently named M-Commander. The main executable is installed as mcommander, the editor, viewer and diff viewer are installed as mcedit6, mview and mdiff. Distribution packages are now named mcommander, mcommander-plugins and mcommander-lua, allowing M-Commander and GNU Midnight Commander to coexist without claiming the traditional mc, mcedit, mcview and mcdiff program names. Installed data and package directories have been renamed accordingly, while existing user configuration remains compatible. (#234, #298, #299, #300, #301, #302)
Markdown files now have a native Lua-based rendered view. It covers headings, lists, tables, links, footnotes, fenced code with M-Commander's syntax highlighting, display math and Mermaid flowchart, sequence and class diagrams. Large documents are rendered incrementally so the first screen can be shown before the rest of the document is complete, and the renderer has its own configurable layout and diagram settings. (#237, #289, #290, #292, #296, #308, #309, #310)
The new mcpeek panel plugin opens .NET assemblies as navigable trees of references, resources, namespaces, types and members. It can show decompiled C# or IL, follow referenced assemblies, find usages, export source as projects and reopen rebuilt assemblies while preserving the current location. Assemblies can be opened from local files, archives and remote plugin panels. (#241)
The viewer is now an interactive text-reading surface rather than a read-only stream. Text can be navigated with a visible cursor, selected with the keyboard or mouse and copied to the clipboard; syntax highlighting is shared with the editor and also works in the diff viewer. (#238, #245, #248, #264)
M-Commander now includes an interactive skin editor. Skins can be inspected and changed inside the application, including their 16-color, 256-color and truecolor class. All bundled skins gained sections for mcterm, mctree and mcstruct, and Mashdark and Tokyo Night were added. (#226, #229, #230, #232)
Features
Viewer
-
Markdown rendering. Markdown is rendered directly in the viewer with headings, emphasis, links, lists, tables and fenced code blocks. Footnotes and reference links are supported, code blocks use the same syntax rules as the editor, and links use OSC 8 where the terminal supports it. (#237, #289)
-
Mermaid and display math. Flowcharts, sequence diagrams and class diagrams are drawn in the terminal, including node shapes, coloured classes and connectors. Display-math environments include matrices, cases, arrays and aligned expressions. (#289, #292, #293, #308)
-
Incremental generated sources. Runtime handlers can provide viewer data through
mc.source.generator, producing a bounded amount on each event-loop pass. Markdown uses this to display the first screen of a large or slow document immediately and continue rendering while the viewer remains responsive. (#296) -
Text selection and reading cursor. ASCII view supports a visible cursor, keyboard and mouse selection, word and line selection and clipboard copy. Formatting used for ANSI and nroff display is stripped when selected text is copied. (#238, #248, #264)
-
Syntax highlighting in Viewer and Diff Viewer. The editor lexical scanner is now a shared syntax service. Viewer and Diff Viewer use the same rules while preserving diff backgrounds and changed-word markers. (#245)
-
PDF viewer.
lua-pdfextracts page text and images and presents them in the viewer, with sixel rendering where supported. Pages remain searchable text rather than flattened images, and the handler provides page navigation and several layouts. (#270) -
Improved nroff rendering. Nroff mode understands SGR styling, OSC 8 links and traditional overstrike sequences, including conversion of common overstrike pairs to Unicode glyphs. (#288)
-
Viewer settings from the Options menu. Wrap, syntax highlighting, mouse scrolling, remembered position, automatic structured view and other viewer settings have their own dialog. Structured-view file-size and node limits are configurable as well. (#295, #307)
-
Filter in the structured view. F6 in the mcstruct tree opens the same Filter dialog as ASCII mode and keeps only the nodes whose key or value matches, with the path to every match opened.
]and[walk the matches, and an empty pattern or leaving the tree clears the filter. (#329)
mcedit
-
Control-character display. Control characters can be shown in caret notation or hidden. Hidden characters occupy no screen cell, and cursor movement and deletion treat them together with the visible text around them. (#223, #233)
-
Codeset-aware clipboard. Editor clipboard metadata records the source codeset and block type. Pasting into an editor with another codeset recodes the copied text with iconv instead of inserting incompatible bytes. (#239)
mcterm
-
Stable command-line row. The shell input line remains anchored to M-Commander's command-line row while completion lists and other shell output are moved above it. (#225)
-
Command-line clipboard support. Ctrl-Insert and Shift-Insert work consistently with panels visible or hidden and with either M-Commander or the shell owning the command line. Large pastes require confirmation and PTY writes remain non-blocking. (#243)
-
Typed search and filter. Alt-S searches terminal scrollback using a pattern entered in place; Alt+Shift+S filters it. Search wraps through the history, matching rows remain navigable while a filter is active, and the existing selection-based filter remains available. (#317)
-
More file-manager commands with panels hidden. F1 opens terminal help, F7 creates a directory and Shift-F4 starts a new file in the current panel directory. F8 no longer reaches through the hidden terminal overlay to delete the panel entry underneath. (#317)
-
Fish shell integration. Fish is started with M-Commander's integration through its
-Coption, while terminal function keys remain available to applications running inside mcterm. (#249, #259)
Panels and file manager
-
Hotlist stores plugin locations. The Hotlist can contain local directories, VFS locations and panel-plugin addresses such as Git, Docker, Kubernetes and archive locations. Its dialog is keyboard-oriented, searchable and prevents duplicate entries. (#221, #222)
-
Editable User Menu. The User Menu edits its own INI-based representation. Entries and nested submenus can be inserted, edited, deleted, reordered and imported, and command editing uses the new multiline
WTextAreawidget. (#220) -
Directory watching. Local panels can follow filesystem changes through inotify with debouncing. Hidden panels are marked stale and refreshed when shown again; the feature is controlled by the new
Watch directoriespanel option. (#275) -
Fast bulk marking. Operations that mark many files publish one selection event for the complete operation rather than one event per file. Selecting 10,000 entries by mask drops from tens of seconds to a fraction of a second. (#273)
-
Filesystem-like plugin panels behave like local panels. Hidden and backup file settings, symlink handling and lynx-like navigation are applied consistently to suitable plugin panels. (#231)
-
Rearranged file-manager menus. Chmod, Chown, Advanced chown and Chattr moved to a new Attributes menu, so the File menu fits a 24-row terminal. The skin editor and the Edit extension file and Edit highlighting group file items are in the Options menu, and the Edit menu file item is gone because the User Menu edits itself. A click on a menu separator no longer closes the menu. (#333)
-
Mouse-wheel scrolling in Help. The Help viewer now scrolls with the mouse wheel, including when the pointer is over a link. (#263)
Help and documentation
-
Help and manual pages written in Markdown. The Help window reads Markdown directly, with nodes built from headings and a generated contents page; manual pages are generated from the same sources, and plugin and Lua script help files use Markdown as well. (#326)
-
Help split by program. Each program names its own help file, the seven plugins that had no help now have one, and the manuals in every language describe the programs as they currently are. mctree and mcstruct gained manual pages, and
mcommander(1)gained an ENVIRONMENT section that also explains how to turn on the debug logs. (#330, #332)
Plugins
mcpeek
- .NET assembly browser and decompiler. PE/CLI assemblies open as panel trees of references, namespaces, types and members. Members can be viewed as decompiled C# or IL, referenced assemblies can be followed, usages can be found across opened assemblies, and namespaces can be exported as compilable projects. (#241)
skin editor
-
Interactive skin editing. The skin editor can preview and change colour keys without editing the INI by hand and preserves the declared 16-, 256- or truecolor class of the skin. (#226, #230)
-
Complete bundled skin coverage. Existing skins now define colours for mcterm, mctree and mcstruct, and Mashdark and Tokyo Night are included. (#229, #232)
Lua runtime
-
Shared syntax service for scripts.
mc.syntax.scan()exposes the editor/viewer syntax engine to Lua and returns colour definitions and byte ranges produced by the selected syntax rule set. (#290) -
Settings for Lua packages. A Lua package can register a settings dialog with
mc.settings(). The plugin manager lists all Lua packages and can open either their settings or their source; the Markdown handler uses this for layout and diagram options. (#310)
arcmc
- Directory sizes inside archives. Ctrl-Space computes the stored size of an archive directory from the archive index and displays it in the panel. The panel-plugin API gains a corresponding directory-size capability. (#316)
lua-dbf
- DBF Quick View. DBF files render as aligned tables inside the embedded Quick View while F3 and Enter retain the interactive full-screen table viewer. (#313)
Fixes
mcterm
-
Fish startup sequences no longer affect prompt attributes. Private CSI sequences such as fish's modifyOtherKeys setup are no longer interpreted as SGR, preventing an unexpectedly bold or underlined prompt. The same change fixes a divide-by-zero on extremely small terminals. (#235)
-
Menus remain above terminal redraws. Busy-line updates no longer repaint through menus and dialogs layered over mcterm, and redundant terminal resizing is avoided. (#315)
-
No blink when the shell draws its first prompt. Prompt colours are allocated before the first draw, the busy line is not shown before the first prompt, and full redraws use synchronized output where the terminal supports it. (#284)
Viewer
-
Display modes no longer leak between files. Syntax, nroff and terminal rendering state is reset correctly when sources or modes are changed, including after generated views. (#260, #261, #269, #294)
-
Viewer button bar is drawn on open. Opening a file with F3 shows the button-bar labels immediately instead of after the first key. (#281)
-
nroff documents follow the locale charset. Man pages and pod, me and ms documents are formatted through preconv and
nroff -Tutf8and converted to 8-bit locales, instead of using-Tlatin1in every locale. (#287) -
PDF pictures without sixel. Terminals without sixel get pictures drawn with Chafa characters, wide characters are measured in screen columns, and memory used by previously viewed pages is bounded. (#271)
-
No hang on a PDF page with a picture when the window is resized. The wait for the output of a child process starts again after a signal, so a resize (SIGWINCH) no longer leaves the viewer blocked while img2sixel fills the pipe. (#277)
Panels and plugins
-
Panel directory survives reread. Refreshing the file manager no longer changes the process working directory away from that of the current panel. (#291)
-
Plugin sort order is temporary. Closing a plugin panel restores the panel's previous sort field and direction instead of persisting the plugin's preferred ordering. (#303)
-
User Menu command files survive until the shell reads them. Temporary command scripts remove themselves after execution rather than being deleted too early by M-Commander. (#228)
-
Samba returns to the correct connection. Going up from a Samba connection to the root connection list places the cursor back on that connection. (#227)
-
FTP directory copies into plugin panels. Copying a complete directory tree into the FTP plugin works rather than producing an incomplete result. (#279)
-
SFTP connection failures are actionable. Failed connections keep their status window open and distinguish socket, name-resolution, authentication and libssh2 errors; a connection is attempted only once per action. (#282)
-
Git history for merged branches. A branch with no commits ahead of its base now shows the commits that were merged from that branch instead of an empty history. (#283)
-
Shell links send current helper scripts. When no helper is installed on the remote host, the built-in copy that is sent there is now generated from the helper scripts at build time. Nine of the eighteen built-in copies had fallen behind, among them an old
getand anlswithout symbolic link handling. Based on the approach in MidnightCommander/mc#5155 by Phil Krylov. (#276)
Input
- Ctrl-Enter is recognized from the first keypress. Ctrl-Enter is detected from the tty ICRNL flag, and the ncurses backend no longer reports every Enter as Ctrl-Enter. (#240)
Display
- Fast allocation of color pairs. A color pair is found by its number instead of by a scan of the pair table, so allocating many pairs, for example 3840 of them, takes a few milliseconds instead of more than four seconds. (#285)
Internal
Build and packaging
-
Perl and Python are no longer build dependencies. The perl
man2hlptool is gone now that Help reads Markdown, and the Python-based torrent listing test has been removed. (#326) -
Run mode is chosen by the exact program name. The program name is looked up in a table of names, so only the installed names start the editor, the viewer or the diff viewer; names such as
mcedit2ormcview-oldno longer start them by accident. (#297)