[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

9. Customization

sawfish は二つのレベルのカスタマイズの方法を提供します:

  1. カスタマイズ: ウィンドウマネージャの既存の特性の振舞いを 変更するように変数を設定する、そして、

  2. 拡張性: 新しい Lisp モジュールの生成によってウィンドウマ ネージャにまったく新しい特性を加える能力です。

これらの内、一つ目の方が二つ目のものより必要とする特別な知識は少ないこと は明らかです。しかし、それでもなおユーザは Lisp 形式で設定する変数を含む スタートアップファイルを編集する必要があります。sawfish はこのようにマニュ アルで編集する必要をなくすために、GUI をとおしてすべてのカスタマイズがな され、ウィンドウマネージャが起動するときに毎回自動的に再読み込みされるこ とを可能にする特別な仕組みを持っています。

Command: customize &optional group
ユーザカスタマイズ GUI を実行します。group は設定するカスタマイズ クラスを定義するか、(group が指定されていなければ)すべてのクラスを 指定します。

`sawfish-ui' プログラムは GUI をマニュアルで実行するのに使われます。 また、もし GNOME が使われていれば 特定のクラスをカスタマイズするのに GNOME コントロールセンタを使うこともできます。

しかし、これらのカスタマイズクラスを提供するためには Lisp プログラマに特 別な必要条件を要求します。変数を宣言するのに defvar 特別形式を単 純に使う代わりに defcustom マクロを使う必要があります。これによっ てその変数には GUI のための必要なデータ型などを含む特別な情報を加えます。

カスタマイズオプションはグループにまとめられます。各グループは名前と関連 するオプションの組を含んでいます。今のところグループがサブグループを含む ことはできません。

Macro: defgroup group real-name &rest keys
シンボル group によって定義される名前のカスタマイズグループを宣言 します。文字列 real-name はユーザに見せるグループのタイトルです。

keys はリストで、グループのプロパティを定義します。リストのメンバ は組となる項目にグループ化され、最初の項目はプロパティの名前を、二番目の 項目はその値を定義します。今のところプロパティはグループの UI ウィジェッ トを生成する関数を定義する :widget だけです。

またこのマクロは 新しいグループをカスタマイズするために実行する GUI を可 能にする customize:group という名前の対話的な関数を生成しま す。

Macro: defcustom variable value documentation &rest keys
はじめの3つは defvar 特別形式に似ていて、もしその変数が関連づけ られていなければ、文字列 documentation のドキュメントとともにして value に値を設定する、シンボル variable に保持される特別な変 数を宣言します。

すべての他のパラメータは defgroup としてキー値の組となります。可 能な組は次のとおりです:

:group group
変数が属するカスタマイズグループを指定します。

:type type
要求される変数のタイプを指定します。現在可能なのは booleannumberstringfile-nameprogram-namefontcolorframe-stylekeymap そして (set symbols...) です。

boolean タイプは nilt といずれかの値であること を保証し、set タイプはユーザにリスト中のシンボルの内一つを選択さ せることを可能にします。

:require feature
もしユーザのカスタマイズによって変数が nil でない値に設定されてい ればその特性 feature が読み込まれなければならないことを示します。 これはカスタマイズオプションがスタート時、あるいはそれらを定義するモジュー ルの前に読み込まれるために不可欠です。

:allow-nil bool
実際のタイプのメンバのかわりに変数が nil とできるかどうかを指定し ます。これは stringsetfont そして color タイプについてのみサポートされています。

:set function
デフォルトの custom-set-variable の代わりに function を呼ぶ ことで設定されるべき変数を指定します。関数は3つの引数を受け入れるべきで す: (variable value &optional require).

この関数の通常の動作は値を正しいタイプに変換し、 custom-set-variable を呼ぶことです。この変換は多くの UI ウィジェッ トがより複雑なタイプを表現する文字列(すなわち、実際のオブジェクトの代わ りの色名)を受け入れるので不可欠です。

:get function
変数の現在の値を読みとる関数を提供します。変数に関連づけられた UI ウィ ジェットに受け入れられる値を返さなければなりません。変数を含むシンボルの 引数とともに呼ばれます。

:before-set function
:after-set function
変数の値を設定した前後両方ですぐに呼ばれる関数です。変数自身を引数として 呼ばれます。

:range (min . max)
数値変数の許される範囲です。もし minnil ならばデフォル トの可能な最小値は 0 で、もし maxnil ならばデフォルトで は最大値は不定です。

それらタイプ自身が defcustom 呼出しでの値を上書きされるデフォルト の :set:get そして :widget 値を定義することが不可 欠であることに注意しなければなりません。けれども普通は不可欠とはなりませ ん。

次の例について考えてみましょう:

 
(defgroup move "Move/Resize")

(defcustom move-outline-mode 'opaque
  "The method of drawing windows being moved interactively."
  :type (set opaque box)
  :group move)

(defcustom move-snap-epsilon 8
  "Proximity in pixels before snapping to a window edge."
  :group move
  :type number
  :range (0 . 64))

これはグループとカスタマイズオプションを定義しています。



This document was generated by SATO Satoru on October, 28 2000 using texi2html