式神ウィンドウ・マネージャのマニュアル


起動

コマンド・ラインからは、

sgwm
で起動します。


sgwmは、Xのウィンドウ等の準備ができた後に、.sgwmrcを/bin/shで実行しま す。ウィンドウ・マネージャの起動後に自動的に実行させたいコマンドは、こ こから起動するように記述して下さい。.sgwmrcは、以下の順序でディレクト リを探し、最初に発見したものを実行します。どこにも存在しない場合は、実 行しません。

  1. コマンド・ライン・オプションで指定されたファイル
  2. カレント・ディレクトリ
  3. ホーム・ディレクトリ
  4. /usr/local/etc

(注意).sgwmrcで、すみやかに終了しないコマンドをフォアグランドで起動し ては、いけません。ウィンドウ・マネージャが動作しなくなります。そのよう なコマンドは、バックグランドで実行するようにして下さい。


sgwmの起動時に指定できるオプション

sgwmを起動する時に指定できるオプションの説明をします。

-rcfile rcfilename
.sgwmrcに代わるファイルを指定します。
-middle keycode
中ボタンのシミュレーションに使うキーのキー・コードを指定します。 0を指定すると中ボタンのシミュレーションを行ないません。
-right keycode
右ボタンのシミュレーションに使うキーのキー・コードを指定します。 0を指定すると右ボタンのシミュレーションを行ないません。
-nunome
布目ボタンの表示状態を変更します。表示するようにコンパイルされて いる場合は、表示しないようにします。非表示の指定でコンパイルされてい る場合は、表示するようにします。

クライアント・メッセージ

アプレットなど外部から、ウィンドウマネージャの機能を呼び出す場合は、 XのClientMessageを利用します。ウィンドウマネージャに要求する場合は、以下 のClientMessageをRootウィンドウにSubstructureNotifyMaskを指定して SendEventで送ります。

windowパラメータは、すべて、送出するアプリケーションのウィンドウとしま す。 ウィンドウを持たないアプリケーションの場合は、Rootウィンドウでも構いま せん。

以下では、ワークスペースは、将来のことを考えて任意の数に対応可能なよう に定めています。現状では、ワークスペース数は、PDA向けで1、ハンドヘルドPC むけで2です。ワークスペース番号は、0から(ワークスペース数-1)までの整 数または、-1です。-1の場合は、特別な意味をもち、特に述べない限り、 は、アクティブ・ワークスペースを示します。ハンドヘルドPC向けでは、番号0の ワークスペースはメイン領域、番号1のワークスペースはサブ領域を示します。

formatパラメータは、すべて32です。

message_typedata.l[0]data.l[1]data.l[2] 説明
_AXE_SGWS_SWAPワークスペース番号1 ワークスペース番号2l[0]と l[1]で指定されるワークスペースのタスクを交換します。
_AXE_SGWS_ENABLEワークスペース番号 有効性指定のワークスペースの 有効性を変更します。有効性は、0、1、-1のいずれかです。0は無効、1 は有効を示します。-1の場合は、有効ならば無効に、無効ならば有効に変更することを示 します。無効になると、ワークスペースは表示されなくなり、利用不可となり ます。
_AXE_SGWS_ACTIVATEワークスペース番号 指定のワークスペースを アクティブにします。ワークスペース番号に-1を指定した場合、現状のアクティ ブ・ワークスペースの次のワークスペースをアクティブにします。
_AXE_SGWS_RESIZEワークスペース番号 モードサイズ 指定の ワークスペースの表示サイズを指定のものにします。モードは、0の時は、指定サイ ズが絶対値と解釈し、それ以外の時は、指定サイズを増分であると解釈します。 指定したワークスペースの表示サイズが変更されることによって、他のワーク スペースの表示サイズも変更される可能性があります。
_AXE_SGWS_CALLDTワークスペース番号 指定のワークスペースに デスクトップを表示します。既に指定ワークスペースに表示している場合は、非 表示にします。
_AXE_SGWS_MAPWSワークスペース番号 ウィンドウID 指定のワーク スペースに指定のウィンドウIDで示されるタスクを表示します。
_AXE_SGWS_MAPウィンドウID 指定のウィンドウIDで示されるタスクを 表示します。表示ワークスペースは、ウィンドウマネージャにまかされます。
_AXE_SGWS_ROLL_UPワークスペース番号 指定のワークスペースに表 示されているタスクの表示をやめ、非表示タスク・リストの再後尾に置きます。後 には、リストの先頭にあったタスクが表示されます。
_AXE_SGWS_ROLL_DOWNワークスペース番号 指定のワークスペースに表 示されているタスクの表示をやめ、非表示タスク・リストの先頭に置きます。後 には、以前にリストの先頭にあったタスクが表示されます。
_AXE_SGWS_MOVE_NEXT ワークスペース番号 指定のワークスペースに表 示されているタスクを次のワークスペースに表示します。元のワークスペースに は、非表示タスク・リストの先頭が表示されます。
_AXE_SGWS_MOVE_PREV ワークスペース番号 指定のワークスペースに表 示されているタスクを前のワークスペースに表示します。元のワークスペースに は、非表示タスク・リストの先頭が表示されます。

