# Author:  Jianqun (https://jianqun.me)
# Updated: 2026-05-07

# Server Options

set -g  default-terminal tmux-256color                   # 设定 tmux 的默认终端
set -g  escape-time 200                                  # 设定 tmux 等待转义序列完成的时间 (毫秒)
set -g  exit-empty on                                    # 是否在没有活跃会话时自动退出服务端
set -g  exit-unattached off                              # 是否在没有客户端连接时自动退出服务端
set -g  focus-events on                                  # 是否将焦点事件传递给应用程序
set -g  set-clipboard on                                 # 是否设置终端剪贴板
set -ga terminal-features 'xterm-256color:RGB'           # 设定 tmux 的终端功能
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'    # 设定 tmux 的终端覆写

# Session Options

set -g  activity-action other                            # 设定在开启 monitor-activity 时监听的窗口
set -g  base-index 1                                     # 设定窗口的起始编号
set -g  bell-action any                                  # 设定在开启 monitor-bell 时监听的窗口
set -g  display-panes-active-colour cyan                 # 设定活跃窗格指示器的颜色
set -g  display-panes-colour white                       # 设定非活跃窗格指示器的颜色
set -g  display-panes-time 1000                          # 设定窗格指示器的显示时长 (毫秒)
set -g  display-time 1000                                # 设定状态行消息与其它屏幕指示器的显示时长 (毫秒)
set -g  history-limit 10000                              # 设定回滚缓冲区的历史记录限制 (行)
set -g  menu-border-lines single                         # 设定菜单的边界线类型
set -g  menu-border-style bg=white,fg=black              # 设定菜单的边界样式
set -g  menu-selected-style bg=red,fg=white              # 设定菜单的选中样式
set -g  menu-style bg=white,fg=black                     # 设定菜单的外观样式
set -g  message-command-style bg=yellow,fg=black         # 设定状态行消息样式 (命令模式)
set -g  message-style bg=red,fg=white                    # 设定状态行消息样式
set -g  mouse on                                         # 是否开启鼠标支持
set -g  prefix 'C-b'                                     # 设定 tmux 的第一个前缀键
set -g  prefix2 'C-_'                                    # 设定 tmux 的第二个前缀键
set -g  renumber-windows on                              # 是否在关闭窗口时对其它窗口进行重新编号
set -g  set-titles on                                    # 是否将 set-titles-string 作为客户端窗口标题
set -g  set-titles-string '[#h] #I:#W [#S]'              # 设定客户端窗口标题样式
set -g  silence-action other                             # 设定在开启 monitor-silence 时监听的窗口
set -g  status on                                        # 是否开启状态行
set -g  status-interval 1                                # 设定状态行的刷新间隔 (秒)
set -g  status-justify left                              # 设定状态行窗口列表的对齐方式
set -g  status-keys emacs                                # 设定状态行的按键风格 (vi/emacs)
set -g  status-left '[#h] '                              # 设定状态行左侧的内容样式
set -g  status-left-length 40                            # 设定状态行左侧的最大宽度 (列)
set -g  status-left-style none                           # 设定状态行左侧的外观样式
set -g  status-position top                              # 设定状态行的位置
set -g  status-right ' [%Y-%m-%d %H:%M:%S] [#S]'         # 设定状态行右侧的内容样式
set -g  status-right-length 40                           # 设定状态行右侧的最大宽度 (列)
set -g  status-right-style none                          # 设定装同行右侧的外观样式
set -g  status-style bg=white,fg=black                   # 设定状态行的外观样式
set -g  visual-activity on                               # 是否使用状态行消息代替窗口活动响铃
set -g  visual-bell off                                  # 是否使用状态行消息代替窗口终端响铃
set -g  visual-silence on                                # 是否使用状态行消息代替窗口静默响铃

# Window Options

