Compare commits

..

23 Commits

Author SHA1 Message Date
Benie
f27da7e535 Fix unescaped backslash in config 2019-12-29 19:56:11 +00:00
d600c671ef Don't select pane first in layouts 2019-12-10 13:54:26 +00:00
0e67cca13b Add window-wide layout 2019-11-11 10:33:09 +00:00
20be7f3bcc Add urlscan as alternative to urlview
Since urlview is not available with pacman but urlscan is, first check
and integrate urlscan then fallback to urlview.
2019-09-17 22:13:02 +01:00
cabd57ae84 Add pacman package dependencies 2019-09-17 21:36:17 +01:00
cd1a73f304 Add battery percentage to status bar on macOS 2019-08-30 16:55:17 +01:00
b6ee1bb677 Emulate mouse scrolling for alternate buffers
For pagers such as `less` which don't support terminal mouse features
enable scrolling with the mouse wheel by emulating the behaviour using
`send-keys -t= {up,down}` when in alternate (fullscreen) mode.

These bindings retain the expected behaviour when using programs which
do support terminal mouse events and copy-mode.
2019-08-24 00:19:00 +01:00
720271baa5 Add session-main layout for basic sessions 2019-08-22 23:08:28 +01:00
6d07c00c2c Use xclip instead of xsel for yanking in copy mode
Sometimes when yanking large blocks of text from a pane larger than its
size in copy mode did not work. Switch to using `xclip` from `xsel` to
see if this works better.
2019-08-22 17:26:33 +01:00
28aa1795da Also install urlview
Ensure that the `C-u` binding works by installing `urlview` upon which
it depends.
2019-08-21 18:24:20 +01:00
b5526ca42b Remove zsh check from vim window flag
Make using the `@vim$TMUX_PANE` window flag much more robust by
unsetting it every time the zsh prompt is drawn and setting it again
using a `FocusGained` `autocmd` in vim. This removes the need for the
hacky check for zsh in the conditional defined in the `in_vim` variable.
2019-08-16 21:54:52 +01:00
43ce79c8c3 Fix in_vim to work on Linux Mint 18 2019-08-13 17:00:47 +01:00
56739ba2e7 Fix navigation annoyances
Fixes #6 by setting a window option called `vim$TMUX_PANE` during vim
setup, and removing it when vim exits:

```vim
if $TMUX !=# ''
  " Set tmux window option to detect when to change pane.
  let s:tmux_option = '@vim'.substitute($TMUX_PANE, '%', '\\%', 'g')
  call system('tmux set-window-option '.s:tmux_option.' 1')
  au VimLeave * call system('tmux set-window-option -u '.s:tmux_option)
endif
```

Then update the `is_vim` conditional shell statement to check if this
variables exists for the current pane to determine when to change tmux
pane or pass through the binding to vim.

```conf
in_vim='[[ "$(tmux show-window-options)" = *"@vim#{pane_id}"* ]] && \
        [[ "#{pane_current_command}" != zsh ]]'
```

Additionally check if the vim task has been backgrounded by comparing
the value of `#{pane_current_command}`, this is likely a bit brittle if
backgrounding is used heavily but works otherwise.
2019-08-11 18:42:57 +01:00
b47c74a33f Fix tmux 2.9 config issues & cleanup 2019-08-11 18:42:02 +01:00
25d7c10240 Fix pane navigation left in copy mode 2019-07-24 14:54:51 +01:00
943412c159 Increase terminal buffer limit 2019-07-24 14:21:36 +01:00
7cb6fec680 Fix C-h not selecting a pane in code-mode-vi 2019-07-14 21:20:27 +01:00
f9f72c13ba Use bind instead of bind-key 2018-08-28 21:48:14 +01:00
69ad546317 Use grey instead of blue for selection highlights 2018-08-26 20:28:05 +01:00
eafbe27379 Add symlink for window-tall layout 2018-08-26 18:37:30 +01:00
94ee8df2f9 Rename layout 2vt to window-tall 2018-08-26 18:34:08 +01:00
a180f60a98 Enable vi-mode yank on macOS 2018-08-26 17:35:48 +01:00
fdcf4c701c Add brew package 2018-08-25 15:10:40 +01:00
5 changed files with 102 additions and 57 deletions

View File

