-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.tmux.conf
178 lines (142 loc) · 6.74 KB
/
.tmux.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
set-option -g detach-on-destroy off
setw -g mode-keys vi
set -g display-time 0
bind Space send-prefix
bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
set-option -g focus-events on
set-option -g status off
bind s set-option -g status
bind C-s set-option -g status
bind -n M-[ copy-mode
bind -n M-V copy-mode
bind -n M-Enter copy-mode
bind Enter copy-mode
#――session switchers――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind-key j choose-tree -swZ
# non-popup
bind C-j new-window -n "session-switcher" "\
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
sed '/^$/d' |\
fzf --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' \
--bind 'enter:execute(tmux switch-client -t {})+accept'"
# popup
bind C-j display-popup -E "\
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
sed '/^$/d' |\
fzf --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' \
--bind 'enter:execute(tmux switch-client -t {})+accept'"
bind -n M-f display-popup -E "\
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
sed '/^$/d' |\
fzf --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' \
--bind 'enter:execute(tmux switch-client -t {})+accept'"
bind -n M-f display-popup -h 95% -w 95% "git commit --verbose"
bind -n M-F display-popup -h 95% -w 95% -d '#{pane_current_path}' -E 'gitui'
bind C-w display-popup -E "~/.local/bin/ta ~/work"
bind -n M-w display-popup -E "ta ~/work"
bind C-g display-popup -E "ta ~/git"
bind -n M-g display-popup -E "tmux new-session -A -s scratch"
bind -n M-G display-popup -E -h 95% -w 95% "tmux new-session -A -s scratch"
bind k display-popup -E "\
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
sed '/^$/d' |\
fzf --reverse -m --header=kill-session --preview 'tmux capture-pane -pt {}' |\
xargs -I {} tmux kill-session -t {}"
bind C-p display-popup -E "ta ~/project"
bind C-t new-session -A -s todo "cd ~/work/todo && nvim -O backlog.md doing.md done.md"
bind -n M-t new-session -A -s todo "cd ~/work/todo && nvim -O backlog.md doing.md done.md"
bind-key -n M-t if-shell -F '#{==:#{session_name},todo}' {
detach-client
} {
display-popup -E "tmux new-session -A -s todo -c ~/work/todo"
}
# bind-key -n M-t if-shell -F '#{==:#{pane_start_command},todo}' {
# kill-pane
# } {
# split-window -bf -l 10 -c '#{pane_current_path}' "todo"
# }
bind -n M-B switch-client -l
bind -n M-b switch-client -l
bind C-n new-session
bind-key C-b send-keys 'ta && exit' 'C-m'
#――split――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind -n M-P split-window
bind -n M-d detach-client
bind -n M-h select-pane -L
bind -n M-l select-pane -R
bind -n M-k select-pane -U
bind -n M-j select-pane -D
bind -n M-s split-window -c '#{pane_current_path}'
bind -n M-v split-window -h -c '#{pane_current_path}'
bind -n M-X kill-pane
bind -n M-z resize-pane -Z
bind C-z resize-pane -Z
bind -n M-c new-window -c '#{pane_current_path}'
bind -n M-o 'select-pane -t :.+; resize-pane -Z'
bind -n M-O rotate-window
bind -n M-p previous-window
bind -n M-P switch-client -p
bind -n M-n next-window
bind -n M-N switch-client -n
bind -n M-r source-file ~/.tmux.conf
bind -n M-W command-prompt "rename-session '%%'"
bind -n M-? list-keys
bind -n M-1 select-window -t :=1
bind -n M-2 select-window -t :=2
bind -n M-3 select-window -t :=3
bind -n M-4 select-window -t :=4
bind -n M-5 select-window -t :=5
bind -n M-6 select-window -t :=6
bind -n M-7 select-window -t :=7
bind -n M-8 select-window -t :=8
bind -n M-9 select-window -t :=9
bind -n M-0 select-window -t :=0
# resize panes
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind -n M-H resize-pane -L 2
bind -n M-L resize-pane -R 2
bind -n M-K resize-pane -U 2
bind -n M-J resize-pane -D 2
# Select Layouts
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind -n M-a select-layout main-vertical
bind -n M-A select-layout main-horizontal
# bind -n M-E select-layout even-vertical
# bind -n M-V select-layout even-horizontal
# Mark and swap panes
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind -n M-m select-pane -m # mark
bind -n M-M select-pane -M # unmark
bind -n M-, swap-pane # swap
bind -n M-< join-pane
bind -n M-> move-pane -t scratch
# Choose a pane to join in horizontally
bind f choose-window -Z 'join-pane -h -s "%%"'
# push the active pane into the scratch session horizonally
bind -n M-f join-pane -ht scratch
# pull the last active pane from the scratch session horizonally into this session
bind -n M-F join-pane -hs scratch
# Open app in split
#―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
bind -n C-M-p split-window python;
bind -n M-e split-window -c '#{pane_current_path}' vifm . .\; resize-pane -Z;
bind C-k split-window -c '#{pane_current_path}' 'gitui'\; resize-pane -Z;
bind -n M-e display-popup -d '#{pane_current_path}' -h 95% -w 95% -E "vifm"
bind -n M-e display-popup -d '#{pane_current_path}' -h 100% -w 75% -x 0 -E "lf"
bind C-k display-popup -d '#{pane_current_path}' -E 'gitui'
# bind -n M-: command-prompt
# Enable mouse control (clickable windows, panes, resizable panes)
set -g mouse on
set-window-option -g window-status-current-style fg=cyan
set-window-option -g window-status-current-style bg=default
set-option -g default-shell /usr/bin/bash
set-option -sg escape-time 10
bind -n M-m select-pane -m # mark
bind -n M-M select-pane -M # unmark
bind-key -n M-g if-shell -F '#{==:#{session_name},scratch}' {
detach-client
} {
display-popup -E "tmux new-session -A -s scratch"
}