GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Groups.html ・ emacs-doc.conao3.com

25.7 ドキュメントグループ

Emacsでは、さまざまなグループ分けに基づいて関数を一覧表示できます。例えば、string-trimとmapconcatは「文字列」関数であるため、M-x shortdoc RET string RETではこれらや、文字列を操作するその他の関数の概要が表示されます。

ドキュメントグループは define-short-documentation-group マクロで作成します。優れたドキュメントグループの書き方については、ドキュメントグループのヒントを参照してください。

マクロ: define-short-documentation-group group &rest functions

group を関数群として定義し、それらの関数の使用方法について簡潔な説明を記載してください。オプション引数 functions は、要素が以下の形式であるリストです:

(func [keyword val]...)

以下のキーワードが認識されます:

:eval

値は、評価時に副作用のないフォームである必要があります。このフォームは、ドキュメント内で prin1 を用いて出力されます(出力関数を参照)。ただし、フォームが文字列である場合はそのまま挿入され、その文字列が read となることでフォームが生成されます。いずれの場合も、その後フォームが評価され、その結果が使用されます。例えば:

:eval (concat "foo" "bar" "zot")
:eval "(make-string 5 ?x)"

以下の結果となります:

(concat "foo" "bar" "zot")
⇒ "foobarzot"
(make-string 5 ?x)
⇒ "xxxxx"

(ここでLispのフォームと文字列の両方を許容しているのは、フォームの特定の表現が望ましいごく少数のケースにおいて、出力を制御できるようにするためである。例では、‘?x’が文字列に含まれていなければ、‘120’として出力されていただろう。)

:no-eval

これは :eval と同様ですが、フォームは評価されません。このような場合は、何らかの :result 要素(後述)を含める必要があります。

:no-eval (file-symlink-p "/tmp/foo")
:eg-result t
:no-eval*

:no-evalと同様ですが、結果として常に‘[it depends]’が挿入されます。例えば:

:no-eval* (buffer-string)

以下の結果となります:

(buffer-string)
→ [it depends]
:no-value

:no-evalと同様ですが、対象の関数に明確に定義された戻り値がなく、副作用のみを目的として使用される場合に用いられます。

:result

評価を行わない例形式の結果を出力するために使用されていた。

:no-eval (setcar list 'c)
:result c
:eg-result

評価を行わない例形式から、サンプル結果を出力するために使用されていました。例えば:

:no-eval (looking-at "f[0-9]")
:eg-result t

以下の結果となります:

(looking-at "f[0-9]")
eg. → t
:result-string
:eg-result-string

これら2つはそれぞれ :result および :eg-result と同じですが、そのまま挿入されます。これは、結果が判読不能な場合や、特定の形式にする必要がある場合に有用です:

:no-eval (find-file "/tmp/foo")
:eg-result-string "#<buffer foo>"
:no-eval (default-file-modes)
:eg-result-string "#o755"
:no-manual

この関数がマニュアルに記載されていないことを示します。

:args

デフォルトでは、関数の実際の引数リストが表示されます。:args がある場合は、代わりにそれが使用されます。

:args (regexp string)

ごく簡単な例を挙げます:

(define-short-documentation-group string
  "Creating Strings"
  (substring
   :eval (substring "foobar" 0 3)
   :eval (substring "foobar" 3))
  (concat
   :eval (concat "foo" "bar" "zot")))

第1引数は定義対象のグループ名であり、その後に任意の数の関数記述が続きます。

関数は、任意の数のドキュメントグループに属することができます。

機能説明に加えて、リストには文字列要素を含めることもでき、これを用いてドキュメントグループをセクションごとに分割できます。

関数: shortdoc-add-function group section elem

Lispパッケージでは、この関数を用いてグループに関数を追加できます。各elemは、前述の通り関数の説明である必要があります。groupは関数グループ、sectionは関数グループ内のどのセクションに関数を挿入するかを指定します。

group が存在しない場合は、作成されます。section が存在しない場合は、関数グループの末尾に追加されます。

shortdocグループで定義された関数の使用例をクエリすることもできます。

関数: shortdoc-function-examples function

この関数は、function に関するすべての shortdoc 例を返します。戻り値はアリストであり、各要素は (group . examples) という形式をしています。ここで、group は function が含まれるドキュメントグループであり、examples は group で定義された function の例を含む文字列です。

shortdoc-function-examples は、function が関数でない場合、または shortdoc の例がない場合に nil を返します。

関数: shortdoc-help-fns-examples-function function

この関数は、登録されている shortdoc グループを照会し、指定された Emacs Lisp function の使用例を現在のバッファに挿入します。help-fns-describe-function-functions フックに追加するのに適しており、その場合、関数のドキュメントが要求された際に、shortdoc にある関数の使用例が *Help* バッファに表示されます。