[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
sawfish は二つのレベルのカスタマイズの方法を提供します:
これらの内、一つ目の方が二つ目のものより必要とする特別な知識は少ないこと は明らかです。しかし、それでもなおユーザは Lisp 形式で設定する変数を含む スタートアップファイルを編集する必要があります。sawfish はこのようにマニュ アルで編集する必要をなくすために、GUI をとおしてすべてのカスタマイズがな され、ウィンドウマネージャが起動するときに毎回自動的に再読み込みされるこ とを可能にする特別な仕組みを持っています。
`sawfish-ui' プログラムは GUI をマニュアルで実行するのに使われます。 また、もし GNOME が使われていれば 特定のクラスをカスタマイズするのに GNOME コントロールセンタを使うこともできます。
しかし、これらのカスタマイズクラスを提供するためには Lisp プログラマに特
別な必要条件を要求します。変数を宣言するのに defvar
特別形式を単
純に使う代わりに defcustom
マクロを使う必要があります。これによっ
てその変数には GUI のための必要なデータ型などを含む特別な情報を加えます。
カスタマイズオプションはグループにまとめられます。各グループは名前と関連 するオプションの組を含んでいます。今のところグループがサブグループを含む ことはできません。
keys はリストで、グループのプロパティを定義します。リストのメンバ
は組となる項目にグループ化され、最初の項目はプロパティの名前を、二番目の
項目はその値を定義します。今のところプロパティはグループの UI ウィジェッ
トを生成する関数を定義する :widget
だけです。
またこのマクロは 新しいグループをカスタマイズするために実行する GUI を可
能にする customize:group
という名前の対話的な関数を生成しま
す。
defvar
特別形式に似ていて、もしその変数が関連づけ
られていなければ、文字列 documentation のドキュメントとともにして
value に値を設定する、シンボル variable に保持される特別な変
数を宣言します。
すべての他のパラメータは defgroup
としてキー値の組となります。可
能な組は次のとおりです:
:group group
:type type
boolean
、
number
、string
、file-name
、program-name
、
font
、color
、frame-style
、keymap
そして
(set symbols...)
です。
boolean
タイプは nil
か t
といずれかの値であること
を保証し、set
タイプはユーザにリスト中のシンボルの内一つを選択さ
せることを可能にします。
:require feature
nil
でない値に設定されてい
ればその特性 feature が読み込まれなければならないことを示します。
これはカスタマイズオプションがスタート時、あるいはそれらを定義するモジュー
ルの前に読み込まれるために不可欠です。
:allow-nil bool
nil
とできるかどうかを指定し
ます。これは string
、set
、font
そして color
タイプについてのみサポートされています。
:set function
custom-set-variable
の代わりに function を呼ぶ
ことで設定されるべき変数を指定します。関数は3つの引数を受け入れるべきで
す: (variable value &optional require)
.
この関数の通常の動作は値を正しいタイプに変換し、
custom-set-variable
を呼ぶことです。この変換は多くの UI ウィジェッ
トがより複雑なタイプを表現する文字列(すなわち、実際のオブジェクトの代わ
りの色名)を受け入れるので不可欠です。
:get function
:before-set function
:after-set function
:range (min . max)
nil
ならばデフォル
トの可能な最小値は 0 で、もし max が nil
ならばデフォルトで
は最大値は不定です。
それらタイプ自身が 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)) |
これはグループとカスタマイズオプションを定義しています。