日記(日記とは言っていない)

https://zenn.dev/23prime に移行しました。

Guake のタブに tmux のセッション名を表示する

Guake のタブに tmux のセッション名を表示したいと思いませんか?

僕はGuake のタブに tmux のセッション名を表示したいと思います.

前提

使うものはこちら.

また,

  • Guake の1タブにつき tmux のセッションが1つだけ
  • Guake 自体の改造はしない

を仮定します.

Guake のタブ名

Guake のタブ名は,デフォルトで Terminal端末 になっていると思います.

f:id:prime23:20190420103906p:plain

タブ名の変更方法

タブ名の変更は,次のコマンドでできます.

$ guake --rename-current-tab=<タブ名>

キーバインドの設定もできます.

f:id:prime23:20190420104948p:plain

tmux のセッション名の変更

変更は,次のように行えます.

$ tmux rename-session <セッション名>

タブ名とセッション名を同時に変更する

それぞれ独立に変更するのはダルいので,一括でできるようにしておきます.

rename-session というコマンド名にしておきます.

$ touch rename-session
$ chmod 777 rename-session

中身はこんな感じ.

#!/bin/sh -eu

NAME=$1

if [ $# -ne 1 ]; then
    echo "Please set just 1 argument!" 1>&2
    exit 1
else
    tmux rename-session $NAME
    guake --rename-current-tab=$NAME
    exit 0
fi

こいつによって,

$ rename-session <セッション・タブ名>

だけで両方変更されます.

カレントディレクトリ名をセッション・タブ名にする

だいたいカレントディレクトリ名をそのセッション名にすることが多いので,そのためのショートカットを作ります.

面倒なので全部 zshrc に書きます.

まずは変更するための関数を定義します.

function rs() {
  NAME=`basename \`pwd\``
  rename-session ${NAME/./}
}

これは ctrl-s で呼び出せるように widget 化します.

zle -N rs
bindkey '^S' rs

既存のセッション名をタブに反映する

このままだと,既存のセッションに attach したときにタブ名が Terminal のままです.

そこで,attach のタイミングでタブ名を変更するようにします.

セッション名の取得

tmux のセッション名は,次のように確認できます.

$ tmux display-message -p '#S'

tmuximum の改造

セッションの attach は全て tmuximum で行っているので,少しだけ attach 部分のコードをイジります.

*attach* ) name=$(echo "$answer" | awk '{print $4}' | sed 's/://') && guake --rename-current-tab=$name && tmux attach -t $name ;;

全容はこんな感じ.

github.com

動作はこんな感じ.

f:id:prime23:20190420113407g:plain

ToDo

  • Zshwidget でセッション名を指定できるようにしたい.

まとめ

いかがでしたか?

今回は widget でのセッション名の指定ができませんでした.
今後誰かがやってくれることに期待ですね!