クライアント・メッセージ送出プログラム

式神ウィンドウ・マネージャに上で述べたメッセージを送るためのコマンドを 用意しています。

起動方法は、次の通りです。
sgsendcmsg message_type arg1 arg2 ...

arg1やarg2は、data.l[0]およびdata.l[1]の値に対応しています。

例えば、次のコマンドはメイン領域とサブ領域のタスクを交換します。

sgsendcmsg _AXE_SGWS_SWAP 0 1

キーバインディングの設定

ウィンドウマネージャの幾つかの機能はキーボードにバインディングされ ています。バインディングは、GTKのバインディング機能を利用しています。 ただし、ウィンドウマネージャでは、利用するキーを占有(Grab)する必要があ るために、少々工夫が必要になっています。

キー・バインディングをユーザが指定するためには、gtkrcに以下のように記 述します。(記述方法の詳細はGTKの文書を参照して下さい)

binding "SGWMGrabbedBinding" {
    bind "F4"{
       "swap_task" (0, 1)
    }
}
class "SGWMWidget" binding "SGWMGrabbedBinding"

バインディング・セット名は、本来ユーザが任意に指定できるものですが、 式神ウィンドウマネージャでは、SGWMGrabbedBindingを指定しなければなりま せん。このバインディング・セットで指定したキーはウィンドウ・マネージャに よって占有されるので注意が必要です。さらにこのバインディングをウィン ドウ・マネージャで有効にするには、上記にあるようにクラスSGWMWidgetにバ インディグする必要があります。

キーボード・バインディングは、全く指定がなければデフォルトが存在しますが、 指定する場合は、利用するすべてのキーバインディングをSGWMGrabbedBinding に記述しなければなりません。上記の例では、swap_wsの機能のみしか利用でき なくなります。

バインディングに記述できるシグナルは、先に述べたClientMessageから呼び 出せるものに対応し、以下通りです。
シグナル名対応message_typeデフォルト・キー デフォルト引数説明
swap_task_AXE_SGWS_SWAPAlt+F3(0, 1) --メイン領域とサブ領域の交換
enabale_workspace_AXE_SGWS_ENABLEAlt+Del(1, -1) --サブ領域の生成、削除
activate_workspace_AXE_SGWS_ACTIVATEAlt+F4(-1) --アクティブ領域の変更
resize_workspace_AXE_SGWS_RESIZEAlt+PgUp/Alt+PgDn (0,1,10)/(0,1,-10) --メイン領域の拡大/縮小
call_desktop_AXE_SGWS_CALLDTAlt+F5 デスクトップの呼びだし
map_task_to_workspace_AXE_SGWS_MAPWSNoBinding
map_task_AXE_SGWS_MAPNoBinding
roll_up_task_AXE_SGWS_ROLL_UPAlt+↑ (-1) --アクティブ領域のタスク切替え(UP)
roll_down_task_AXE_SGWS_ROLL_DOWNAlt+↓(-1) --アクティブ領域のタスク切替え(DOWN)
move_next_task_AXE_SGWS_MOVE_NEXTAlt+→ (-1) --アクティブ領域のタスクを他方の領域に移動
move_prev_task_AXE_SGWS_MOVE_PREVAlt+←(-1) --アクティブ領域のタスクを他方の領域に移動