[Update] bulk update
This commit is contained in:
@@ -3,6 +3,18 @@
|
||||
set -g extended-keys on
|
||||
set -g extended-keys-format csi-u
|
||||
|
||||
# Mouse/touch reporting. Chiefly so the window list in the status bar is
|
||||
# tappable — tmux binds MouseDown1Status to `switch-client -t =` out of the box,
|
||||
# and status-format[1] below keeps the `range=window|…` markers that make each
|
||||
# entry a hit target, so a tap on a tab switches to it with no extra binding.
|
||||
# Wheel over the bar cycles windows; right-click a tab or the session name for
|
||||
# tmux's built-in menus (no touch equivalent — a phone can't right-click).
|
||||
#
|
||||
# The cost: drag-select now goes to tmux instead of kitty, so hold Shift when you
|
||||
# want kitty's own selection. Scroll wheel enters copy-mode on the pane rather
|
||||
# than kitty's scrollback, and a click focuses the pane under it.
|
||||
set -g mouse on
|
||||
|
||||
# Number windows (and panes) from 1 instead of 0 — easier to reach on the
|
||||
# keyboard. renumber-windows keeps them gap-free when a window is closed.
|
||||
set -g base-index 1
|
||||
@@ -42,8 +54,36 @@ set -g status-style "bg=default,fg=#cdd6f4" # transparent: no bar background
|
||||
set -g status-left-length 40
|
||||
set -g status-right-length 100
|
||||
|
||||
# Left: session name (mauve/bold) + thin divider.
|
||||
set -g status-left " #[fg=#cba6f7,bold]#S #[fg=#45475a]│ "
|
||||
# --- Mobile view -----------------------------------------------------------
|
||||
# status-left and status-right are re-evaluated per client on every draw, and
|
||||
# #{client_width} is that client's own width — so in `auto` mode a phone attached
|
||||
# to the same session as the desktop renders the compact bars while the desktop
|
||||
# keeps the full ones, simultaneously and with no intervention.
|
||||
#
|
||||
# @status_mode is auto (per-client, by width) | full | compact, cycled with
|
||||
# prefix+S. Rather than branch each bar three ways, the mode picks the width a
|
||||
# client has to beat — 0 nothing can lose, 9999 nothing can win — so each
|
||||
# decision below stays a single comparison. The 100 is the switch point: the full
|
||||
# right segment is ~60 columns before the window list even starts. Set
|
||||
# @status_mode without -g to scope an override to one session, so a grouped
|
||||
# mobile session can sit on `compact` while the desktop session stays on `auto`.
|
||||
#
|
||||
# Each variant lives in its own option instead of inline because #{?a,b,c} splits
|
||||
# its branches on commas and the styles are full of them (#[fg=…,bold]); option
|
||||
# values are substituted after the ternary is parsed, so those commas are never
|
||||
# seen as separators.
|
||||
#
|
||||
# NOTE: the comparisons MUST use #{e|>=:…}. Plain #{>=:…} compares as strings, so
|
||||
# "144" >= "100" is false and every client would get the compact bar.
|
||||
set -g @status_mode auto
|
||||
set -g @status_cutoff "#{?#{==:#{@status_mode},full},0,#{?#{==:#{@status_mode},compact},9999,100}}"
|
||||
|
||||
# Left: session name (mauve/bold) + thin divider. Compact clips the name to two
|
||||
# characters — enough to tell sessions apart when every column counts. #{=2:…}
|
||||
# takes a format NAME, so it's session_name here rather than the #S shorthand.
|
||||
set -g @left_full " #[fg=#cba6f7,bold]#S #[fg=#45475a]│ "
|
||||
set -g @left_compact " #[fg=#cba6f7,bold]#{=2:session_name} #[fg=#45475a]│ "
|
||||
set -g status-left "#{?#{e|>=:#{client_width},#{E:@status_cutoff}},#{E:@left_full},#{E:@left_compact}}"
|
||||
|
||||
# Middle: flat window list — inactive muted, active mauve/bold, 2-space gaps.
|
||||
set -g window-status-separator " "
|
||||
@@ -52,9 +92,35 @@ setw -g window-status-current-format "#[fg=#cba6f7,bold]#I #[fg=#cdd6f4,bold]#W"
|
||||
setw -g window-status-activity-style "fg=#f9e2af"
|
||||
|
||||
# Right: net dl/ul · cpu · mem │ date │ clock. continuum prepends its invisible
|
||||
# save hook here (this block sits above the tpm `run` line, so the hook survives
|
||||
# every reload). Metrics are scripts/*.sh, symlinked into ~/.config/tmux/scripts/.
|
||||
set -g status-right "#[fg=#a6e3a1]#(~/.config/tmux/scripts/net.sh dl) #[fg=#f9e2af]#(~/.config/tmux/scripts/net.sh ul) #[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) #[fg=#fab387]#(~/.config/tmux/scripts/temp.sh)#[fg=#45475a]│ #[fg=#a6adc8]%a %b %-d #[fg=#45475a]│ #[fg=#cba6f7,bold]%H:%M "
|
||||
# save hook to status-right (this block sits above the tpm `run` line, so the
|
||||
# hook survives every reload). Metrics are scripts/*.sh, symlinked into
|
||||
# ~/.config/tmux/scripts/. The hook lands ahead of the #{?} below, i.e. outside
|
||||
# it, so it keeps running for every client regardless of which variant is drawn.
|
||||
set -g @right_full "#[fg=#a6e3a1]#(~/.config/tmux/scripts/net.sh dl) #[fg=#f9e2af]#(~/.config/tmux/scripts/net.sh ul) #[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) #[fg=#fab387]#(~/.config/tmux/scripts/temp.sh)#[fg=#45475a]│ #[fg=#a6adc8]%a %b %-d #[fg=#45475a]│ #[fg=#cba6f7,bold]%H:%M "
|
||||
|
||||
# Compact: cpu + mem only. Net rates and the temp glyph go first (widest, least
|
||||
# useful on a phone), then the date, then the clock — a phone shows its own.
|
||||
set -g @right_compact "#[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) "
|
||||
|
||||
set -g status-right "#{?#{e|>=:#{client_width},#{E:@status_cutoff}},#{E:@right_full},#{E:@right_compact}}"
|
||||
|
||||
# Cycle auto -> compact -> full -> auto. Braces instead of nested quoted strings
|
||||
# so the styles' commas and the inner if-shell don't need escaping.
|
||||
bind S {
|
||||
if -F '#{==:#{@status_mode},auto}' {
|
||||
set -g @status_mode compact
|
||||
display 'status bar: compact (forced)'
|
||||
} {
|
||||
if -F '#{==:#{@status_mode},compact}' {
|
||||
set -g @status_mode full
|
||||
display 'status bar: full (forced)'
|
||||
} {
|
||||
set -g @status_mode auto
|
||||
display 'status bar: auto — switches at 100 columns'
|
||||
}
|
||||
}
|
||||
refresh-client -S
|
||||
}
|
||||
|
||||
# Two rows: [0] drawn top-border rule · [1] the bar content. The rule doubles as
|
||||
# the separator from the pane content above; tmux status height is whole rows, so
|
||||
|
||||
Reference in New Issue
Block a user