tmux
で2つの別々のセッションを使用しており、/etc/tmux.conf
で次の全体を使用しています。
set -g base-index 1
new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0
new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2
selectp -t 1
次のコマンドを呼び出して、セッションstandard
を開始します。
urxvtc -name 'tmux' -e bash -c 'tmux attach-session -t standard'
セッションがない場合は作成し、セッションがある場合はアタッチします。ご覧のとおり、2つのウィンドウがあり、そのうちの1つは2つのペインに分割されています。設定ファイルをリロードすると、他のセッションから2つのウィンドウが追加され、両方が既存のウィンドウに追加されました。さらに、以前のウィンドウには1つのペインが追加されました。余分な2つのペインは明確で、実行されたコマンド(htop)はありません。
接続されたセッションにのみ適用されるように構成ファイルをリロードする方法はありますか?または、セッションを使用しているときに設定ファイルをリロードすることを忘れなければならず、新しい設定を適用するには、tmux kill-server
を使用してセッションを新たに開始する必要がありますか?
カスタムセッションをセットアップするためのラッパースクリプトの形であなたのニーズに最もよく応えると思います。 これに対する答え のようなもの。
このように見えますが、特定のニーズに合わせて変更する必要があります。
#!/bin/bash
# test if the session has windows
is_closed(){
sess=$1
n=$(tmux ls 2> /dev/null | grep "^$sess" | wc -l)
[[ $n -eq 0 ]]
}
# either create it or attach to it
if is_closed logi ; then
tmux new -d -s logi -n cmd
tmux neww -t logi -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
tmux splitw -t logi:1 -v -p 50
tmux selectw -t logi:2
tmux selectp -t logi:1
fi
if is_closed standard ; then
tmux new -d -s standard -n htop "htop"
tmux neww -n cmd -t standard
tmux splitw -t standard:2 -v -p 50
tmux selectw -t standard:2
tmux selectp -t standard:1
fi
Tmuxの使用中に構成ファイルを編集した場合、これはプロンプトで実行できます
tmux source-file /path/to/conf
または、.tmux.conf
のキーにバインドすることもできます
bind r source-file ${HOME}/.tmux.conf \; display-message "source-file reloaded"
最後に、重要なカスタマイズを/etc/tmux.conf
に追加するべきではありません。共有システムを使用する必要がある場合、他のユーザーには役に立たないからです。代わりに、~/.tmux.conf
はローカルであり、個人のニーズに固有であるため、カスタマイズを追加することをお勧めします。
ラッパースクリプトを使用する必要はありません。source-file
コマンドを使用して実行できます。
.tmux.conf
を2つに分割しましたが、ソースは次のとおりです。
source-file ~/.config/tmux/options.conf
source-file ~/.config/tmux/session.conf
次に、session.conf
にはペイン定義が含まれます。
new -s logi -n cmd
neww -n logi "cat /dev/logi | ccze -m ansi -p syslog -C"
splitw -t 1 -v -p 50
selectw -t 2
selectp -t 0
new -s standard -n htop "htop"
neww -n cmd
splitw -t 2 -v -p 50
selectw -t 2
selectp -t 1
また、options.conf
にはオプションの定義のみが含まれます。
bind R source-file ~/.config/tmux/options.conf \; display-message "Config reloaded..."
set -g base-index 1
このように、bind R
はoptions.conf
のみをソースでき、すべてが再ロードされますが、新しいペインは作成されません。
1つの小さな欠点は、ウィンドウレイアウトを変更する場合は、終了して新しいセッションを開始する必要があることです。
このスクリプト を作成しました。 tmuxinator、Rubyなど)は必要ありません。これは、構成可能なbashスクリプトです。
私はmi構成ファイルを次のように構成します:
combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')
すべてのプロジェクトを構成できます。残りはスクリプトによって行われます:
#!/bin/bash
if [ -r config ]; then
echo ""
echo "Loading custom file"
. config
else
. config.dist
fi
tmux start-server
window=0
windownumber=-1
for i in "${combo[@]}"; do
if [ $((window%2)) == 0 ]; then
name=${i}
((windownumber++))
else
command=${i}
fi
if [ ${combo[0]} == "${i}" ]; then
tmux new-session -d -s StarTmux -n "${name}"
else
if [ $((window%2)) == 0 ]; then
tmux new-window -tStarTmux:$windownumber -n "${name}"
fi
fi
if [ $((window%2)) == 1 ]; then
tmux send-keys -tStarTmux:$windownumber "${command}" C-m
fi
((window++))
done
tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux