試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

CompizConfig Settings Managerのウィンドウ指定に使用する情報を簡単に取得・コピーする

CompizConfig Settings Manager(CCSM)

  • General Options - Opacity Settings(設定したウィンドウごとに透明度を指定)
  • アニメーションプラグインの各種設定
  • ウィンドウのルール

といった場所における設定では、テキスト入力欄があっても、どう入力してよいのか分かりにくい(知らないとほとんど何も設定できない)。
日本語のページでは[id:dayflower:20071023:1193106528]、英語のページでは、その参考URLとなっているUse opacity values and Window Rulesが参考になる*1のだが、実際に設定するにあたっては、対象に指定するウィンドウの情報をxpropコマンドで取得しなくてはならない。
(2008/2/24)開発版ではCCSM上で取得・指定できるようになっている。指定の書式は変わっていない。


親切なことに、フォーラムの投稿では、その値を取得するためのコマンド行を種類ごとに書いてくれているのだが、端末上でこれを実行し、端末に出てくる結果をCCSMのほうに貼り付けるというのは、やり方としてあまり好きにはなれない。
そこで、zenityを使用して、結果を

このような形でダイアログに表示するシェルスクリプトを作成した。ランチャ/ファイルマネージャ/アプリ実行ダイアログ/端末など、好みの方法で実行できる。取得できない項目(「role」は無い場合が多い)は表示されない。

[任意]ファイル名: ~/bin/xp.sh

#! /bin/sh

# CompizConfig Settings Manager(CCSM)のウィンドウごとの指定に使用するための
# 各種情報をxpropコマンドから取得し、情報ダイアログに表示

VAL_BEGINTAG="<span size='larger' weight='bold'>"
VAL_ENDTAG="</span>"
NOTE_BEGINTAG="<span style='italic'>"
NOTE_ENDTAG="</span>"

filter_xprop() {
  xprop | while read l; do
    case ${l} in
     *WINDOW_TYPE*)
      echo "type=${VAL_BEGINTAG}$(echo "${l}" | cut -d _ -f 10 | tr '[:upper:]' '[:lower:]')${VAL_ENDTAG}"
      ;;
     *WM_WINDOW_ROLE\(STRING\)*)
      echo "role=${VAL_BEGINTAG}$(echo ${l} | cut -d \" -f 2)${VAL_ENDTAG}"
      ;;
     *WM_CLASS*)
      echo "name=${VAL_BEGINTAG}$(echo ${l} | cut -d \" -f 2)${VAL_ENDTAG}"
      echo "class=${VAL_BEGINTAG}$(echo ${l} | cut -d \" -f 4)${VAL_ENDTAG}"
      ;;
     *WM_NAME\(STRING\)*)
      echo "title=${VAL_BEGINTAG}$(echo ${l} | cut -d \" -f 2)${VAL_ENDTAG}"
      ;;
     *WM_CLIENT_LEADER\(WINDOW\)*)
      echo "xid=${VAL_BEGINTAG}$(echo ${l} | cut -d ' ' -f 5)${VAL_ENDTAG}"
      ;;
    esac
  done
}
zenity --info --title ウィンドウ情報 --text "$(filter_xprop)\n
${NOTE_BEGINTAG}CCSM上の指定の詳細に関しては
<small>http://wiki.compiz-fusion.org/WindowMatching</small>
を参考にしてください(英語)。${NOTE_ENDTAG}"

# フォーラムのURLはコメントアウト
#zenity --info --title ウィンドウ情報 --text "$(filter_xprop)\n
#${NOTE_BEGINTAG}CCSM上の指定の詳細に関しては
#<small>http://forum.compiz-fusion.org/showthread.php?t=1768#post_message_13777</small>
#を参考にしてください(英語)。${NOTE_ENDTAG}"

(2008/10/5)ダイアログ中に表示する参考URLをWikiに変更

また、GTK+ 2の機能で、ダイアログ中の文字列を選択した後、その選択範囲を別のウィンドウにドラッグ・アンド・ドロップできるので、コピーも楽。

ダイアログ中に参考URLとして示したフォーラムWikiのURLは、クリックしてジャンプすることはできない*2が、これも同様にしてURL部分を選択してWebブラウザにドラッグ・アンド・ドロップを行うことで楽に開ける。
(2008/2/24)compiz-fusion.orgのWiki(http://wiki.compiz-fusion.org/WindowMatching)に情報がまとまっていて、今後はこちらを参考にするのがよさそう。

ウィンドウ指定の設定例

パネルに関しては、ツールチップやメニューまで含めないように、「type=dock」指定を含める。
設定を行うにあたっては、Regex Matching」プラグインを有効にしておく必要もあるので注意。

関連記事:

使用したバージョン:

  • Compiz Fusion 0.6.0

*1:[名前]=[値]の形で、「|」が「or/もしくは」、「&」が「and/かつ」の条件になる

*2:文字列の装飾のみを行うPango Text Attribute Markup Languageでは、URLを開く操作はサポートされていない

*3:「ウィンドウのサイズ変更」で「Default Resize Mode」が通常以外の場合で、「Normal Resize Windows」にこれを設定すると、Video Playback + xvを使用したMPlayerだけ通常の形でリサイズできる

*4:「ウィンドウのルール」で、リサイズと最大化を禁止するのに使用