web-dev-qa-db-ja.com

tmux:同じキーで「オン」と「オフ」のオプションを切り替える方法

これは私のtmux.confの一部です

cat tmux.conf
...
bind a set-window-option synchronize-panes on
bind b set-window-option synchronize-panes off

ご覧のとおり、ペインの同期オプションと非同期オプションは2つの異なるキーにバインドされています。同じキーで同期/同期解除を切り替えることはできますか?

45
facha

「on」または「off」を明示的に指定しない場合、オプションは切り替えられます。以下で十分です:

bind-key a set-window-option synchronize-panes\; display-message "synchronize-panes is now #{?pane_synchronized,on,off}"
73
Ojp

付けたり外したりしないでください。トグルbind-key a set-window-option synchronize-panes

3
junho85

これは、run-Shelltmux show-optionの組み合わせで可能になるはずです(tmux 2.3でテスト済み)。

bind a run-Shell "if [[ `tmux show-options -w | grep 'synchronize-panes.*on'` ]]; then toggle=off; else export toggle=on; fi; tmux display-message \"sync panes tmux: \$toggle\"; tmux set-option -w synchronize-panes \$toggle &> /dev/null"

(これは TMuxユーザーメーリングリスト にあるマウスモードトグルのバリエーションです)

3
Frank Schmitt

フランクシュミットの回答に基づくより一般的なソリューション:

!/usr/bin/bash

USAGE="USAGE: $0 OPTION_NAME ON_STATE OFF_STATE"

OPTION_NAME=$1
ON_STATE=$2
OFF_STATE=$3

if [[ "$#" != 3 ]]; then
  echo $USAGE
  exit 1
fi

if [[ `tmux show-option -w | grep "$OPTION_NAME $ON_STATE"` ]]; then
  OPTION_VALUE=$OFF_STATE
else
  OPTION_VALUE=$ON_STATE
fi

tmux display-message "monitor activity: $OPTION_NAME $OPTION_VALUE"
tmux set-option -w $OPTION_NAME $OPTION_VALUE > /dev/null

スクリプトは、オプションの名前、オンの値、オフの値を取ります。十分にテストされていませんが、次のような単純なケースで機能します。

PATH_TO_SCRIPT_ABOVE monitor-activity on off

.tmux.confで:

bind-key <SOME_KEY> run-Shell "tmux_toggle_option monitor-activity on off"
0
Serg