| Age | Commit message (Collapse) | Author |
|
herdr draws each tab as a centred, padded block, and a named tab shows its
name without its number. With ui.tab_style = "tmux" the row is tmux 3.7c's
default status line: "[session] " cut to status-left-length 10, then each
window as "#I:#W#{?window_flags,#{window_flags}, }" -- current "*", last
"-", zoomed "Z" -- one space apart, plain text in the status line's colours.
Unnamed tabs are called after their active pane's directory, like
automatic-rename-format '#{b:pane_current_path}'.
The logic is in src/client/shell/tabs_tmux.rs; render_tab_bar keeps its
layout, scrolling, mouse hits and + button, with three one-line hooks for
width, text and style, and the session at the left. Each tab's active pane
and each workspace's previous tab are remembered by the client, so nothing
changes in the protocol and the client works against a stock herdr server.
The default, herdr, draws as before.
|
|
app_dir_name() names the directory every herdr path is built from --
config, sessions, sockets, logs, plugin registry, state. A release build of
tmuxrdr now uses "tmuxrdr", so ~/.config/tmuxrdr and ~/.local/state/tmuxrdr,
and shares nothing with a stock herdr on the same machine. Debug builds keep
"herdr-dev", which herdr's own tests expect.
|
|
* fix: keep escape-prefixed terminal key bindings intact
refs #4751
* test: cover escape-prefixed option+backspace binding
refs #4751
(cherry picked from commit 898f733f92dbbe53c428845534b03adb573f92be)
|
|
* fix: summarize old servers and saved machines after herdr update
* fix: include reconnect and per-session restart commands in update summary
|
|
refs #1530
refs #4369
|
|
* perf: send scrolling pane output as row shifts and skip blank cells
* fix: keep expanded scroll patches disjoint for the fast presentation path
|
|
* fix(windows): read agent command lines without PROCESS_VM_READ
Windows process command lines were read by opening each process with
PROCESS_VM_READ and walking its PEB. Hardened runtimes (Electron/Node) and
security products deny that access, so those processes resolved to a bare
`node.exe`/`bun.exe` name with no argv, argv0, or cmdline. A runtime-wrapped
agent launched from such a process was then indistinguishable from an
unrelated runtime process, and the pane stayed on the shell with
`agent_status: unknown`.
Prefer `NtQueryInformationProcess` with `ProcessCommandLineInformation`
(Windows 8.1+), which needs only `PROCESS_QUERY_LIMITED_INFORMATION`, and keep
the existing PEB read as a fallback for processes that do not expose a stored
command line. The fallback still requires `PROCESS_VM_READ`, so this only
widens coverage.
refs #4579
* fix(windows): handle growing command lines before failure test
The retry added for a command line that grows between the size probe and the
read was unreachable. NTSTATUS is signed, so STATUS_BUFFER_OVERFLOW,
STATUS_BUFFER_TOO_SMALL, and STATUS_INFO_LENGTH_MISMATCH are all negative and
were treated as failures by the earlier `status < 0` check.
Check the growth statuses first and retry once with the reported size. Also read
the returned UNICODE_STRING header unaligned, since a Vec<u8> buffer only
guarantees byte alignment.
* test(windows): keep command-line marker test process alive
Passing the marker as a second argument to `ping` let `ping` exit as soon as it
saw one target, so the command-line query could race the process exit. Move the
marker into a `rem` after `&` so it stays in cmd.exe's own command line and
`ping -n 11` keeps the process alive for the read.
|
|
* feat: support multiple prefix keys
keys.prefix accepts an array in addition to a single string so one
config can define several prefix keys. Every configured prefix enters
the same prefix mode, and the help panel lists them all.
Published keybinding profiles keep the primary prefix as a scalar and
carry the rest in an optional extra_prefixes field so older clients
keep working with the primary prefix.
* fix: reject an empty prefix list on reload
An explicitly empty keys.prefix array now stays empty through config
parsing so validation rejects it and a reload keeps the current
keybindings instead of silently falling back to ctrl+b.
|
|
The interactive-shell idle test sent SIGINT as soon as it observed the
shell was busy. That condition can be true before the shell finishes
moving the command into its own foreground process group, so the
interrupt could arrive before the command reset its signal dispositions.
The command then survived in a stale foreground group while the shell
showed a prompt, and the pane was never observed idle again.
Run cat and end it with EOF instead. cat blocks on stdin, so the busy
state is stable, and EOF avoids the interrupt/job-control race.
|
|
|
|
|
|
|
|
|
|
|
|
(#4686)
|
|
* feat: let agents report their own resume command
* fix: keep reported resume commands tied to accepted sessions and current owners
|
|
|
|
* feat: default machine add label to the ssh host
`herdr machine add <ssh-target>` no longer requires `--label`. Without
one, the machine is named after the SSH host with any `user@` prefix
removed, so `herdr machine add dev@workbox` shows up as `workbox`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
* fix: make default machine labels unique per session and handle ssh urls
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
|
|
* refactor: extract libghostty-vt binding into ghostty-vt workspace crate
* fix: build libghostty-vt into each build's out dir
|
|
* fix: keep api listener alive after transient accept errors
refs #4601
* fix: drop repeated api accept failure logs
refs #4601
|
|
|
|
* fix: refresh host palette on terminal redraw
* fix: count overlapping host palette queries
---------
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
|
|
|
|
refs #4446
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
|
|
refs #4630
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
|
|
Panes whose app has not enabled the kitty keyboard protocol received
ctrl+shift+letter as the same C0 byte as ctrl+letter. Encode the chord as
CSI-u instead, matching Ghostty's legacy encoder.
refs #4581
Co-authored-by: ain3sh <ainesh.chatterjee@gmail.com>
|
|
* fix: keep copy mode active during projection updates
refs #3812
* fix: preserve linewise selections during projection gaps
refs #3812
---------
Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
|
|
refs #4506
|
|
refs #4546
|
|
(#4561)
* feat!: replace the custom graphics api with optimized native kitty rendering
* fix: enable safe kitty optimizations automatically
---------
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
|
|
* fix: match navigator search terms independently
refs #4273
* docs: remove redundant navigator search note
refs #4273
|
|
refs #4507
|
|
* fix: prevent cursor flicker on status redraw
* fix: avoid stale cursor during resize
|
|
refs #4470
Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
|
|
refs #2968
|
|
refs #4313
|
|
refs #4309
|
|
|
|
* fix: reuse ssh authentication and add in-app mfa recovery
refs #3763
* refactor: move ssh recovery to machine cli
refs #3763
|
|
refs #4220
|
|
|
|
refs #1362
|
|
* fix: stagger restored agent startups
refs #4102
* fix: report startup delay changes requiring restart
refs #4102
|
|
refs #4104
|
|
refs #3338
refs #3990
refs #3916
|
|
Remove the droid-specific filter that discarded ED3 before PTY output
reached the terminal parser. Keeping stale scrollback beneath replayed
primary-screen frames duplicated the welcome header and old transcript.
Pass the original bytes to the parser and trackers. Add process-aware
regression coverage across PTY chunk boundaries and preserve ED2/ED3
screen-history separation and alternate-screen isolation.
Co-authored-by: ain3sh <ainesh.chatterjee@gmail.com>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
|
|
refs #1931
|
|
|
|
* fix: preserve session layouts across shutdown and restore failures
refs #4320
* test: update subscription fixture for pane restore errors
---------
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
|
|
* fix: confirm closing the last tab in the tui
refs #4379
* docs: clarify last-tab worktree confirmation in translations
refs #4379
---------
Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
|