From 35d0bea232a316e36cdb4b7eafa9fa219312b07f Mon Sep 17 00:00:00 2001 From: Christian Nieves Date: Thu, 12 Oct 2023 20:34:24 +0000 Subject: [PATCH] Tmux Lemonade --- tmux/.tmux.conf | 13 ++++--------- tmux/.tmux/plugins/tmux-yank/yank.tmux | 16 ++++++++-------- tmux/.tmux/plugins/vim-tmux-navigator/README.md | 15 ++++++++++++--- .../plugins/vim-tmux-navigator/pattern-check | 4 ++-- .../vim-tmux-navigator/vim-tmux-navigator.tmux | 2 +- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 5874b9e..806acfa 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -68,14 +68,11 @@ setw -g mode-keys vi # Setup 'v' to begin selection as in Vim bind-key -T copy-mode-vi 'v' send -X begin-selection +set -g @yank_action 'copy-pipe' # or 'copy-pipe-and-cancel' for the default +set -g @override_copy_command 'lemonade copy' + # transfer copied text to attached terminal with yank -bind-key -T copy-mode-vi Y send-keys -X copy-pipe 'tmux save-buffer - | yank > #{pane_tty}' - -# transfer most-recently copied text to attached terminal with 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 -# bind-key -n M-Y choose-buffer 'run-shell "tmux save-buffer -b \"%%%\" - | yank > #{pane_tty}"' +bind-key -T copy-mode-vi C-c send -X copy-pipe-no-clear "lemonade copy" # allowd pane-navigation while in copy-mode bind-key -T copy-mode-vi C-h select-pane -L @@ -140,8 +137,6 @@ set -g @plugin 'tmux-plugins/tmux-continuum' set -g @continuum-restore 'on' set -g @resurrect-dir '$HOME/.tmux/resurrect' -#set -g @plugin 'odedlaz/tmux-onedark-theme' - set -g @catppuccin_flavour 'macchiato' # or frappe, macchiato, mocha # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf) diff --git a/tmux/.tmux/plugins/tmux-yank/yank.tmux b/tmux/.tmux/plugins/tmux-yank/yank.tmux index 3ca43c5..3003974 100755 --- a/tmux/.tmux/plugins/tmux-yank/yank.tmux +++ b/tmux/.tmux/plugins/tmux-yank/yank.tmux @@ -44,32 +44,32 @@ set_copy_mode_bindings() { copy_command_mouse="$(clipboard_copy_command "true")" if tmux_is_at_least 2.4; then tmux bind-key -T copy-mode-vi "$(yank_key)" send-keys -X "$(yank_action)" "$copy_command" - tmux bind-key -T copy-mode-vi "$(put_key)" send-keys -X copy-pipe-and-cancel "tmux paste-buffer" - tmux bind-key -T copy-mode-vi "$(yank_put_key)" send-keys -X copy-pipe-and-cancel "$copy_command; tmux paste-buffer" + tmux bind-key -T copy-mode-vi "$(put_key)" send-keys -X copy-pipe-and-cancel "tmux paste-buffer -p" + tmux bind-key -T copy-mode-vi "$(yank_put_key)" send-keys -X copy-pipe-and-cancel "$copy_command; tmux paste-buffer -p" tmux bind-key -T copy-mode-vi "$(yank_wo_newline_key)" send-keys -X "$(yank_action)" "$copy_wo_newline_command" if [[ "$(yank_with_mouse)" == "on" ]]; then tmux bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X "$(yank_action)" "$copy_command_mouse" fi tmux bind-key -T copy-mode "$(yank_key)" send-keys -X "$(yank_action)" "$copy_command" - tmux bind-key -T copy-mode "$(put_key)" send-keys -X copy-pipe-and-cancel "tmux paste-buffer" - tmux bind-key -T copy-mode "$(yank_put_key)" send-keys -X copy-pipe-and-cancel "$copy_command; tmux paste-buffer" + tmux bind-key -T copy-mode "$(put_key)" send-keys -X copy-pipe-and-cancel "tmux paste-buffer -p" + tmux bind-key -T copy-mode "$(yank_put_key)" send-keys -X copy-pipe-and-cancel "$copy_command; tmux paste-buffer -p" tmux bind-key -T copy-mode "$(yank_wo_newline_key)" send-keys -X "$(yank_action)" "$copy_wo_newline_command" if [[ "$(yank_with_mouse)" == "on" ]]; then tmux bind-key -T copy-mode MouseDragEnd1Pane send-keys -X "$(yank_action)" "$copy_command_mouse" fi else tmux bind-key -t vi-copy "$(yank_key)" copy-pipe "$copy_command" - tmux bind-key -t vi-copy "$(put_key)" copy-pipe "tmux paste-buffer" - tmux bind-key -t vi-copy "$(yank_put_key)" copy-pipe "$copy_command; tmux paste-buffer" + tmux bind-key -t vi-copy "$(put_key)" copy-pipe "tmux paste-buffer -p" + tmux bind-key -t vi-copy "$(yank_put_key)" copy-pipe "$copy_command; tmux paste-buffer -p" tmux bind-key -t vi-copy "$(yank_wo_newline_key)" copy-pipe "$copy_wo_newline_command" if [[ "$(yank_with_mouse)" == "on" ]]; then tmux bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "$copy_command_mouse" fi tmux bind-key -t emacs-copy "$(yank_key)" copy-pipe "$copy_command" - tmux bind-key -t emacs-copy "$(put_key)" copy-pipe "tmux paste-buffer" - tmux bind-key -t emacs-copy "$(yank_put_key)" copy-pipe "$copy_command; tmux paste-buffer" + tmux bind-key -t emacs-copy "$(put_key)" copy-pipe "tmux paste-buffer -p" + tmux bind-key -t emacs-copy "$(yank_put_key)" copy-pipe "$copy_command; tmux paste-buffer -p" tmux bind-key -t emacs-copy "$(yank_wo_newline_key)" copy-pipe "$copy_wo_newline_command" if [[ "$(yank_with_mouse)" == "on" ]]; then tmux bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "$copy_command_mouse" diff --git a/tmux/.tmux/plugins/vim-tmux-navigator/README.md b/tmux/.tmux/plugins/vim-tmux-navigator/README.md index 08adb42..2c9dfa0 100644 --- a/tmux/.tmux/plugins/vim-tmux-navigator/README.md +++ b/tmux/.tmux/plugins/vim-tmux-navigator/README.md @@ -66,7 +66,7 @@ Add the following to your `~/.tmux.conf` file: # Smart pane switching with awareness of Vim splits. # See: https://github.com/christoomey/vim-tmux-navigator is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ - | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'" + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L' bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D' bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U' @@ -186,6 +186,15 @@ mapping. ### Additional Customization +#### Ignoring programs that use Ctrl+hjkl movement + +In interactive programs such as FZF, Ctrl+hjkl can be used instead of the arrow keys to move the selection up and down. If vim-tmux-navigator is getting in your way trying to change the active window instead, you can make it be ignored and work as if this plugin were not enabled. Just modify the `is_vim` variable(that you have either on the snipped you pasted on `~/.tmux.conf` or on the `vim-tmux-navigator.tmux` file). For example, to add the program `foobar`: + +```diff +- is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" ++ is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf|foobar)(diff)?$'" +``` + #### Restoring Clear Screen (C-l) The default key bindings include `` which is the readline key binding @@ -217,7 +226,7 @@ unbind -n C-\\ #### Disable Wrapping -By default, if you tru to move past the edge of the screen, tmux/vim will +By default, if you try to move past the edge of the screen, tmux/vim will "wrap" around to the opposite side. To disable this, you'll need to configure both tmux and vim: @@ -231,7 +240,7 @@ to conditionally wrap based on position on screen: ```tmux is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ - | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'" + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" bind-key -n 'C-h' if-shell "$is_vim" { send-keys C-h } { if-shell -F '#{pane_at_left}' {} { select-pane -L } } bind-key -n 'C-j' if-shell "$is_vim" { send-keys C-j } { if-shell -F '#{pane_at_bottom}' {} { select-pane -D } } bind-key -n 'C-k' if-shell "$is_vim" { send-keys C-k } { if-shell -F '#{pane_at_top}' {} { select-pane -U } } diff --git a/tmux/.tmux/plugins/vim-tmux-navigator/pattern-check b/tmux/.tmux/plugins/vim-tmux-navigator/pattern-check index 4e14979..bfcda8b 100644 --- a/tmux/.tmux/plugins/vim-tmux-navigator/pattern-check +++ b/tmux/.tmux/plugins/vim-tmux-navigator/pattern-check @@ -11,8 +11,8 @@ GREEN=$(tput setaf 2) YELLOW=$(tput setaf 3) NORMAL=$(tput sgr0) -vim_pattern='(^|\/)g?(view|l?n?vim?x?)(diff)?$' -match_tests=(vim Vim VIM vimdiff lvim /usr/local/bin/vim vi gvim view gview nvim vimx) +vim_pattern='(^|\/)g?(view|l?n?vim?x?|fzf)(diff)?$' +match_tests=(vim Vim VIM vimdiff lvim /usr/local/bin/vim vi gvim view gview nvim vimx fzf) no_match_tests=( /Users/christoomey/.vim/thing /usr/local/bin/start-vim ) display_matches() { diff --git a/tmux/.tmux/plugins/vim-tmux-navigator/vim-tmux-navigator.tmux b/tmux/.tmux/plugins/vim-tmux-navigator/vim-tmux-navigator.tmux index aea2522..e23d902 100755 --- a/tmux/.tmux/plugins/vim-tmux-navigator/vim-tmux-navigator.tmux +++ b/tmux/.tmux/plugins/vim-tmux-navigator/vim-tmux-navigator.tmux @@ -3,7 +3,7 @@ version_pat='s/^tmux[^0-9]*([.0-9]+).*/\1/p' is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ - | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'" + | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?|fzf)(diff)?$'" tmux bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" tmux bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" tmux bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"