カスタマイズシステムが内蔵されているのEmacsの機能を正確あなたが記述プログラミングの問題は、彼らのエディタを設定するには、平均的なユーザーのための理想的な方法ではないかもしれない解決するために設計。
カスタマイズ機能への主要なエントリポイントはM-x customize RET(またはOptions > Customize Emacs > Top-level Customization Groupメニューから)です。そこから、設定を調整するためのインタラクティブなメニューシステムが表示されます。このインターフェイスは、すべての設定が正しいタイプ(数値、文字列、色など)であることを強制し、ユーザーがプログラムでEmacsを構成するときに発生する主なエラーの原因を回避します。ユーザーがUIで行った変更を保持することを選択した場合、設定はユーザーの初期化ファイルの特別なセクションに保存されます(読み取り:).emacs。
defcustomは、低レベルのEmacs Lisp機能のラッパーでありdefvar、変数を宣言し、カスタマイズインターフェイス内で表示できるようにします。また、開発者は、適切なインタラクティブコントロールを表示するために必要な追加のメタデータを提供できます。つまり、この変数に格納される値のタイプは何ですか。任意の文字列?数?オプションの固定セットからの選択?などdefgroupは、これらのカスタマイズ可能なオプションのグループ化構造であるため、それらを適切な階層に配置できます。
この機能は、データの一部をライブラリの内部詳細ではなく、ユーザーにとって構成可能なオプションと見なす必要がある場合に使用する必要があります。
これは私の小さなライブラリから引用した簡単な例です:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
defgroupトップレベルの下のカスタマイズインターフェース内に新しいグループを作成するconvenience項目。次に、可能なチェックボックスの状態を保存する変数が必要でした。使用することもできましたがdefvar、これを簡単にカスタマイズできるようにしたいので、を使用することにしましたdefcustom。この:group部分は、以前に定義されたグループに属している:typeことを示し、文字列のシーケンスであることを示します。デフォルト値と説明もあります。ユーザーが入力した値を変換するための追加機能もあります(ここには表示されていません)。
を実行M-x customize RETしてに移動するConvenience > Checkboxと、次のように表示されます。

これは世界で最も美しいインターフェイスではありませんが、「チェックボックスの状態」の値をcheckbox-states内部的にカスタマイズするための対話型ツールがあることに注意してください。現在の文字列値とINS(挿入DEL)ボタンおよび(削除)ボタンが表示され、編集ボックスで文字列値を編集できます。完了したら、変更を適用するか、元に戻すか、将来のセッションのために適用して保存するかを決定できます。
customize施設を使用するタイミングと手動でカスタマイズするタイミングを知りたいですか?または、モードの作成に興味がありますか?後者は、などdefcustomを使用して実際に自分自身を見つけることができる状況です。