set -g  automatic-rename on                              # 是否允许 tmux 自动重命名窗口标题
set -g  clock-mode-colour cyan                           # 设定时钟模式的时间颜色
set -g  clock-mode-style 24                              # 设定时钟模式的时间样式
set -g  copy-mode-match-style bg=cyan,fg=black           # 设定在复制模式执行搜索时的查找文本样式
set -g  copy-mode-mark-style bg=red,fg=white             # 设定在复制模式执行搜索时的标记文本样式
set -g  copy-mode-current-match-style bg=yellow,fg=black # 设定在复制模式执行搜索时的光标文本样式
set -g  fill-character ''                                # 设定填充窗口外观的字符
set -g  mode-keys vi                                     # 设定复制模式的按键风格 (vi/emacs)
set -g  mode-style bg=yellow,fg=black                    # 设定复制模式的外观样式
set -g  monitor-activity on                              # 是否开启监听窗口的活动状态
set -g  monitor-bell on                                  # 是否开启监听窗口的终端响铃
set -g  monitor-silence 0                                # 设定监听窗口静默状态的间隔 (秒)
set -g  pane-active-border-style bg=black,fg=cyan        # 设定活跃窗格的边界样式
set -g  pane-base-index 1                                # 设定窗格的起始编号
set -g  pane-border-indicators colour                    # 设定窗格的边界指示器
set -g  pane-border-lines heavy                          # 设定窗格的边界线类型
set -g  pane-border-status off                           # 是否开启窗格的边界状态行
set -g  pane-border-style bg=black,fg=white              # 设定非活跃窗格的边界样式
set -g  popup-border-lines heavy                         # 设定弹出式窗口的边界线类型
set -g  popup-border-style bg=black,fg=white             # 设定弹出式窗口的边界样式
set -g  popup-style bg=black,fg=white                    # 设定弹出式窗口的外观样式
set -g  window-status-activity-style none                # 设定状态行活动响铃窗口的外观样式
set -g  window-status-bell-style none                    # 设定状态行终端响铃窗口的外观样式
set -g  window-status-current-format '#I:#W#[fg=red]#F'  # 设定状态行活跃窗口的内容样式
set -g  window-status-current-style none                 # 设定状态行活跃窗口的外观样式
set -g  window-status-format '#I:#W#[fg=yellow]#F'       # 设定状态行非活跃窗口的内容样式
set -g  window-status-last-style none                    # 设定状态行先前活跃窗口的外观样式
set -g  window-status-separator ' '                      # 设定状态行窗口列表的分隔符
set -g  window-status-style none                         # 设定状态行非活跃窗口的外观样式
set -g  wrap-search on                                   # 是否在复制模式执行搜索时进行循环查找

# Pane Options

set -g  allow-passthrough off                            # 是否允许窗格中的程序使用终端转义序列
set -g  allow-rename off                                 # 是否允许窗格中的程序重命名窗口标题
set -g  alternate-screen on                              # 是否允许窗格中的程序使用终端备用屏幕功能
set -g  cursor-colour terminal                           # 设定光标颜色
set -g  cursor-style default                             # 设定光标样式
set -g  remain-on-exit off                               # 是否在非交互式后台程序退出时保留窗格
set -g  scroll-on-clear on                               # 是否在执行清屏指令时将屏幕内容保留在回滚缓冲区
set -g  synchronize-panes off                            # 是否开启多窗格同步输入
set -g  window-active-style bg=black,fg=white            # 设定活跃窗格的外观样式
set -g  window-style bg=black,fg=white                   # 设定非活跃窗格的外观样式

# Key Bindings

bind-key   -T prefix 'C-b' send-prefix
bind-key   -T prefix 'C-_' send-prefix -2

unbind-key -T root 'MouseDrag1Pane'
unbind-key -T root 'WheelUpStatus'
unbind-key -T root 'WheelDownStatus'
bind-key   -T root 'WheelUpPane'   if-shell -F '#{alternate_on}' { send-keys Up } \
{ if-shell -F '#{||:#{pane_in_mode},#{mouse_any_flag}}' { send-keys -M } { copy-mode -e } }
bind-key   -T root 'WheelDownPane' if-shell -F '#{alternate_on}' { send-keys Down }

unbind-key -T copy-mode 'MouseDragEnd1Pane'
bind-key   -T copy-mode 'WheelUpPane'   select-pane \; send-keys -X scroll-up
bind-key   -T copy-mode 'WheelDownPane' select-pane \; send-keys -X scroll-down

unbind-key -T copy-mode-vi 'MouseDragEnd1Pane'
bind-key   -T copy-mode-vi 'WheelUpPane'   select-pane \; send-keys -X scroll-up
bind-key   -T copy-mode-vi 'WheelDownPane' select-pane \; send-keys -X scroll-down
unbind-key -T copy-mode-vi 'v'
bind-key   -T copy-mode-vi 'v' send-keys -X begin-selection
bind-key   -T copy-mode-vi 'y' send-keys -X copy-pipe
