[Tmux] add tmux session ressurection, better keybindings
This commit is contained in:
parent
17034d3d9d
commit
47d63fedb4
@ -72,6 +72,7 @@ Here’s a list of the plugins that I use.
|
|||||||
| tmux-sensible | Better defaults I can’t be bothered to change myself |
|
| tmux-sensible | Better defaults I can’t be bothered to change myself |
|
||||||
| tmux-yank | Better copy/pasting |
|
| tmux-yank | Better copy/pasting |
|
||||||
| tmux-prefix-highlight | Tell me which prefix I’m using |
|
| tmux-prefix-highlight | Tell me which prefix I’m using |
|
||||||
|
| tmux-resurrect | Persist tmux sessions across system restarts |
|
||||||
| nordtheme/tmux | Nord theme for Tmux! |
|
| nordtheme/tmux | Nord theme for Tmux! |
|
||||||
|
|
||||||
#+begin_src emacs-lisp :var plugins=plugins[,0] :exports code :wrap src tmux
|
#+begin_src emacs-lisp :var plugins=plugins[,0] :exports code :wrap src tmux
|
||||||
@ -90,6 +91,7 @@ set -g @plugin 'tmux-plugins/tpm'
|
|||||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
set -g @plugin 'tmux-plugins/tmux-yank'
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
||||||
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||||
set -g @plugin 'nordtheme/tmux'
|
set -g @plugin 'nordtheme/tmux'
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
@ -98,6 +100,27 @@ Let’s run TPM right after that.
|
|||||||
run '~/.config/tmux/tpm/tpm'
|
run '~/.config/tmux/tpm/tpm'
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
For restoring processes with =tmux-resurrect=, we must add additional
|
||||||
|
programs in the =@resurrect-processes= variable. These are:
|
||||||
|
#+name: resurrect-processes-list
|
||||||
|
- ="~ncmpcpp -q"=
|
||||||
|
- =btop=
|
||||||
|
- =ssh=
|
||||||
|
|
||||||
|
#+name: resurrect-processes
|
||||||
|
#+begin_src emacs-lisp :var processes=resurrect-processes-list :exports none :cache yes
|
||||||
|
(mapconcat (lambda (process) (string-replace "=" "" process))
|
||||||
|
processes
|
||||||
|
" ")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS[4f72312f2da98c81eff2b092779a59c993fa19e2]: resurrect-processes
|
||||||
|
: "~ncmpcpp -q" btop ssh
|
||||||
|
|
||||||
|
#+begin_src tmux :noweb yes
|
||||||
|
set -g @resurrect-processes '<<resurrect-processes()>>'
|
||||||
|
#+end_src
|
||||||
|
|
||||||
* Keybindings
|
* Keybindings
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: Keybindings-tx80rdd1huj0
|
:CUSTOM_ID: Keybindings-tx80rdd1huj0
|
||||||
@ -122,9 +145,14 @@ that”.
|
|||||||
|------------+------------------+-----------------|
|
|------------+------------------+-----------------|
|
||||||
| =«= | select-window -p | |
|
| =«= | select-window -p | |
|
||||||
| =»= | select-window -n | |
|
| =»= | select-window -n | |
|
||||||
| =p= | | pane |
|
| =Tab= | | windows |
|
||||||
|
| =w= | | pane |
|
||||||
| =y= | | copy-mode |
|
| =y= | | copy-mode |
|
||||||
|
|
||||||
|
Note I am using the key =w= to access the pane prefix because of how
|
||||||
|
used to Emacs I am, and in Emacs terminology panes are windows while
|
||||||
|
tmux windows would be tabs.
|
||||||
|
|
||||||
#+name: gen-keybinds
|
#+name: gen-keybinds
|
||||||
#+begin_src emacs-lisp :var keybinds=std-prefix :var prefix="prefix" :exports none
|
#+begin_src emacs-lisp :var keybinds=std-prefix :var prefix="prefix" :exports none
|
||||||
(mapconcat (lambda (keybind)
|
(mapconcat (lambda (keybind)
|
||||||
@ -145,7 +173,8 @@ that”.
|
|||||||
#+RESULTS: gen-keybinds
|
#+RESULTS: gen-keybinds
|
||||||
: bind-key -T prefix « select-window -p
|
: bind-key -T prefix « select-window -p
|
||||||
: bind-key -T prefix » select-window -n
|
: bind-key -T prefix » select-window -n
|
||||||
: bind-key -T prefix p switch-client -T pane
|
: bind-key -T prefix Tab switch-client -T windows
|
||||||
|
: bind-key -T prefix w switch-client -T pane
|
||||||
: bind-key -T prefix y switch-client -T copy-mode
|
: bind-key -T prefix y switch-client -T copy-mode
|
||||||
|
|
||||||
#+begin_src tmux
|
#+begin_src tmux
|
||||||
@ -168,10 +197,10 @@ open in the same directory as the directory I am currently in.
|
|||||||
|------------+-------------------------------------------+-----------------|
|
|------------+-------------------------------------------+-----------------|
|
||||||
| =/= | split-window -h -c "#{pane-current_path}" | |
|
| =/= | split-window -h -c "#{pane-current_path}" | |
|
||||||
| =-= | split-window -v -c "#{pane-current_path}" | |
|
| =-= | split-window -v -c "#{pane-current_path}" | |
|
||||||
| =c= | select-panel -L | |
|
| =c= | select-pane -L | |
|
||||||
| =t= | select-panel -D | |
|
| =t= | select-pane -D | |
|
||||||
| =s= | select-panel -U | |
|
| =s= | select-pane -U | |
|
||||||
| =r= | select-panel -R | |
|
| =r= | select-pane -R | |
|
||||||
| =.= | | pane-resize |
|
| =.= | | pane-resize |
|
||||||
|
|
||||||
#+begin_src tmux
|
#+begin_src tmux
|
||||||
@ -199,6 +228,51 @@ any key that is not part of the current prefix will get us out of it.
|
|||||||
<<gen-keybinds(keybinds=pane-resize-prefix, prefix="pane-resize")>>
|
<<gen-keybinds(keybinds=pane-resize-prefix, prefix="pane-resize")>>
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
** Windows
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: KeybindingsWindows-zg3fjes0luj0
|
||||||
|
:END:
|
||||||
|
Since windows are more akin to tabs in Emacs, and I am way more used
|
||||||
|
to it than Tmux, all keybinds are prefixed with a =Tab=, itself prefixed
|
||||||
|
with the main prefix.
|
||||||
|
#+name: windows-prefix
|
||||||
|
| Keybinding | Command |
|
||||||
|
|------------+-----------------|
|
||||||
|
| c | new-window |
|
||||||
|
| n | next-window |
|
||||||
|
| p | previous-window |
|
||||||
|
|
||||||
|
#+begin_src tmux
|
||||||
|
<<gen-keybinds(keybinds=windows-prefix, prefix="windows")>>
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
In order to access more easily the different windows, I want to be able to type =<prefix> TAB <window number>=. However, I’m using the bépo layout, numbers are available only when pressing shift. Otherwise, the characters typed are ="«»()@+-/*= (from 1 to 0).
|
||||||
|
#+begin_src emacs-lisp :wrap src tmux :exports code
|
||||||
|
(let ((keybinds "")
|
||||||
|
(keys '("\\\"" "«" "»" "(" ")" "@" "+" "-" "/" "*")))
|
||||||
|
(dotimes (i (length keys) keybinds)
|
||||||
|
(setq keybinds (string-trim
|
||||||
|
(concat keybinds
|
||||||
|
"\n"
|
||||||
|
(format "bind-key -T windows %s select-window -t :=%d"
|
||||||
|
(nth i keys)
|
||||||
|
(1+ i)))))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+RESULTS:
|
||||||
|
#+begin_src tmux
|
||||||
|
bind-key -T windows \" select-window -t :=1
|
||||||
|
bind-key -T windows « select-window -t :=2
|
||||||
|
bind-key -T windows » select-window -t :=3
|
||||||
|
bind-key -T windows ( select-window -t :=4
|
||||||
|
bind-key -T windows ) select-window -t :=5
|
||||||
|
bind-key -T windows @ select-window -t :=6
|
||||||
|
bind-key -T windows + select-window -t :=7
|
||||||
|
bind-key -T windows - select-window -t :=8
|
||||||
|
bind-key -T windows / select-window -t :=9
|
||||||
|
bind-key -T windows * select-window -t :=10
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Copy in vi mode
|
** Copy in vi mode
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: KeybindingsCopyinvimode-2mjfpie1huj0
|
:CUSTOM_ID: KeybindingsCopyinvimode-2mjfpie1huj0
|
||||||
|
Loading…
Reference in New Issue
Block a user