diff --git a/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf b/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf new file mode 100644 index 00000000..bfbb2d3e --- /dev/null +++ b/regress/conf/a46e6e84cd1071105aa807256dbc158d.conf @@ -0,0 +1,432 @@ +# Dynamic configuration file generated by ~/Makefile from /home/sunny/.tmux.conf.erb +# +# DO NOT EDIT THIS FILE BY HAND -- +# YOUR CHANGES WILL BE OVERWRITTEN +# + + + +bind-key R source ~/.tmux.conf \; display-message 'config reloaded!' + +#----------------------------------------------------------------------------- +# terminal +#----------------------------------------------------------------------------- + +# enable mouse support for general selection and control +set-option -g mouse on + +# auto-set terminal title to current window pane's title +set-option -g set-titles on + +# enable 256-color support for pretty colorschemes in Vim +set-option -g default-terminal 'screen-256color' + +# allow Vim to receive focus events from terminal window +set-option -g focus-events on + +# allow Vim to recieve modifier keys: Shift, Control, Alt +set-window-option -g xterm-keys on + +# prevent tmux from catching modifier keys meant for Vim +set-option -s escape-time 0 + +# enable 24-bit true color RGB escape sequences under st +# https://sunaku.github.io/tmux-24bit-color.html +set-option -ga terminal-overrides ',st-256color:Tc' +set-option -ga terminal-overrides ',xterm-256color:Tc' # hterm (ChromeOS) + +# allow set-titles to change the window title under XTerm +# http://opennomad.com/content/goodbye-screen-hello-tmux +set-option -ga terminal-overrides ',xterm*:XT' + +# allow set-titles to change the window title under XTerm +# http://opennomad.com/content/goodbye-screen-hello-tmux +# http://stackoverflow.com/questions/15195624 +set-option -ga terminal-overrides ',st-256color:smkx=\E=' + +# yank to system clipboard rather than primary selection +# http://invisible-island.net/xterm/terminfo-contents.html#tic-xterm_tmux +set-option -ga terminal-overrides ',xterm*:Ms=\E]52;c;%p2%s\007' + +# KiTTY always appends to clipboard; must clear it first +# https://sw.kovidgoyal.net/kitty/protocol-extensions.html#pasting-to-clipboard +set-option -ga terminal-overrides ',xterm-kitty:Ms=\E]52;c;!\007\E]52;c;%p2%s\007' + +# prevent standout from appearing as italics under URxvt +# http://comments.gmane.org/gmane.comp.terminal-emulators.tmux.user/1927 +set-option -ga terminal-overrides ',rxvt-unicode*:sitm@' + +#----------------------------------------------------------------------------- +# appearance +#----------------------------------------------------------------------------- + +# Colors from the "lucius" and "gruvbox" themes in the vim-airline plugin: +# https://github.com/bling/vim-airline/blob/master/autoload/airline/themes/lucius.vim +# https://github.com/morhetz/gruvbox/blob/master/autoload/airline/themes/gruvbox.vim + +set-option -g status-style fg=colour246,bg=colour237 +set-window-option -g window-status-current-style fg=colour214,bg=colour239 +set-option -g pane-border-style fg=colour239 +set-option -g pane-active-border-style fg=colour208 +set-option -g message-style fg=colour214,bg=colour239 +set-window-option -g mode-style fg=colour214,bg=colour239,bold,reverse + +# Common UI interaction cues from Blueprint CSS: +# http://blueprintcss.org/tests/parts/forms.html +set-window-option -g window-status-bell-style 'bg=#205791,fg=#d5edf8' # info (blue) +set-window-option -g window-status-activity-style 'bg=#8a1f11,fg=#fbe3e4' # error (red) + +#----------------------------------------------------------------------------- +# status bar +#----------------------------------------------------------------------------- + +# toggle status bar visibility +bind-key -n M-` set-option -g status + +# toggle status bar position +bind-key -n M-~ \ + if-shell 'tmux show-option -g status-position | grep -q top$' \ + 'set-option -g status-position bottom' \ + 'set-option -g status-position top' + +# put status bar at the top of the screen +set-option -g status-position top + +# list windows on left side of status bar +set-option -g status-left-length 0 + +# make window list easier to scan +set-window-option -g window-status-format ' #[bold]#I#F#[nobold]#W ' +set-window-option -g window-status-current-format ' #[bold]#I#F#[nobold]#W ' +set-window-option -g window-status-separator '' + +# show pane title, pane identifier, and hostname on right side of status bar +set-option -g status-right-length 64 +set-option -g status-right '#{=32:pane_title} \ +#[fg=colour214,bg=colour239] #S:#I.#P \ +#(test -n "$SSH_TTY" && echo "#[fg=colour214,bg=colour239,bold,reverse] #H ")' + +#----------------------------------------------------------------------------- +# windows +#----------------------------------------------------------------------------- + +# create window +bind-key -n M-e new-window + +# rename window +bind-key -n M-E command-prompt -I '#W' 'rename-window "%%%"' + +set-window-option -g automatic-rename off + + +# break off pane to a new window +bind-key -n M-x \ + command-prompt -p 'break-pane:' -I '#W' \ + 'break-pane ; rename-window "%%%"' +bind-key -n M-X break-pane + +# focus window +bind-key -n M-, previous-window +bind-key -n M-. next-window +bind-key -n M-o last-window + +# focus by number +set-option -g base-index 1 +set-window-option -g pane-base-index 1 +set-option -g renumber-windows on +bind-key -n M-0 choose-window +bind-key -n M-1 select-window -t :1 +bind-key -n M-2 select-window -t :2 +bind-key -n M-3 select-window -t :3 +bind-key -n M-4 select-window -t :4 +bind-key -n M-5 select-window -t :5 +bind-key -n M-6 select-window -t :6 +bind-key -n M-7 select-window -t :7 +bind-key -n M-8 select-window -t :8 +bind-key -n M-9 select-window -t :1 \; select-window -t :-1 + +# swap window +bind-key -n M-< swap-window -t :-1 +bind-key -n M-> swap-window -t :+1 + +# monitor window +set-option -g visual-activity on +set-option -g visual-silence on + + +bind-key -n M-k \ + set-window-option monitor-activity \;\ + display-message 'monitor-activity #{?monitor-activity,on,off}' + +bind-key -n M-K \ + if-shell 'tmux show-window-option -g monitor-activity | grep -q off$' \ + 'set-window-option -g monitor-activity on' \ + 'set-window-option -g monitor-activity off' \;\ + display-message 'monitor-activity #{?monitor-activity,on,off} (global)' + +bind-key -n M-j \ + command-prompt -p 'monitor-silence (seconds):' -I '#{monitor-silence}' \ + 'set-window-option monitor-silence %% ;\ + display-message "monitor-silence #{?monitor-silence,on,off}"' + +#----------------------------------------------------------------------------- +# panes +#----------------------------------------------------------------------------- + +# send input to all panes in window (toggle) +bind-key C-a \ + set-option synchronize-panes \;\ + display-message 'synchronize-panes #{?synchronize-panes,on,off}' + +# clear the screen in all panes in window +bind-key C-l \ + set-option synchronize-panes on \;\ + send-keys C-l \;\ + set-option synchronize-panes off + +# create pane (below, above, left, right) +bind-key -n M-c split-window -c '#{pane_current_path}' +bind-key -n M-C split-window -c '#{pane_current_path}' -b +bind-key -n M-R split-window -c '#{pane_current_path}' -b -h +bind-key -n M-r split-window -c '#{pane_current_path}' -h + +# join pane (above, left, below, right) +bind-key -n M-g move-pane -t .-1 -s . # join pane at bottom of prev pane +bind-key -n M-l move-pane -t .-1 -s . -h # join pane at right of prev pane +bind-key -n M-G move-pane -d -s .+1 -t . # join next pane at bottom +bind-key -n M-L move-pane -d -s .+1 -t . -h # join next pane at right + +# Intelligently navigate tmux panes and Vim splits using the same keys. +# See https://sunaku.github.io/tmux-select-pane.html for documentation. +# +# +-------------+------------+-----------------------------+ +# | inside Vim? | is Zoomed? | Action taken by key binding | +# +-------------+------------+-----------------------------+ +# | No | No | Focus directional tmux pane | +# | No | Yes | Nothing: ignore key binding | +# | Yes | No | Seamlessly focus Vim / tmux | +# | Yes | Yes | Focus directional Vim split | +# +-------------+------------+-----------------------------+ +# +vim_navigation_timeout=0.05 # number of seconds we give Vim to navigate +navigate=' \ + pane_is_zoomed() { \ + test #{window_zoomed_flag} -eq 1; \ + }; \ + pane_title_changed() { \ + test "#{pane_title}" != "$(tmux display -p "##{pane_title}")"; \ + }; \ + command_is_vim() { \ + case "${1%% *}" in \ + (vi|?vi|vim*|?vim*|view|?view|vi??*) true ;; \ + (*) false ;; \ + esac; \ + }; \ + pane_contains_vim() { \ + case "#{=3:pane_current_command}" in \ + (git|ssh|sh) command_is_vim "#{=5:pane_title}" ;; \ + (*) command_is_vim "#{=5:pane_current_command}" ;; \ + esac; \ + }; \ + pane_contains_neovim_terminal() { \ + test "#{=12:pane_title}" = "nvim term://"; \ + }; \ + navigate() { \ + tmux_navigation_command=$1; \ + vim_navigation_command=$2; \ + vim_navigation_only_if=${3:-true}; \ + if pane_contains_vim && eval "$vim_navigation_only_if"; then \ + if pane_contains_neovim_terminal; then \ + tmux send-keys C-\\ C-n; \ + fi; \ + eval "$vim_navigation_command"; \ + if ! pane_is_zoomed; then \ + sleep $vim_navigation_timeout; : wait for Vim to change title; \ + if ! pane_title_changed; then \ + eval "$tmux_navigation_command"; \ + fi; \ + fi; \ + elif ! pane_is_zoomed; then \ + eval "$tmux_navigation_command"; \ + fi; \ + }; \ +navigate ' +navigate_left=" $navigate 'tmux select-pane -L' 'tmux send-keys C-w h'" +navigate_down=" $navigate 'tmux select-pane -D' 'tmux send-keys C-w j'" +navigate_up=" $navigate 'tmux select-pane -U' 'tmux send-keys C-w k'" +navigate_right="$navigate 'tmux select-pane -R' 'tmux send-keys C-w l'" +navigate_back=" $navigate 'tmux select-pane -l || tmux select-pane -t1'\ + 'tmux send-keys C-w p' \ + 'pane_is_zoomed' " + +## QWERTY keys - comment these out if you don't use QWERTY layout! +#bind-key -n M-h run-shell -b "$navigate_left" +#bind-key -n M-j run-shell -b "$navigate_down" +#bind-key -n M-k run-shell -b "$navigate_up" +#bind-key -n M-l run-shell -b "$navigate_right" +#bind-key -n M-\ run-shell -b "$navigate_back" + +# Dvorak keys - comment these out if you don't use Dvorak layout! +bind-key -n M-d run-shell -b "$navigate_back" +bind-key -n M-h run-shell -b "$navigate_left" +bind-key -n M-t run-shell -b "$navigate_up" +bind-key -n M-n run-shell -b "$navigate_down" +bind-key -n M-s run-shell -b "$navigate_right" + +# resize pane +bind-key -r H resize-pane -L 5 +bind-key -r T resize-pane -U 5 +bind-key -r N resize-pane -D 5 +bind-key -r S resize-pane -R 5 + +# zoom pane +bind-key -n M-m resize-pane -Z + +# swap pane +bind-key -n M-- swap-pane -D +bind-key -n M-_ swap-pane -U +bind-key -n M-D run-shell 'tmux select-pane -l \; swap-pane -d -s #D' +bind-key -n M-H run-shell 'tmux select-pane -L \; swap-pane -d -s #D' +bind-key -n M-T run-shell 'tmux select-pane -U \; swap-pane -d -s #D' +bind-key -n M-N run-shell 'tmux select-pane -D \; swap-pane -d -s #D' +bind-key -n M-S run-shell 'tmux select-pane -R \; swap-pane -d -s #D' + +# attach by number +bind-key -n 'M-!' join-pane -t :1 +bind-key -n 'M-@' join-pane -t :2 +bind-key -n 'M-#' join-pane -t :3 +bind-key -n 'M-$' join-pane -t :4 +bind-key -n 'M-%' join-pane -t :5 +bind-key -n 'M-^' join-pane -t :6 +bind-key -n 'M-&' join-pane -t :7 +bind-key -n 'M-*' join-pane -t :8 +bind-key -n 'M-(' run-shell 'tmux select-window -t :1 \;\ + select-window -t :-1 \;\ + join-pane -s "#{pane_id}"' +bind-key -n 'M-)' choose-window 'join-pane -t "%%%"' + +# promote pane (toggle) +bind-key -n M-Enter \ + if-shell 'test #P -ne 1' \ + 'select-pane -t 1' \ + 'last-pane; swap-pane -s 1' + +# rotate panes +bind-key -n M-a rotate-window -D +bind-key -n M-A rotate-window -U + +#----------------------------------------------------------------------------- +# layouts +#----------------------------------------------------------------------------- + +bind-key M-w select-layout main-horizontal +bind-key M-W select-layout even-vertical +bind-key M-v select-layout main-vertical +bind-key M-V select-layout even-horizontal +bind-key M-z select-layout tiled + +# half-screen tiling layouts (horizontal, vertical) +# https://sunaku.github.io/tmux-half-screen-tiling-layouts.html +bind-key -n M-w select-layout main-horizontal \;\ + run-shell 'tmux resize-pane -t 1 -y $(( #{window_height} / 2 ))' +bind-key -n M-v select-layout main-vertical \;\ + run-shell 'tmux resize-pane -t 1 -x $(( #{window_width} / 2 ))' + +# binary space partitioned layouts (dwindle, spiral) +# https://sunaku.github.io/tmux-layout-dwindle.html +bind-key -n M-w run-shell 'tmux-layout-dwindle brhc && tmux-redraw-vim' +bind-key -n M-W run-shell 'tmux-layout-dwindle trhc && tmux-redraw-vim' +bind-key -n M-v run-shell 'tmux-layout-dwindle brvc && tmux-redraw-vim' +bind-key -n M-V run-shell 'tmux-layout-dwindle blvc && tmux-redraw-vim' +bind-key -n M-z select-layout tiled + +#----------------------------------------------------------------------------- +# scrollback buffer +#----------------------------------------------------------------------------- + +# buffer length +set-option -g history-limit 32767 + +# search buffer using copy mode +bind-key -n M-/ copy-mode \;\ + command-prompt -p 'search-backward (press up):' \ + -i 'send-keys -X search-backward-incremental "%%%"' + +# search buffer using Vim or less +bind-key -n M-| \ + capture-pane -J -S - \; \ + new-window -n '#S:#I.#P' -a ' \ + tmux save-buffer - \; delete-buffer | { \ + if command -v vim; \ + then vim -R -c "set nofen is hls ic" -; \ + else less; \ + fi; \ + }; \ + ' \; \ + run-shell 'tmux send-keys G \?' + +# search colored buffer using less +bind-key -n M-? \ + capture-pane -e -J -S - \; \ + new-window -n '#S:#I.#P' -a ' \ + tmux save-buffer - \; delete-buffer | \ + less -R \ + ' \; \ + run-shell 'tmux send-keys G \?' + +# scroll buffer +# NOTE: set "URxvt.saveLines: 0" in ~/.Xdefaults to make Shift+PageUp bindable +# NOTE: see http://aperiodic.net/screen/interface for doing the same in XTerm +bind-key -n S-PPage copy-mode -u + +# copy text from buffer +bind-key -n M-u copy-mode +set-window-option -g mode-keys vi +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi y send-keys -X copy-selection +bind-key -T copy-mode-vi - send-keys -X jump-again +bind-key -T copy-mode-vi _ send-keys -X jump-reverse +bind-key -T copy-mode-vi ? command-prompt -p 'search-backward:' -I '#{pane_search_string}' -i 'send-keys -X search-backward-incremental "%%%"' +bind-key -T copy-mode-vi / command-prompt -p 'search-forward:' -I '#{pane_search_string}' -i 'send-keys -X search-forward-incremental "%%%"' + +# transfer copied text to attached terminal with yank: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -T copy-mode-vi Y send-keys -X copy-pipe 'yank > #{pane_tty}' +# open the visual selection with xdg-open(1) +bind-key -T copy-mode-vi O send-keys -X copy-pipe 'xargs -r xdg-open' + +# paste most-recently copied text +bind-key -n M-i paste-buffer + +# paste previously copied text (chosen from a menu) +bind-key -n M-I choose-buffer + +# transfer most-recently copied text to attached terminal with yank: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -n M-y run-shell 'tmux save-buffer - | yank > #{pane_tty}' + +# transfer previously copied text (chosen from a menu) to attached terminal: +# https://github.com/sunaku/home/blob/master/bin/yank +bind-key -n M-Y choose-buffer 'run-shell "tmux save-buffer -b \"%%%\" - | yank > #{pane_tty}"' + +#----------------------------------------------------------------------------- +# TMUX plugin manager https://github.com/tmux-plugins/tpm +#----------------------------------------------------------------------------- + +set -g @plugin 'tmux-plugins/tmux-resurrect' +set -g @resurrect-capture-pane-contents on + +set -g @plugin 'Morantron/tmux-fingers' +set -g @fingers-key '-n M-U' +set -g @fingers-compact-hints 1 +set -g @fingers-hint-format '#[fg=yellow,bold,reverse]%s' +set -g @fingers-hint-labels ' \ + a o e u i d h t n s \ + p y f g c r l \ + q j k x b m w v z \ + A O E U I D H T N S \ + P Y F G C R L \ + Q J K X B M W V Z \ +' + +run-shell ~/.tmux/plugins/tpm/tpm