LoginSignup
7
5

More than 5 years have passed since last update.

【tmux】ssh接続先に応じて、自動でペインの背景色とタイトルを変更する

Posted at

Windowsでtmuxを使おうとするとCygwinかMSYS2の2択になるかと思います。
以下はMSYS2を使用している場合の手順ですが、Cygwinでもそんなに変わらないかと思います。

tmuxのインストール

パッケージマネージャのpacman(apt-cygみたいの)でインストール出来るtmuxはバージョンが古い?様でペインのタイトルを変更することが出来ませんでした。

$ pacman -Sy tmux
$ tmux select-pane -T 'hoge'
# -T オプションの説明がない
usage: select-pane [-DdegLlMmRU] [-P style] [-t target-pane]

なのでgitのソースコードからビルドする形で最新バージョンをインストールしています。

$ pacman -Sy make autoconf pkg-config automake-wrapper gcc mingw-w64-x86_64-ncurses ncurses-devel libtool --noconfirm

$ cd ~/
$ git clone https://github.com/libevent/libevent.git
$ cd libevent
$ sh autogen.sh
$ ./configure
$ make
$ make install

$ cd ~/
$ git clone https://github.com/tmux/tmux
$ cd tmux
$ sh autogen.sh
$ ./configure
$ make
$ make install
$ tmux -S $(find /tmp -name 'tmux*')/default
$ tmux select-pane -T 'hoge'
# -T オプションが使用できる

tmuxコマンドだけで起動しようとするcan't create socket: Permission deniedとなり起動できませんでしたが、こちらを参考にさせていただき何とかなりました。
https://qiita.com/shibu_t/items/7556a075e25bd86aac3a

ペインタイトルの表示

ペインタイトルを変更してもデフォルトではどこにも表示されませんので、以下の設定を追加します。

.tmux.conf
# status
set -g pane-border-status bottom
set -g pane-border-format " #{pane_index} : #T "
# border
set -g pane-border-fg green
set -g pane-border-bg black
# アクティブなペインの色
set -g pane-active-border-fg colour14
set -g pane-active-border-bg colour21

設定ファイルを読み込むために以下コマンドを実行。

$ tmux source-file ~/.tmux.conf \; display "Reloaded!"

こんな感じ。
1.png

  • 選択中のペインのボーダーを変更
  • ペイン番号とタイトルをボーダー下線に表示
  • タイトルには現在のディレクトリが自動で反映される

試しに手動でペインタイトルを変更してみる。

$ tmux select-pane -T 'hogehogehoge'

2.png

・・・変化しない。画像では伝わらないがコマンドを実行した直後、一瞬だけタイトルが変化したようにみえる。

現在選択中のペイン以外に対して実行してみる
$ tmux select-pane -T 'hogehogehoge' -t 2

3.png

選択中のペインが移動すると同時にタイトルが変化した。
どうやらエンターが入力された後、現在いるディレクトリ情報が自動的にペインタイトルに反映されてしまうらしい。

  • 自分自身のペインタイトルを変更しようとした場合
    1. ペイン1ペイン1のタイトルをhogeに変更するコマンドを入力してエンターを押す。
    2. ペイン1のタイトルが変更される。
    3. エンターを押されたので、ペイン1の現在いるディレクトリ情報が自動的にタイトルに上書きされる。
  • 自分以外のペインタイトルを変更しようとした場合
    1. ペイン1ペイン2のタイトルをhogeに変更するコマンドを入力してエンターを押す。
    2. ペイン2のタイトルが変更される。同時に選択中ペインもペイン2になる。
    3. エンターが押されたのはペイン1なので、ペイン1の現在いるディレクトリ情報が自動的にタイトルに反映されるが、ペイン2のタイトルはhogeのまま。

後の作業でも特に困らないので、ひとまずこの問題は放置しておく。

背景色の変更

事前に256色設定を有効にしておくこと。(いろいろな人がまとめてくれているので手順は省略します)

$ tmux select-pane -P 'bg=cyan,fg=white'

4.png

sshコマンド実行時にペインタイトル、背景色を変更する。

sshの引数をどのように判断するか?どんな色にするか?は自由に変更可能。

.bashrc
function ssh() {
  # tmux起動時
  if [[ -n $(printenv TMUX) ]] ; then
    # 現在のペインIDの退避と背景色の書き換え
    local pane_id=`tmux display -p '#{pane_id}'`
    # 接続先ホスト名に応じて背景色、文字色を切り替え
    if [[ `echo ${!#} | grep -E 'localhost|127\.0\.0\.1'` ]] ; then
        tmux select-pane -P 'fg=colour166,bg=colour233'
    else
        tmux select-pane -P 'fg=colour5,bg=colour233'
    fi
    tmux select-pane -T "${!#}"

    # 通常通りコマンド続行
    command ssh $@
    # デフォルトの色設定に戻す
    tmux select-pane -t $pane_id -P 'default'
  else
    command ssh $@
  fi
}

適当なホストにssh。
ssh -p 2222 ubuntu@127.0.0.1

5.png
6.png

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5