feat(c5): add zellij exit-capture logging and shared prune helper
Zellij has no live-stream facility like tmux pipe-pane, so capture is a one-shot 'zellij action dump-screen --full' run from a fish_exit handler (conf.d/zellij-logging.fish -> functions/_zellij_dump_log.fish). The C5 guard is checked inside the helper at exit time, so toggling logging needs no sync_logging coordination — there is no persistent stream. Extract pruning into functions/_prune_terminal_logs.fish, shared by both the tmux and zellij helpers. This also fixes a latent bug in the tmux helper: globbing tmux_*.log directly errored with 'No matches for wildcard' on the first log in an empty dir. The shared helper globs via 'set' (tolerates no-match) and uses command ls/rm to bypass the eza and trash C1 shadows.
This commit is contained in:
@@ -7,11 +7,10 @@
|
||||
# DESCRIPTION
|
||||
# Starts tmux pipe-pane capture for the current pane, streaming its output
|
||||
# to a timestamped log in SCROLLBACK_HISTORY_DIR (default ~/.terminal_history).
|
||||
# Before starting, prunes the oldest tmux_*.log files so that the total stays
|
||||
# within SCROLLBACK_HISTORY_MAX_FILES (default 100), leaving room for the new
|
||||
# log. No-op when not inside a tmux session ($TMUX unset) or tmux is missing.
|
||||
# Shared by conf.d/tmux-logging.fish (shell startup) and
|
||||
# __fish_config_sync_logging (C5 re-enable) so both stay in sync.
|
||||
# Old tmux_*.log files are pruned via _prune_terminal_logs to stay within
|
||||
# SCROLLBACK_HISTORY_MAX_FILES. No-op when not inside a tmux session ($TMUX
|
||||
# unset) or tmux is missing. Shared by conf.d/tmux-logging.fish (shell
|
||||
# startup) and __fish_config_sync_logging (C5 re-enable) so both stay in sync.
|
||||
#
|
||||
# RETURNS
|
||||
# 0 Always
|
||||
@@ -23,23 +22,12 @@ function _tmux_pipe_log --description 'Start tmux pipe-pane capture for the curr
|
||||
type -q tmux; or return 0
|
||||
|
||||
set -l log_dir (set -q SCROLLBACK_HISTORY_DIR; and echo $SCROLLBACK_HISTORY_DIR; or echo "$HOME/.terminal_history")
|
||||
set -l max_files (set -q SCROLLBACK_HISTORY_MAX_FILES; and echo $SCROLLBACK_HISTORY_MAX_FILES; or echo 100)
|
||||
set -l pane_id (tmux display-message -p '#{session_name}-w#{window_index}-p#{pane_index}' 2>/dev/null)
|
||||
set -l timestamp (date "+%Y-%m-%d_%H-%M-%S")
|
||||
set -l log_file "$log_dir/tmux_"$pane_id"_"$timestamp".log"
|
||||
|
||||
mkdir -p $log_dir
|
||||
|
||||
# Prune oldest logs, leaving room for the one we're about to create.
|
||||
# Names carry a per-pane prefix, so sort by mtime (command ls -tr = oldest
|
||||
# first). Use `command ls`: the bare `ls` is shadowed by the eza wrapper,
|
||||
# which injects OSC-8 escapes into paths and corrupts the filenames.
|
||||
set -l keep (math max 0, $max_files - 1)
|
||||
set -l logs (command ls -1tr $log_dir/tmux_*.log 2>/dev/null)
|
||||
if test (count $logs) -gt $keep
|
||||
set -l excess (math (count $logs) - $keep)
|
||||
command rm -f $logs[1..$excess]
|
||||
end
|
||||
_prune_terminal_logs tmux
|
||||
|
||||
tmux pipe-pane "cat >> $log_file" 2>/dev/null
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user