github dividebysandwich/rat-commander v1.8.0

latest releases: v1.9.9, v1.9.8, v1.9.7...
one month ago

Headline Features

  • Directory tabs in each panel.
  • Trash support - F8 now moves to the freedesktop trash instead of unlinking.
  • SSH key authentication, so hosts with PasswordAuthentication no work.
  • Permission-denied recovery - retry a refused file operation as root instead of losing the whole transfer.
  • Content search worth using - streaming, regex-capable, with line numbers.
  • System clipboard over OSC 52, working across SSH and tmux.
  • Panels refresh themselves when something else changes the directory.

Added

Directory tabs

Each panel keeps as many open directories as you like.

  • Ctrl-N opens a tab, Alt-K closes one, Ctrl-PageDown / Ctrl-PageUp cycle them, and Alt-J lists them to pick from. Ctrl-Tab also works on terminals that don't reserve it.
  • A tab remembers its directory, view format, sort, filter, marks and cursor.
  • Local tabs are restored on the next run (panel_tabs / panel_tab_active in config.toml).
  • The tab strip only appears once a panel has more than one tab.
  • New tab, Close tab and Next tab are in the command palette.

Trash

  • F8 moves the selection to the freedesktop trash (~/.local/share/Trash), written natively rather than by shelling out to gio — so GNOME Files, Dolphin and gio trash --list all see it and can restore it.
  • Shift-F8 (or Ctrl-F8, for terminals that don't report Shift-F8) deletes permanently, with its prompt drawn in the red danger style.
  • Files on another mount go to a trash directory on their own volume ($topdir/.Trash/$uid, else .Trash-$uid), as the spec requires. A cross-filesystem trash is a real copy, so it shows progress and can be aborted.
  • Command palette gains a Go to Trash entry and a Use trash bin toggle (use_trash in config.toml).
  • Linux/BSD only. macOS and Windows keep deleting permanently — their recycle bins need formats/APIs rc does not speak.
  • Never applies to remote panels or inside archives: there is nowhere to move the file to, so F8 deletes outright and says so.

SSH key authentication

  • SFTP/SCP now authenticate the way ssh itself does: ssh-agent first, then key files (~/.ssh/id_ed25519, id_ecdsa, id_rsa, or one named in the connect dialog), then the password.
  • An encrypted key prompts for its passphrase.
  • Unknown host keys are recorded in ~/.ssh/known_hosts on first use; a changed host key is refused.
  • The chosen key file is remembered per saved server (key_file; passphrases are never stored).

Permission-denied recovery for file operations

When a copy/move/delete is refused for lack of permissions, the operation pauses on that file and offers to:

  • retry it as root (asking for your sudo password once, the way the disk manager does),
  • skip just that file, or
  • skip every later one,

instead of failing the whole operation.

Change directory on exit

  • rc --print-last-dir <FILE> writes the directory the active panel was showing when it quit.
  • Shell wrappers ship for bash/zsh (rc.sh) and fish (rc.fish) - source one and use rcd. The PowerShell equivalent is documented in the README.
  • On a remote or in-archive panel it falls back to that panel's last local directory, so you always land somewhere your shell can go.

Content search in Find file

  • The Content field now uses the same matcher as the viewer's and editor's search, with a new Content is a regular expression checkbox. Case sensitive applies to it too.
  • Files are read in streaming windows rather than loaded whole, so searching a tree of large files costs a fixed amount of memory. Previously every candidate file was read entirely into RAM, lowercased, and scanned with a plain substring match.
  • Files that look binary (a NUL byte near the start) are skipped, as grep does.
  • Results record the matching line, and F3 on a hit opens the viewer at that line.

System clipboard (Ctrl-Ins)

  • Copies the cursor's path, or every marked path one per line, to the system clipboard. File → Copy path to clipboard, and three palette entries (full path / bare name / selection).
  • In the editor, Ctrl-C and Ctrl-X now put the marked block on the system clipboard as well as the editor's own.
  • Uses the terminal's OSC 52 sequence rather than a clipboard daemon, so it needs no X or Wayland session and works over SSH — copying on a remote server lands the text on the clipboard of the machine in front of you. tmux and GNU screen are wrapped for automatically (tmux needs set -g allow-passthrough on).
  • Oversized copies (>64 KiB) are refused rather than truncated, since a half-written sequence would silently replace the clipboard with a fragment.
  • Copy-out only: terminals disable clipboard reads by default, so Ctrl-V in the editor keeps pasting from the editor's own clipboard.
  • Copying stuff from the editor or viewer no longer keeps trailing spaces when doing so from your terminal.

Auto-refreshing panels

  • A panel re-reads itself when something else changes the directory it is showing — a command in the subshell, a build in another window, a file arriving over the network. Ctrl-R still works but is rarely needed.
  • The cursor stays on the same file by name and marks survive.
  • Events are coalesced: one cp or git checkout produces one re-listing, about a third of a second after things go quiet.
  • Local directories only — a remote panel, an archive, and a find-results listing have nothing to watch (re-reading a results listing would throw the results away). Watching is non-recursive.
  • Toggle Auto-refresh panels in the command palette, or set auto_refresh = false in config.toml.

Changed

  • Copies preserve the source's timestamp and permissions, like cp -p. Re-running a directory sync therefore only moves what actually changed.
  • Ctrl-Insert on a panel now copies to the clipboard. It previously fell through to the plain-Insert handler and tagged the file.

Configuration

New keys in config.toml:

Key Default Meaning
use_trash true F8 moves to the trash instead of unlinking
auto_refresh true Re-read a panel when its directory changes on disk
panel_tabs [] Each panel's saved directory tabs
panel_tab_active 0 Which tab each panel had open
key_file (per saved server) "" SSH key to use; blank means agent / default keys

Full Changelog: v1.7.7...v1.8.0

Don't miss a new rat-commander release

NewReleases is sending notifications on new releases.