現行で使っているのはtmux 1.8。これを2.2にあげてtmuxが動くように.tmux.conf
を修正する。
.tmux.conf
修正前
https://github.com/msmsny/dotfiles/blob/bcde707fe5e4269baebffce97c8e1989e9bcee97/.tmux.conf
2.2にあげてtmuxを起動
問題が出てくるので解決していく
問題点1
エラーメッセージが出る
/home/msmsny/.tmux.conf:3: unknown option: utf8
* UTF8 detection how happens automatically if the client supports it, hence
the:
mouse-utf8
utf8
options has been removed.
とあるのでutf8の設定は削除する。
# 削除
setw -g utf8 on
問題点2
new-windowで起動するシェルが設定を何も読んでいないデフォルトのシェルになってしまう
自分の場合は~/.bash_profile
を読み込めばzshの起動+諸々設定ロード済みの状態になるので、default-commandで設定を追加した。
set -g default-command "source ~/.bash_profile"
問題点3
プロンプトのスタイル設定が効いていない
これは1.8から1.9への変更で
* The various foo-{fg,bg,attr} commands have been deprecated and replaced
with equivalent foo-style option instead. Currently this is still
backwards-compatible, but will be removed over time.
とあるので置き換える。
# 旧
set -g status-bg black
set -g status-fg ${GREEN}
setw -g window-status-bg black
setw -g window-status-fg ${GREEN}
setw -g window-status-attr bold
setw -g window-status-current-bg black
setw -g window-status-current-fg ${GREEN}
setw -g window-status-current-attr underscore
set -g pane-active-border-fg ${GREEN}
# 新
set -g status-style "bg=black,fg=${GREEN}"
setw -g window-status-style "bg=black,fg=${GREEN},bold"
setw -g window-status-current-style "bg=black,fg=${GREEN},underscore"
set -g pane-active-border-style "fg=${GREEN}"
問題点4
ssh先のhostnameが取得できない
「sshしているpaneを選択した状態でnew-windowすると自動的にsshした状態にする」というバインドの設定をしていて
bind C-t new-window "~/git/scripts/tmux/postWindow.sh new 2> /dev/null || exec $SHELL"
new-windowの前のhostnameをスクリプトで取得し、sshしている。
(postWindow.sh
が呼ぶgetLastPaneHostname.sh
で取得)
SIP=$(tmux display -p "#S:#I:#P")
PTY=$(tmux info |
egrep flags=\|bytes |
awk '/windows/ { s = $2 }
/references/ { i = $1 }
/bytes/ { print s i $1 $2 } ' |
grep "$SIP" |
cut -d: -f4)
PTS=${PTY#/dev/}
echo -n `ps -U $USER -o pid,tty,command -ww | awk '$2 == "'$PTS'" && match($0, /ssh\ .+$/) {print substr($0, RSTART + 4, RLENGTH)}'`
しかしtmux info
で取得できる情報が変わってしまったようでtty
の値を特定できなくなってしまった。(=hostnameが取得できない)
そこで取得の方法を変えて
-
#{pane_pid}
で選択していたPIDを取得 -
pgrep
でhostnameを取り出す
としてひとまず取得できるようにした。
PANE_PID="`tmux display -p '#{pane_pid}'`"
echo -n "`pgrep -flP $PANE_PID | awk '{print $3}' `"