mirror of
https://github.com/tmux-plugins/tmux-sensible.git
synced 2025-09-06 07:57:15 +00:00
Compare commits
26 Commits
Author | SHA1 | Date | |
---|---|---|---|
25cb91f42d | |||
e463ee9a75 | |||
5d089e418e | |||
8e8043c439 | |||
eba4cbe76f | |||
989d09249e | |||
44af8d8eff | |||
57d999b7df | |||
0dd7aed9a0 | |||
e91b178ff8 | |||
bb9a833510 | |||
df09a123ef | |||
6bd0e2b221 | |||
526110eb9b | |||
b0a8527eb4 | |||
3baff4e795 | |||
4055083386 | |||
cd7faa8bba | |||
9a4309ed63 | |||
2fe5834f30 | |||
2ce7679f9d | |||
e1aabe4b8a | |||
fff9a53723 | |||
2476f3fb23 | |||
3ea5b9f6b9 | |||
9d61936c53 |
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Force text files to have unix eols, so Windows/Cygwin does not break them
|
||||||
|
*.* eol=lf
|
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,6 +1,17 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
### master
|
### master
|
||||||
|
- remove `detach-on-destroy`
|
||||||
|
- do not set `aggressive-resize` on iTerm terminal
|
||||||
|
- disable `detach-on-destroy`
|
||||||
|
|
||||||
|
### v3.0.0, 2015-06-24
|
||||||
|
- remove 'almost sensible' feature
|
||||||
|
|
||||||
|
### v2.3.0, 2015-06-24
|
||||||
|
- update to support \*THE\* latest tmux version
|
||||||
|
- bugfix for `prefix + R` key binding
|
||||||
|
- fix for tmux 2.0 `default-terminal` option (thanks @kwbr)
|
||||||
|
|
||||||
### v2.2.0, 2015-02-10
|
### v2.2.0, 2015-02-10
|
||||||
- bugfix in `key_binding_not_set`: the regex is now properly detecting key
|
- bugfix in `key_binding_not_set`: the regex is now properly detecting key
|
||||||
|
107
README.md
107
README.md
@ -4,6 +4,8 @@ A set of tmux options that should be acceptable to everyone.
|
|||||||
|
|
||||||
Inspired by [vim-sensible](https://github.com/tpope/vim-sensible).
|
Inspired by [vim-sensible](https://github.com/tpope/vim-sensible).
|
||||||
|
|
||||||
|
Tested and working on Linux, OSX and Cygwin.
|
||||||
|
|
||||||
### Principles
|
### Principles
|
||||||
|
|
||||||
- `tmux-sensible` options should be acceptable to **every** tmux user!<br/>
|
- `tmux-sensible` options should be acceptable to **every** tmux user!<br/>
|
||||||
@ -22,92 +24,74 @@ Inspired by [vim-sensible](https://github.com/tpope/vim-sensible).
|
|||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
# utf8 is on
|
```tmux
|
||||||
set -g utf8 on
|
# Address vim mode switching delay (http://superuser.com/a/252717/65504)
|
||||||
set -g status-utf8 on
|
set -s escape-time 0
|
||||||
|
|
||||||
# address vim mode switching delay (http://superuser.com/a/252717/65504)
|
# Increase scrollback buffer size from 2000 to 50000 lines
|
||||||
set -s escape-time 0
|
set -g history-limit 50000
|
||||||
|
|
||||||
# increase scrollback buffer size
|
# Increase tmux messages display duration from 750ms to 4s
|
||||||
set -g history-limit 50000
|
set -g display-time 4000
|
||||||
|
|
||||||
# tmux messages are displayed for 4 seconds
|
# Refresh 'status-left' and 'status-right' more often, from every 15s to 5s
|
||||||
set -g display-time 4000
|
set -g status-interval 5
|
||||||
|
|
||||||
# refresh 'status-left' and 'status-right' more often
|
# (OS X) Fix pbcopy/pbpaste for old tmux versions (pre 2.6)
|
||||||
set -g status-interval 5
|
set -g default-command "reattach-to-user-namespace -l $SHELL"
|
||||||
|
|
||||||
# set only on OS X where it's required
|
# Upgrade $TERM
|
||||||
set -g default-command "reattach-to-user-namespace -l $SHELL"
|
set -g default-terminal "screen-256color"
|
||||||
|
|
||||||
# upgrade $TERM
|
# Emacs key bindings in tmux command prompt (prefix + :) are better than
|
||||||
set -g default-terminal "screen-256color"
|
# vi keys, even for vim users
|
||||||
|
set -g status-keys emacs
|
||||||
|
|
||||||
# emacs key bindings in tmux command prompt (prefix + :) are better than
|
# Focus events enabled for terminals that support them
|
||||||
# vi keys, even for vim users
|
set -g focus-events on
|
||||||
set -g status-keys emacs
|
|
||||||
|
|
||||||
# focus events enabled for terminals that support them
|
# Super useful when using "grouped sessions" and multi-monitor setup
|
||||||
set -g focus-events on
|
setw -g aggressive-resize on
|
||||||
|
```
|
||||||
# super useful when using "grouped sessions" and multi-monitor setup
|
|
||||||
setw -g aggressive-resize on
|
|
||||||
|
|
||||||
### Key bindings
|
### Key bindings
|
||||||
|
|
||||||
# easier and faster switching between next/prev window
|
```tmux
|
||||||
bind C-p previous-window
|
# Easier and faster switching between next/prev window
|
||||||
bind C-n next-window
|
bind C-p previous-window
|
||||||
|
bind C-n next-window
|
||||||
|
```
|
||||||
|
|
||||||
Above bindings enhance the default `prefix + p` and `prefix + n` bindings by
|
Above bindings enhance the default `prefix + p` and `prefix + n` bindings by
|
||||||
allowing you to hold `Ctrl` and repeat `a + p`/`a + n` (if your prefix is
|
allowing you to hold `Ctrl` and repeat `a + p`/`a + n` (if your prefix is
|
||||||
`C-a`), which is a lot quicker.
|
`C-a`), which is a lot quicker.
|
||||||
|
|
||||||
# source .tmux.conf as suggested in `man tmux`
|
```tmux
|
||||||
bind R source-file '~/.tmux.conf'
|
# Source .tmux.conf as suggested in `man tmux`
|
||||||
|
bind R source-file '~/.tmux.conf'
|
||||||
|
```
|
||||||
|
|
||||||
"Adaptable" key bindings that build upon your `prefix` value:
|
"Adaptable" key bindings that build upon your `prefix` value:
|
||||||
|
|
||||||
# if prefix is 'C-a'
|
```tmux
|
||||||
bind C-a send-prefix
|
# If prefix is 'C-a'
|
||||||
bind a last-window
|
bind C-a send-prefix
|
||||||
|
bind a last-window
|
||||||
|
```
|
||||||
|
|
||||||
If prefix is `C-b`, above keys will be `C-b` and `b`.<br/>
|
If prefix is `C-b`, above keys will be `C-b` and `b`.<br/>
|
||||||
If prefix is `C-z`, above keys will be `C-z` and `z`... you get the idea.
|
If prefix is `C-z`, above keys will be `C-z` and `z`... you get the idea.
|
||||||
|
|
||||||
### Almost sensible options - deprecated
|
|
||||||
|
|
||||||
**Note**: this feature is deprecated and will be removed from `tmux-sensible`
|
|
||||||
in the next major release. The reason for this is to focus this plugin on doing
|
|
||||||
just one thing (and hopefully doing it well).<br/>
|
|
||||||
If you were using 'almost sensible' the path forward is to move all the
|
|
||||||
below options to your `.tmux.conf`.
|
|
||||||
|
|
||||||
Activate these by putting `set -g @almost-sensible 'on'` in `.tmux.conf`.
|
|
||||||
|
|
||||||
# C-a should be the Tmux default prefix, really
|
|
||||||
set -g prefix C-a
|
|
||||||
set -g mode-keys vi
|
|
||||||
|
|
||||||
# enable mouse features for terminals that support it
|
|
||||||
set -g mouse-resize-pane on
|
|
||||||
set -g mouse-select-pane on
|
|
||||||
set -g mouse-select-window on
|
|
||||||
|
|
||||||
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
### Installation with [Tmux Plugin Manager](https://github.com/tmux-plugins/tpm) (recommended)
|
||||||
|
|
||||||
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
Add plugin to the list of TPM plugins in `.tmux.conf`:
|
||||||
|
|
||||||
set -g @tpm_plugins ' \
|
```tmux
|
||||||
tmux-plugins/tpm \
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
tmux-plugins/tmux-sensible \
|
```
|
||||||
'
|
|
||||||
|
|
||||||
Hit `prefix + I` to fetch the plugin and source it. That's it!
|
Hit `prefix + I` to fetch the plugin and source it. That's it!
|
||||||
|
|
||||||
You might also want to restart your tmux server, just in case.
|
|
||||||
|
|
||||||
### Manual Installation
|
### Manual Installation
|
||||||
|
|
||||||
Clone the repo:
|
Clone the repo:
|
||||||
@ -116,14 +100,11 @@ Clone the repo:
|
|||||||
|
|
||||||
Add this line to the bottom of `.tmux.conf`:
|
Add this line to the bottom of `.tmux.conf`:
|
||||||
|
|
||||||
run-shell ~/clone/path/sensible.tmux
|
```tmux
|
||||||
|
run-shell ~/clone/path/sensible.tmux
|
||||||
|
```
|
||||||
|
|
||||||
Reload TMUX environment:
|
Reload TMUX environment with `$ tmux source-file ~/.tmux.conf`, and that's it.
|
||||||
|
|
||||||
# type this in terminal
|
|
||||||
$ tmux source-file ~/.tmux.conf
|
|
||||||
|
|
||||||
You might also want to restart your tmux server, just in case.
|
|
||||||
|
|
||||||
### Other goodies
|
### Other goodies
|
||||||
|
|
||||||
|
@ -2,13 +2,18 @@
|
|||||||
|
|
||||||
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
|
||||||
ALMOST_SENSIBLE_OPTION="@almost-sensible"
|
# used to match output from `tmux list-keys`
|
||||||
|
KEY_BINDING_REGEX="bind-key[[:space:]]\+\(-r[[:space:]]\+\)\?\(-T prefix[[:space:]]\+\)\?"
|
||||||
|
|
||||||
is_osx() {
|
is_osx() {
|
||||||
local platform=$(uname)
|
local platform=$(uname)
|
||||||
[ "$platform" == "Darwin" ]
|
[ "$platform" == "Darwin" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iterm_terminal() {
|
||||||
|
[[ "${TERM_PROGRAM}" =~ ^iTerm || "${LC_TERMINAL}" =~ ^iTerm ]]
|
||||||
|
}
|
||||||
|
|
||||||
command_exists() {
|
command_exists() {
|
||||||
local command="$1"
|
local command="$1"
|
||||||
type "$command" >/dev/null 2>&1
|
type "$command" >/dev/null 2>&1
|
||||||
@ -40,8 +45,8 @@ server_option_value_not_changed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
key_binding_not_set() {
|
key_binding_not_set() {
|
||||||
local key="$1"
|
local key="${1//\\/\\\\}"
|
||||||
if $(tmux list-keys | grep -q "bind-key[[:space:]]\+\(-r[[:space:]]\+\)\?${key}"); then
|
if $(tmux list-keys | grep -q "${KEY_BINDING_REGEX}${key}[[:space:]]"); then
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
@ -51,7 +56,7 @@ key_binding_not_set() {
|
|||||||
key_binding_not_changed() {
|
key_binding_not_changed() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
local default_value="$2"
|
local default_value="$2"
|
||||||
if $(tmux list-keys | grep -q "bind-key[[:space:]]\+${key}[[:space:]]\+${default_value}"); then
|
if $(tmux list-keys | grep -q "${KEY_BINDING_REGEX}${key}[[:space:]]\+${default_value}"); then
|
||||||
# key still has the default binding
|
# key still has the default binding
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
@ -59,20 +64,20 @@ key_binding_not_changed() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# "almost sensible" is deprecated
|
get_tmux_config() {
|
||||||
almost_sensible_on() {
|
local tmux_config_xdg="${XDG_CONFIG_HOME:-$HOME/.config}/tmux/tmux.conf"
|
||||||
[ "$(tmux show-option -gvq "$ALMOST_SENSIBLE_OPTION")" == "on" ]
|
local tmux_config="$HOME/.tmux.conf"
|
||||||
|
|
||||||
|
if [ -f "${tmux_config_xdg}" ]; then
|
||||||
|
echo "${tmux_config_xdg}"
|
||||||
|
else
|
||||||
|
echo ${tmux_config}
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
# OPTIONS
|
# OPTIONS
|
||||||
|
|
||||||
# enable utf8
|
|
||||||
tmux set-option -g utf8 on
|
|
||||||
|
|
||||||
# enable utf8 in tmux status-left and status-right
|
|
||||||
tmux set-option -g status-utf8 on
|
|
||||||
|
|
||||||
# address vim mode switching delay (http://superuser.com/a/252717/65504)
|
# address vim mode switching delay (http://superuser.com/a/252717/65504)
|
||||||
if server_option_value_not_changed "escape-time" "500"; then
|
if server_option_value_not_changed "escape-time" "500"; then
|
||||||
tmux set-option -s escape-time 0
|
tmux set-option -s escape-time 0
|
||||||
@ -98,10 +103,14 @@ main() {
|
|||||||
tmux set-option -g default-command "reattach-to-user-namespace -l $SHELL"
|
tmux set-option -g default-command "reattach-to-user-namespace -l $SHELL"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# upgrade $TERM
|
# upgrade $TERM, tmux 1.9
|
||||||
if option_value_not_changed "default-terminal" "screen"; then
|
if option_value_not_changed "default-terminal" "screen"; then
|
||||||
tmux set-option -g default-terminal "screen-256color"
|
tmux set-option -g default-terminal "screen-256color"
|
||||||
fi
|
fi
|
||||||
|
# upgrade $TERM, tmux 2.0+
|
||||||
|
if server_option_value_not_changed "default-terminal" "screen"; then
|
||||||
|
tmux set-option -s default-terminal "screen-256color"
|
||||||
|
fi
|
||||||
|
|
||||||
# emacs key bindings in tmux command prompt (prefix + :) are better than
|
# emacs key bindings in tmux command prompt (prefix + :) are better than
|
||||||
# vi keys, even for vim users
|
# vi keys, even for vim users
|
||||||
@ -111,19 +120,8 @@ main() {
|
|||||||
tmux set-option -g focus-events on
|
tmux set-option -g focus-events on
|
||||||
|
|
||||||
# super useful when using "grouped sessions" and multi-monitor setup
|
# super useful when using "grouped sessions" and multi-monitor setup
|
||||||
tmux set-window-option -g aggressive-resize on
|
if ! iterm_terminal; then
|
||||||
|
tmux set-window-option -g aggressive-resize on
|
||||||
# ALMOST SENSIBLE OPTIONS - DEPRECATED
|
|
||||||
|
|
||||||
if almost_sensible_on; then
|
|
||||||
# C-a should be the Tmux default prefix, really
|
|
||||||
tmux set-option -g prefix C-a
|
|
||||||
tmux set-option -g mode-keys vi
|
|
||||||
|
|
||||||
# enable mouse features for terminals that support it
|
|
||||||
tmux set-option -g mouse-resize-pane on
|
|
||||||
tmux set-option -g mouse-select-pane on
|
|
||||||
tmux set-option -g mouse-select-window on
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# DEFAULT KEY BINDINGS
|
# DEFAULT KEY BINDINGS
|
||||||
@ -133,7 +131,7 @@ main() {
|
|||||||
|
|
||||||
# if C-b is not prefix
|
# if C-b is not prefix
|
||||||
if [ $prefix != "C-b" ]; then
|
if [ $prefix != "C-b" ]; then
|
||||||
# unbind obsolte default binding
|
# unbind obsolete default binding
|
||||||
if key_binding_not_changed "C-b" "send-prefix"; then
|
if key_binding_not_changed "C-b" "send-prefix"; then
|
||||||
tmux unbind-key C-b
|
tmux unbind-key C-b
|
||||||
fi
|
fi
|
||||||
@ -160,9 +158,11 @@ main() {
|
|||||||
|
|
||||||
# source `.tmux.conf` file - as suggested in `man tmux`
|
# source `.tmux.conf` file - as suggested in `man tmux`
|
||||||
if key_binding_not_set "R"; then
|
if key_binding_not_set "R"; then
|
||||||
tmux bind-key R run-shell -b ' \
|
local tmux_config=$(get_tmux_config)
|
||||||
tmux source-file ~/.tmux.conf > /dev/null; \
|
|
||||||
tmux display-message "Sourced .tmux.conf!"'
|
tmux bind-key R run-shell " \
|
||||||
|
tmux source-file ${tmux_config} > /dev/null; \
|
||||||
|
tmux display-message 'Sourced ${tmux_config}!'"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
main
|
main
|
||||||
|
Reference in New Issue
Block a user