GNOME Looking Glass

GNOME shell のデバッグには GNOME Looking Glass が利用できるらしいので調べてみました。
https://live.gnome.org/GnomeShell/LookingGlass を見る限り、 global や Tweener や St が利用できるみたいです。また、gjs のコンソールとしても利用できます。
しかし、相変わらずドキュメントがない。ということで Reference を参照していきます。そして、もっと残念なことに、最新の Momonga trunk でも Fedora でも Document は gnome-shell パケージに含まれないようになってしまいました。

必要なドキュメントは Web Browser を使いましょう。
St 関係のドキュメントは http://developer.gnome.org/st/stable/index.html になります。Looking Glass で何もせずに利用できるのは、クラスメソッドなので、 st_describe_actor() st_get_slow_down_factor() st_set_slow_down_factor() だけみたいですね。StWidget 型のリファレンスだけで十分かもしれません。
http://developer.gnome.org/st/stable/StWidget.html
そして、利用できるのは、St 全般の Actor の動作速度 (Tweener のアニメーションの速度)を変更する、 st_set_slow_down_factor() だけみたいですね。引数の数値を 1 以上にすると、動作が遅くなるので面白いです。

Looking Glass の起動は Alt+F2 で開かれる窓に lg と入力してEnter キーを押すだけです。終了するには ESC キーを押してください。そこで、動作を 10 倍遅くしてみます。

St.set_slow_down_facor(10)

これでゆっくり動作するようになりました。速度低下の状況は、st_get_slow_down_factor() でわかります。

St.get_slow_down_factor()
r(?) = 10

元に戻すには、 1 を指定します。

St.get_slow_down_factor(1)

次に global を見ていきます。 global は Shell Reference Manual の ShellGlobal に記述されている ShellGlobal 型オブジェクトのメソッドが利用できるみたいです。
http://developer.gnome.org/shell/stable/index.html
ここの
http://developer.gnome.org/shell/stable/shell-ShellGlobal.html
がマニュアルになります。

では、Looking Glass を起動し、 GNOME Shell 全体を取得します。

global.get_stage()

全体が赤枠で囲まれたと思います。このオブジェクトは ClutterStage 型なので、ClutterStage 型オブジェクトのメソッドやプロパティを利用できるようになります。

screen 全体を取得するには、以下のようにします。

global.get_screen()

Meta.Screen 型のオブジェクトが取得できます。これは、 GNOME の Window Manager の Mutter のオブジェクトになります。相変わらずドキュメントがないので、この調査はまたの機会に行います。MetaDisplay も別の機会に調べます。

マウスの pointer の座標を調べるには、

global.get_pointer()
r(?) = xxx,yyy,0

とします。雰囲気でわかりますよね。

Looking Glass のページにも記載されている get_window_actors() ですが、これは、個々のアプリケーションの Window (ClutterActor 型)をすべて取得した List になっているので、forEach で匿名関数(closure)を使って処理できるようです。

メッセージを出す方法として、 Looking Glass の Errors タブに出力する global.log()というのもありますが、画面下の通知領域にメッセージを出すこともできます。shell_global_notify_error() を利用します。

global.notify_error("Warning", "Something wrong!")

通知領域にメッセージが出たでしょうか?

最後に、GNOME Shell のリセット方法を書いて終了します。

global.reexec_self()

Alt + F2 の入力窓で r を入力し、Enter キーを押したのと同じ動作になったと思います。

それでは Looking Glass で GNOME-Shell の Hack をお楽しみください。