ウィンドウを表示せずにこっそり開く方法

たとえば、ターミナル上でXプログラムを立ちあげるスクリプトを実行していると、まだターミナルで入力したいのに立ち上げたXプログラムに入力フォーカスが奪われてむっとすることがある。↓のエントリのrwaitやxtoolwaitを使ってウィンドウが出たらすぐにさっきのウィンドウに戻すことは可能だが、一瞬表示されるので画面がちらついてよくない。ratpoisonはこの問題の解決策を用意している。rudenessコマンドだ。*1勝手にフォーカスを奪ったり、画面をちらつかせるのは「失礼」と言ってるのだ!

rudenessはウィンドウ表示リクエストが来たら、本当に表示するか、フォーカスを移すか、あるいは無視するかを数字で指定する。以下ratpoisonのInfoより引用。normal windowsは「普通の」ウィンドウ、transient windowsは「ダイアログボックスなど」と思っていればいいだろう。

N is a number from 0 to 15. Each of the four bits determine which requests ratpoison grants.

    Bit 0
          Tells ratpoison to grant raise requests on transient windows

    Bit 1
          Tells ratpoison to grant raise requests on normal windows

    Bit 2
          Tells ratpoison to grant display requests on new transient windows

    Bit 3
          Tells ratpoison to grant display requests on new normal windows

要するにrudeness 15でリクエストをそのまま受け入れ(デフォルト)、rudeness 0でリクエストを無視し、裏でこっそりウィンドウを作るのだ。

ただ、rudenessコマンドはグローバルな状態を変更するだけなので単体ではとても使えた代物ではない。xtoolwaitや↓のエントリで紹介したrwaitと組で使ってナンボである。普通に考えて「今から起動するプログラムのウィンドウは表示しないで裏で実行しててね。起動後は元に戻してね。」というふうに「範囲」があるものだ。xtoolwaitみたいに「N個のウィンドウについて適用する」とかの指定が欲しい。はっきり言って、範囲指定がないから何のために使うのか意味不明だったのだ。

rudenessの使用例は次のエントリで紹介する。

*1:俺は存在しか知らなかった。まさか役立つときが来るとはな…