############################# tmux config #############################
# : << EOF do not edit! 含义: 将 E-O-F 之间的重定向到 `:`, 也就是丢弃

# `tmux -V` > tmux3.2a+
#   tmux 3.4 以上支持 run-shell 增加可选项 -c 来指定工作目录(issue 3661), eg: -c '#{pane_current_path}'
# config path: /etc/tmux.conf, ~/.config/tmux/tmux.conf, ~/.tmux.conf
# set(set-option): 如果选项不是用户选项,则 -w 或 -s 可省略,tmux 会根据设置名称自动推断.
# setw: set -w 的简写
# bind(bind-key): 默认绑定到 prefix 表格中(相当于指定参数 -Tprefix), -N 用来写备注
# 命令语法: https://man7.org/linux/man-pages/man1/tmux.1.html#PARSING_SYNTAX

# --------------------------- general ---------------------------
set -g default-terminal "screen-256color" # 也会作为环境变量 TERM 的默认值
if 'infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"'

set -g history-limit 100000 # default is 2000

set -g automatic-rename off # 禁止 window auto-rename(打开会在每次执行命令后尝试重命名)
set -g allow-rename off     # 禁止 pane 的程序修改 window 的名称
set -g renumber-windows on  # window 销毁后对 window 重新编号
set -g base-index 1         # window 编号起始为 1, default is 0
set -g pane-base-index 1    # pane 编号起始为 1

set -g focus-events on      # 传递 focus 事件给 tmux 内运行的程序

# activity 与 bell(https://github.com/tmux/tmux/wiki/Advanced-Use#alerts-and-monitoring):
#   activity: 有输出(stdout/stderr), 比如 tail -f ...
#   bell    : 发送了 ASCII BEL, 比如 bash/zsh: echo -e '\a'
set -g monitor-activity on  # 监视 activity
set -g visual-activity off  # 有活动时只 bell, 而不要状态栏显示 message

# set ctrl-a as secondary prefix key
set -g prefix2 C-a
bind -N 'secondary prefix key' C-a send-prefix -2

# --------------------------- key table=root ---------------------------
bind -n -N 'clear screen and history' C-l send-keys C-l \; run 'sleep 0.1' \; clear-history
# bind ctrl+tab for next-window.
#     mintty 需要关闭 *Switch window*
#     windows terminal 需要增加 actions: { "command": {"action": "sendInput", "input": "\u001b[27;5;9~"}, "keys": "ctrl+tab" }
%if #{MSYSTEM}
  set -s user-keys[0] "\e[1;5I"                           
  bind -nr -N 'switch to next window' User0 next-window
%else
  bind -nr -N 'switch to next window' C-Tab next-window
%endif

# --------------------------- key table=prefix ---------------------------
bind -N 'clear screen and history'   C-l send-keys C-l \; run 'sleep 0.1' \; clear-history
bind -N 'switch to last window'      Tab last-window
bind -N 'create session'             C-c new-session
bind -N 'split-window horizontally'  -   split-window -v
bind -N 'split-window vertically'    _   split-window -h
bind -N 'toggle zoom'                +   resize-pane -Z
bind -N 'toggle mouse mode'          m   {
  set -g mouse #{?mouse,off,on}
  display ">>>mouse: #{?mouse,on,off}"
}
bind -N 'cap pane history to file'   C-p {
  command-prompt -I '-#{history_limit},~/tmux-cap-#{session_name}-#{window_index}-#{pane_index}-%Y%m%d%H%M%S.log' -p 'start-line relative to visible pane:,save to:' {
    run "tmux capture-pane -pS %1 > %2 \\; display 'saved pane history(start-line=%1) to file %2'"
  }
}
bind -N 'reload config'              r {
  source-file -q /etc/tmux.conf ~/.config/tmux/tmux.conf ~/.tmux.conf
  display 'config reloaded'
}

# --------------------------- status bar ---------------------------
set -g display-time 2000                                    # 状态栏消息显示时间
# prefix 按下以及鼠标模式 右下角提示, 以及修改时间格式为 15:16 23/02/24
# 原配置: `tmux display -p '#{status-right}'`
set -g status-right '#{?mouse,↖ | ,}#{?client_prefix,#[reverse]<C>#[noreverse] | ,}#{?window_bigger,[#{window_offset_x}#,#{window_offset_y}] | ,}"#{=21:pane_title}" | %H:%M %d/%m/%y'

# 以下配色方案取自 gpakosz/.tmux
set -g status-style                 'fg=#8a8a8a,bg=#080808'  # 状态栏样式
set -g message-style                'fg=#ffff00,bg=#080808'  # 状态栏消息样式
set -g message-command-style        'fg=#ffff00,bg=#080808'  # 状态栏消息样式
set -g mode-style                   'fg=#080808,bg=#00afff'  # c-w(choose-tree) 的样式

# 状态栏窗口样式. 注意: activity/bell 会被(来源不明?)修改为 reverse(fg与bg交换),
#    如果打开了 monitor-activity 则可能会导致通过脚本创建的初始窗口触发 activity 进而交换了 fg/bg, 所以此处修改它们
set -g window-status-activity-style 'fg=default,bg=default,underscore'
set -g window-status-bell-style     'fg=#ffff00,bg=default,blink,bold'
set -g window-status-current-style  'fg=#080808,bg=#00afff,bold'       # 当前激活 window 样式
set -g window-status-last-style     'fg=#00afff,bg=#303030,none'       # 上次激活 window 样式
set -g window-status-style          'fg=#8a8a8a,bg=#080808,none'       # window 默认样式

# do not edit!
# EOF

############################### shell script ###############################
# set -e

# _uptime() {
# }

# # do not edit!, 用来 `sh -s` 执行指定函数
# "$@"