13 Commits

Author SHA1 Message Date
bbff707eaa Almost sensible options 2014-10-03 18:40:53 +02:00
13f58a8870 Remove all mouse-related options 2014-10-03 17:45:31 +02:00
c908b42f2b Bugfix: tmux quits if 'reattach-to-user-namespace' is not installed
Fixes #9
2014-09-21 16:02:55 +02:00
9beab4784c Merge pull request #8 from janko-m/prefix-descriptions
Add descriptions for `C-p` and `C-n` bindings
2014-09-04 15:03:14 +02:00
4a584b0799 Add descriptions for C-p and C-n bindings
Fixes #6
2014-09-04 14:03:52 +02:00
615906df94 v1.1.0 2014-08-30 22:48:07 +02:00
4967aa0ce7 Do not unbind C-b if a user still uses it
Fixes #5
2014-08-30 22:44:37 +02:00
fa3e8b91ea Remove mode-mouse setting
Closes #4
2014-08-11 18:08:20 +02:00
74c4a76bfa Big README update 2014-08-04 18:02:04 +02:00
89a51c86e3 Do not force prefix to C-a
Assuming no one uses C-b as the default prefix is a wrong assumption.

Instead of making any assumption about the prefix, we're "building" on
top of whatever the user has set.

The following key-bindings will be set if prefix is set to C-a:
- `C-a + C-a` - sends prefix character
- `C-a + a` - switches to the last window

Likewise, if C-b is prefix, then the additional bindings will be
`C-b + C-b` and `C-b + b`.

Closes #1
2014-08-04 17:23:50 +02:00
47df9983a9 Code style improvements 2014-08-04 17:13:50 +02:00
6a9c4a78ff mode-mouse on
Close #3
2014-08-04 16:23:44 +02:00
97904bc483 Bugfix: default-command utilizes $SHELL env var
The `default-command` setting on OS X determines the default shell if
`default-shell` is not set.
This update enables use of any user defined shell, even if
`default-shell` is not set.

Fixes #2
2014-08-04 16:01:30 +02:00
3 changed files with 147 additions and 36 deletions

View File

@ -2,6 +2,20 @@
### master ### master
### v2.0.0, 2014-10-03
- bugfix: prevent exiting tmux if 'reattach-to-user-namespace' is not installed
- remove all mouse-related options
- introduce 'almost sensible' setting and options
### v1.1.0, 2014-08-30
- bugfix: determine the default shell from the $SHELL env var on OS X
- set `mode-mouse on` by default
- do not make any decision about the prefix, just enhance it
- update `README.md`. List options set in the plugin.
- do *not* set `mode-mouse on` by default because some users don't like it
- if a user changes default prefix but binds `C-b` to something else, do not
unbind `C-b`
### v1.0.0, 2014-07-30 ### v1.0.0, 2014-07-30
- initial work on the plugin - initial work on the plugin
- add readme - add readme

View File

