diff --git a/.config/tmux/tmux.conf b/.config/tmux/tmux.conf index c28286e..9208d4b 100644 --- a/.config/tmux/tmux.conf +++ b/.config/tmux/tmux.conf @@ -63,7 +63,7 @@ bind -n TripleClick1Pane { # when the current pane is in alternate mode and discard the `-e` flag passed to # copy-mode from the default binding (See below) # TODO: Do not modify selection when scolling with the wheel -bind -n WheelUpPane \ +bind -n WheelUpPane { if -F "#{||:#{pane_in_mode},#{mouse_any_flag}}" { send -M } { @@ -73,16 +73,18 @@ bind -n WheelUpPane \ copy-mode; send -XN5 scroll-up } } +} # Scroll without selecting the pane bind -T copy-mode-vi WheelUpPane send -XN5 scroll-up # Exit copy-mode when at the bottom. This practically mimics `copy-mode -e` but # only scrolling with the wheel (`-e` annoys me when scrolling down with `C-d`). -bind -T copy-mode-vi WheelDownPane \ +bind -T copy-mode-vi WheelDownPane { if -F "#{==:0,#{scroll_position}}" { send -X cancel } { send -XN5 scroll-down } +} # Split panes with > and < unbind % @@ -132,12 +134,13 @@ bind -r P swap-window -d -t :-1 bind -n MouseDrag1Status swap-window -d -t= # TODO: do nothing on drags that don't start on a window name -bind -n MouseDragEnd1StatusDefault \ +bind -n MouseDragEnd1StatusDefault { if -F "#{e|>|f|0:#{mouse_x},#{e|/|f:#{window_width},2}}" { run-shell "tmux move-window -at #{last_window_index}" } { move-window -t0 } +} # Repeatable window-movement bindings bind -r \{ swap-pane -U @@ -173,20 +176,22 @@ bind -T copy-mode-vi C-v { # Yank into system clipboard with vim-like bindings bind -T copy-mode-vi y run-shell '${XDG_CONFIG_HOME:-$HOME/.config}/tmux/yank.sh' -bind -T copy-mode-vi Y \ +bind -T copy-mode-vi Y { if -F "#{selection_present}" { send -X copy-pipe-line } { send -X copy-pipe-end-of-line } +} # Clear selection or cancel copy-mode when nothing is selected -bind -T copy-mode-vi Escape \ +bind -T copy-mode-vi Escape { if -F "#{selection_present}" { send -X clear-selection } { send -X cancel } +} # Use insert-mode-like bindings to cancel copy-mode bind -T copy-mode-vi A send -X cancel @@ -200,7 +205,7 @@ bind -T copy-mode-vi i run-shell '${XDG_CONFIG_HOME:-$HOME/.config}/tmux/textobj # cannot scroll past the first and last history line, both bindings stop # scrolling when the respective line is visible. This mimics the behaviour of # vim's C-y at the top of the file. -bind -T copy-mode-vi C-e \ +bind -T copy-mode-vi C-e { # check that there is still history beneath to scroll to. if -F "#{e|>:#{scroll_position},0}" { send-keys -X scroll-down @@ -209,8 +214,9 @@ bind -T copy-mode-vi C-e \ send-keys -X cursor-up } } +} -bind -T copy-mode-vi C-y \ +bind -T copy-mode-vi C-y { # check that there is still history above to scroll to. if -F "#{e|<:#{scroll_position},#{history_size}}" { send-keys -X scroll-up @@ -219,6 +225,7 @@ bind -T copy-mode-vi C-y \ send-keys -X cursor-down } } +} # Navigate panes with -[hjkl] # NOTE: C-[hjkl] (w/o prefix) moves through vim splits and tmux panes