@@ -1,15 +1,19 @@
--- ---
- location: ~/.config/tmux - location: ~/.config/tmux
- apt: - apt:
- libevent-dev - tmux
- ncurses-dev - xclip
- xsel - urlview
- repo: - brew:
- url: 'https://github.com/tmux/tmux.git' - tmux
location: ~/.local/src/tmux - urlview
branch: 2.6 - reattach-to-user-namespace
actions: - pacman:
- command: ./configure --prefix=$HOME/.local - tmux
- command: {install: make -j8 install, remove: make uninstall} - xclip
- urlscan
- symlink: - symlink:
- {src: tmux.conf, dst: ~/.tmux.conf} - {src: tmux.conf, dst: ~/.tmux.conf}
- {src: layouts/session-main, dst: ~/.local/share/tmux/layouts/session-main}
- {src: layouts/window-tall, dst: ~/.local/share/tmux/layouts/window-tall}
- {src: layouts/window-wide, dst: ~/.local/share/tmux/layouts/window-wide}

4
layouts/session-main Normal file
View File

@@ -0,0 +1,4 @@
rename-session main
rename-window home
# vim: filetype=tmux

View File

@@ -1,4 +1,3 @@
# vim: ft=tmux # vim: ft=tmux
select-pane -t 0
split-window -v -p 34 split-window -v -p 34
select-pane -t 1 select-pane -t 1

3
layouts/window-wide Normal file
View File

@@ -0,0 +1,3 @@
# vim: ft=tmux
split-window -h -p 57
select-pane -t 1

127
tmux.conf
View File

@@ -1,3 +1,6 @@
# Set the tmux version to check for command support
run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)'
# Use vim keybindings in copy mode # Use vim keybindings in copy mode
set -g mode-keys vi set -g mode-keys vi
@@ -10,7 +13,7 @@ bind Space send-prefix
set -s escape-time 0 set -s escape-time 0
# Increase scrollback buffer size # Increase scrollback buffer size
set -g history-limit 50000 set -g history-limit 1000000
# Set tmux messages display time to 4 seconds # Set tmux messages display time to 4 seconds
set -g display-time 4000 set -g display-time 4000
@@ -34,78 +37,110 @@ set -g pane-base-index 1
# Enable mouse support # Enable mouse support
set-option -g mouse on set-option -g mouse on
# Enable changing cursor shape per pane in iTerm2 or VTE compatible terminals, # Enable changing cursor shape per pane, vim or zsh should emit escape
# vim or zsh should emit VTE compatible escape sequences to change cursor shape # sequences to change cursor shape.
if -b '[ -n $ITERM_PROFILE ]' \ # iTerm2 only requires this before tmux 2.9
"set -ga terminal-overrides '*:Ss=\E]1337;CursorShape=%p1%d\7'" \ if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \
"set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[2 q'" 'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"'
# VTE compatible terminals.
if '[ ! -n $ITERM_PROFILE ]' \
'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"'
# Enable strikethrough on VTE compatible terminals. # Enable strikethrough on VTE compatible terminals.
set -ga terminal-overrides 'xterm*:smxx=\E[9m' set -ga terminal-overrides 'xterm*:smxx=\E[9m'
# Set only on OS X where it's required # Set only on macOS where it's required
if -b '[ "`uname`" = "Darwin" ]' \ if -b '[ "`uname`" = "Darwin" ]' \
"set -g default-command 'reattach-to-user-namespace -l $SHELL'" 'set -g default-command "reattach-to-user-namespace -l $SHELL"'
# Restore old next/previous window bindings # Restore old next/previous window bindings
bind C-n next-window bind C-n next-window
bind C-p previous-window bind C-p previous-window
# Make new splits open in current directory # Make new splits open in current directory
bind "\"" split-window -c "#{pane_current_path}" bind '"' split-window -c '#{pane_current_path}'
bind "%" split-window -h -c "#{pane_current_path}" bind '%' split-window -h -c '#{pane_current_path}'
# Integrate pane selection with vim # Integrate pane selection with vim
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"' in_vim='tmux show-window-options | grep -q "@vim#{pane_id}"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L" bind -n C-h if $in_vim 'send-keys C-h' 'select-pane -L'
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D" bind -n C-j if $in_vim 'send-keys C-j' 'select-pane -D'
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U" bind -n C-k if $in_vim 'send-keys C-k' 'select-pane -U'
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R" bind -n C-l if $in_vim 'send-keys C-l' 'select-pane -R'
bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l" bind -n C-\\ if $in_vim 'send-keys C-\\' 'select-pane -l'
# Integrate urlview # Integrate urlscan or fallback to urlview
bind-key u capture-pane \; split-window "tmux show-buffer | urlview -" if -b 'which urlscan' \
'bind u capture-pane \; split-window "tmux show-buffer | urlscan"' \
'bind u capture-pane \; split-window "tmux show-buffer | urlview -"'
# Unbind copy mode defaults so pane selection works
unbind -T copy-mode-vi C-h
unbind -T copy-mode-vi C-j
# Enter copy mode with C-U # Enter copy mode with C-U
bind-key C-u copy-mode -u bind C-u copy-mode -u
# Begin selection in copy mode with v not Space # Begin selection in copy mode with v not Space
bind-key -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi v send-keys -X begin-selection
# Enable mouse scrolling up in alternate buffers.
# If #{mouse_any_flag} is 1 the pane is running with mouse support, e.g. vim.
# If #{alternate_on} is 1 the terminal is in alternate buffer mode, e.g. less.
# If #{pane_in_mode} is 1 the pane is in copy-mode.
bind -n WheelUpPane \
if -Ft= "#{mouse_any_flag}" \
"send-keys -M" \
"if -Ft= \"#{alternate_on}\" \
\"send-keys -t= Up ; \
send-keys -t= Up ; \
send-keys -t= Up ; \" \
\"select-pane -t= ; \
if -Ft= '#{pane_in_mode}' \
'send-keys -M' \
'copy-mode -e ; send-keys -M' \" "
# Emulate mouse scrolling down in alternate buffers.
bind -n WheelDownPane \
if -Ft= "#{mouse_any_flag}" \
"send-keys -M" \
"if -Ft= \"#{alternate_on}\" \
\"send-keys -t= Down ; \
send-keys -t= Down ; \
send-keys -t= Down ; \" \
\"select-pane -t= ; \
send-keys -M\" "
# Yank to the system clipboard in copy mode # Yank to the system clipboard in copy mode
if -b '[ "`uname`" = "Linux" ]' \ if -b '[ "`uname`" = "Darwin" ]' \
"bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xsel -i -p && xsel -o -p | xsel -i -b'" 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \
"reattach-to-user-namespace pbcopy"' \
'bind -T copy-mode-vi y send -X copy-pipe-and-cancel \
"xclip -i -sel p -f | xclip -i -sel c"'
# Left status style # Left status style
set-window-option -g status-left " #S" setw -g status-left " #{session_name}"
set-window-option -g status-left-fg colour240 setw -g status-left-style fg=colour240,bg=colour233
set-window-option -g status-left-bg colour233
# Centre status style # Centre status style
set-window-option -g status-fg colour240 setw -g status-style fg=colour240,bg=colour233
set-window-option -g status-bg colour233
# Right status style # Right status style, show data and time (and battery percentage on macOS).
set-window-option -g status-right "%a %d-%m-%y %H:%M " if '[ "`uname`" = "Darwin" ]' \
set-window-option -g status-right-fg white 'setw -g status-right "#(pmset -g batt | grep --color=never -Eo "\\d+%%")\
set-window-option -g status-right-bg colour233 %a %d-%m-%y %H:%M "' \
'setw -g status-right "%a %d-%m-%y %H:%M "'
setw -g status-right-style fg=white,bg=colour233
# Active window status style # Active window status style
set-window-option -g window-status-current-format " #I: #W" setw -g window-status-current-format " #{window_index}: #{window_name}"
set-window-option -g window-status-current-fg white setw -g window-status-current-style fg=white,bg=colour233
set-window-option -g window-status-current-bg colour233
# Inactive window status style # Inactive window status style
set-window-option -g window-status-format " #I: #W" setw -g window-status-format " #{window_index}: #{window_name}"
set-window-option -g window-status-fg colour240 setw -g window-status-style fg=colour240,bg=colour233
set-window-option -g window-status-bg colour233
# Active pane border # Pane border style
set-option -g pane-active-border-fg colour235 set -g pane-border-style fg=colour233,bg=colour233
set-option -g pane-active-border-bg colour235 set -g pane-active-border-style fg=colour235,bg=colour235
# Inactive pane border
set-option -g pane-border-fg colour233
set-option -g pane-border-bg colour233
# Command line window list selection # Command line window list selection
set-window-option -g mode-style fg=colour233,bg=colour30 set-window-option -g mode-style fg=white,bg=colour237
set-option -g message-style fg=colour233,bg=colour30 set-option -g message-style fg=white,bg=colour237