devilspie

Gnomeワークスペースを指定してアプリケーションを起動できないか検索してたら出てきた.
具体的には以下のページの内容.


I am trying to specify which workspace an application should open on
eg: thunderbird on workspace 4

                                                          • -

Use devil's pie in combination with the gnome window manager (metacity).

こんな感じで, devilspieを使おうゼと言われてるみたいなので調べてみた.



Ubuntuだと導入は簡単.

$ sudo apt-get install devilspie

ちっちゃいのでインストールは一瞬で終わる.


コマンドでdevilspieっつーのが使えるようになってるみたいだけどよく分からんので, man devilspieをしてみる.
すると, /usr/share/doc/devilspie/にヘルプがあるよーとのことなので, それを読んでみる.

devilspieの設定ファイルのあるディレクトリ.

  • $HOME/.devilspie
  • $SYSCONFDIR/devilspie

後者は, 大概の場合/etc/devilspieになるらしい.
そして, それらのパスの中にある.dsファイルからS式を読むとのこと.



それで, その設定ファイルの書き方.
まず, ウィンドウが作られたとき, それについて情報が欲しいならば次のように~/.devilspie/test.ds書く.

(debug)

これでウィンドウが起動したときにその位置やタイトルなどが出力される.


次に, XMSをワークスペース2に表示したいとき.

(if (is (application_name) "XMS") (set_workspace 2))

if関数は, 第1引数を真偽値で評価し, 真を返したならば, 第2引数が評価される.
偽を返したならば, 第3引数が評価される. この第3引数は, 除外することが可能.
is関数は, 2つの文字列が同一かどうかを評価する.
もし同一ならば, 真を返戻する.
(set_workspace 2)は, 現在のウィンドウをワークスペース2に移動することを示す.


複数の動作を成すためには, (begin ...)を使います.

(if (matches (window_name) "^Character.+") (begin maximize (set_workspace 2)))

ここで, "matches"は, 第2引数が正規表現だと解釈し, 第1引数に対して効果を発揮します.
window_nameは, 現在のウィンドウのタイトルで, maximizeは, 単純に現在のウィンドウを最大化します.

現在のところ, 利用可能な関数一覧を見るためには, src/parser.cを見る必要がある.


私は, こんなのを~/.devilspi/test.dsに書いてみた.
Gnome端末は, ワークスペース1, Emacsは, ワークスペース2, Firefoxは, ワークスペース3に, それぞれ最大化で起動するようになっている.

;;(debug)
(if (is (window_class) "Gnome-terminal")
    (begin maximize (set_workspace 1))
  (if (is (window_class) "Emacs")
      (begin maximize (set_workspace 2))
    (if (is (window_class) "Firefox-bin")
        (begin maximize (set_workspace 3)))
    ))

一応;;でコメントの働きはしてくれてるみたいね.
最初これを書くときは, debugだけ書いてみた方が良い. window_classとか色々分かる.
指定できるものは, 本当にsrc/parser.cに書いてある.
symbol配列内のが全部だとしたらすごく少い. 35,6個ぐらいしかない.



実行するには, 端末上で「$devilspie」とするだけ.
エラーがあれば, 括弧の対応がおかしいとか, その旨をちゃんと表示してくれる.
毎回端末上で, debilspieと打つのは面倒なので, Ubuntuメニューの「システム」→「設定」→「セッション」より,
自動起動するプログラムにdevilspieを加えておく.
ちょっとEmacs起動直後に反応しなかったりするけど, 対した問題にはなってないので放置かなあ.