@ -4,20 +4,20 @@ A set of tmux options that should be acceptable for everyone.
Inspired by [vim-sensible](https://github.com/tpope/vim-sensible). Inspired by [vim-sensible](https://github.com/tpope/vim-sensible).
### Principles ### Core principles
- `tmux-sensible` options should be acceptable to **every** tmux user!<br/> - core `tmux-sensible` options should be acceptable to **every** tmux user!<br/>
If any option bothers you, please open an issue and it will probably be If any option bothers you, please open an issue and it will probably be
updated (or removed). updated (or removed).
- if you think a new option should be added, feel free to open a pull request. - if you think a new option should be added, feel free to open a pull request.
- **no overriding** of user defined settings.<br/> - **no overriding** of user defined settings.<br/>
Your existing `.tmux.conf` settings are respected and they won't be changed. Your existing `.tmux.conf` settings are respected and they won't be changed.
That way you can use `tmux-sensible` if you have a few specific options. That way you can use `tmux-sensible` if you have a few specific options.
See [feature section](#example-feature) for an example.
- [source code](https://github.com/tmux-plugins/tmux-sensible/blob/master/sensible.tmux) ### Almost sensible principles
is the authoritative documentation.<br/>
It's really not that scary and you should have a look, even if you're a - widely used settings that do not make it into the 'core'
tmux beginner. - explicitly enabled with `set -g @almost-sensible 'on'`
### Goals ### Goals
@ -25,16 +25,68 @@ Inspired by [vim-sensible](https://github.com/tpope/vim-sensible).
- remove clutter from your `.tmux.conf` - remove clutter from your `.tmux.conf`
- educate new tmux users about basic options - educate new tmux users about basic options
### Example feature ### Core options
Sets tmux prefix to `Ctrl-a`. # utf8 is on
set -g utf8 on
set -g status-utf8 on
# set prefix to `Ctrl-a` # address vim mode switching delay (http://superuser.com/a/252717/65504)
tmux set-option -g prefix C-a set -s escape-time 0
tmux unbind-key C-b
Since user defined `.tmux.conf` settings are respected, if prefix is set to # increase scrollback buffer size
`Ctrl-z` - it won't be overriden! set -g history-limit 50000
# tmux messages are displayed for 4 seconds
set -g display-time 4000
# refresh 'status-left' and 'status-right' more often
set -g status-interval 5
# set only on OS X where it's required
set -g default-command "reattach-to-user-namespace -l $SHELL"
# upgrade $TERM
set -g default-terminal "screen-256color"
# emacs key bindings in tmux command prompt (prefix + :) are better than
# vi keys, even for vim users
set -g status-keys emacs
### Core key bindings
# easier and faster switching between next/prev window
bind C-p previous-window
bind C-n next-window
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
`C-a`), which is a lot quicker.
# source .tmux.conf as suggested in `man tmux`
bind R source-file '~/.tmux.conf'
"Adaptable" key bindings that build upon your `prefix` value:
# if prefix is 'C-a'
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-z`, above keys will be `C-z` and `z`... you get the idea.
### Almost sensible options
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)

View File

@ -2,23 +2,41 @@
CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ALMOST_SENSIBLE_OPTION="@almost-sensible"
is_osx() { is_osx() {
local platform=$(uname) local platform=$(uname)
[ "$platform" == "Darwin" ] [ "$platform" == "Darwin" ]
} }
command_exists() {
local command="$1"
type "$command" >/dev/null 2>&1
}
# returns prefix key, e.g. 'C-a'
prefix() {
tmux show-option -gv prefix
}
# if prefix is 'C-a', this function returns 'a'
prefix_without_ctrl() {
local prefix="$(prefix)"
echo "$prefix" | cut -d '-' -f2
}
option_value_not_changed() { option_value_not_changed() {
local option="$1" local option="$1"
local default_value="$2" local default_value="$2"
local option_value=$(tmux show-option -gv "$option") local option_value=$(tmux show-option -gv "$option")
[ $option_value == $default_value ] [ "$option_value" == "$default_value" ]
} }
server_option_value_not_changed() { server_option_value_not_changed() {
local option="$1" local option="$1"
local default_value="$2" local default_value="$2"
local option_value=$(tmux show-option -sv "$option") local option_value=$(tmux show-option -sv "$option")
[ $option_value == $default_value ] [ "$option_value" == "$default_value" ]
} }
key_binding_not_set() { key_binding_not_set() {
@ -30,6 +48,21 @@ key_binding_not_set() {
fi fi
} }
key_binding_not_changed() {
local key="$1"
local default_value="$2"
if $(tmux list-keys | grep -q "bind-key[[:space:]]\+${key}[[:space:]]\+${default_value}"); then
# key still has the default binding
return 0
else
return 1
fi
}
almost_sensible_on() {
[ "$(tmux show-option -gvq "$ALMOST_SENSIBLE_OPTION")" == "on" ]
}
main() { main() {
# OPTIONS # OPTIONS
@ -39,12 +72,6 @@ main() {
# enable utf8 in tmux status-left and status-right # enable utf8 in tmux status-left and status-right
tmux set-option -g status-utf8 on tmux set-option -g status-utf8 on
# set Ctrl-a as Tmux prefix
if option_value_not_changed "prefix" "C-b"; then
tmux set-option -g prefix C-a
tmux unbind-key C-b
fi
# 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
@ -66,8 +93,8 @@ main() {
fi fi
# required (only) on OS X # required (only) on OS X
if is_osx && option_value_not_changed "default-command" ""; then if is_osx && command_exists "reattach-to-user-namespace" && option_value_not_changed "default-command" ""; then
tmux set-option -g default-command "reattach-to-user-namespace -l bash" tmux set-option -g default-command "reattach-to-user-namespace -l $SHELL"
fi fi
# upgrade $TERM # upgrade $TERM
@ -75,25 +102,43 @@ main() {
tmux set-option -g default-terminal "screen-256color" tmux set-option -g default-terminal "screen-256color"
fi fi
# 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
# 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
tmux set-option -g status-keys emacs tmux set-option -g status-keys emacs
# DEFAULT KEY BINDINGS # ALMOST SENSIBLE OPTIONS
# Ctrl-a + a send `Ctrl-a` to the shell if almost_sensible_on; then
if key_binding_not_set "a"; then # C-a should be the Tmux default prefix, really
tmux bind-key a send-prefix 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
# Ctrl-a + Ctrl-a switch between alternate windows # DEFAULT KEY BINDINGS
if key_binding_not_set "C-a"; then
tmux bind-key C-a last-window local prefix="$(prefix)"
local prefix_without_ctrl="$(prefix_without_ctrl)"
# if C-b is not prefix
if [ $prefix != "C-b" ]; then
# unbind obsolte default binding
if key_binding_not_changed "C-b" "send-prefix"; then
tmux unbind-key C-b
fi
# pressing `prefix + prefix` sends <prefix> to the shell
tmux bind-key "$prefix" send-prefix
fi
# If Ctrl-a is prefix then `Ctrl-a + a` switches between alternate windows.
# Works for any prefix character.
if key_binding_not_set "$prefix_without_ctrl"; then
tmux bind-key "$prefix_without_ctrl" last-window
fi fi
# easier switching between next/prev window # easier switching between next/prev window