i3 wm で セッションを保存するには
anyevent-i3
およびperl-json-xs
をインストールしておく
sudo pacman -Ss perl-anyevent-i3
sudo pacman -Ss perl-json-xs
最初にworkspace でターミナルをいくつか開き、好きなレイアウトにしておく。ここが対象のworkspaceとなる。
次に、別のworkspaceで、対象のworkspace を指定してi3のレイアウトの配置をファイルに保存する。
i3-save-tree --workspace 1 > ~/.config/i3/workspace_1.json
保存したファイルから、コメントを取り除く。
tail -n +2 ~/.config/i3/workspace_1.json | fgrep -v '// split' | sed 's|//||g' > ~/.config/i3/workspace_1.json
作成したファイルをよみだすスクリプトを作成する。
load_layout.sh
#!/bin/bash
i3-msg "workspace 1; append_layout ~/.config/i3/workspace_1.json"
レイアウトにあわせて起動したいアプリケーションを以下の形式で呼出すように、スクリプトに追記する。
(urxvt &)
(qutebrowser &)
qutebrowserを起動する場合i3-save-tree
が出力したレイアウト状態に上手くあてはまらずに、余白(なにも起動していない領域)ができる場合がある。
これは、qutebrowserがQTというGUIのツール上で起動するために、サイズを指定するパラメータがうまく渡せていないのかもしれない。
そこで、workspace_1.json
から、対応する領域の記述部分を削除して(qutebrowser &)
をスクリプトから呼び出すだけにする。そうすると、それ以外のレイアウトの状態を復元したうえで、qutebrowserを新規に立ち上げた状態となり、作業状態を復元するという目的は満たすことができる。
レイアウトと復元した状態にすることはできないが、アプリケーションは起動しておけるのでそれで良しとする。
最後に、i3の設定ファイルにショートカットキーで、スクリプトを呼びだせるようにしておく。
.config/i3/config
# 設定ファイルに追記
bindsym $mod+g exec sh ~/bin/load_layout