Emacsは種々のグループにもとづいて関数をリストできます。たとえばstring-trim
やmapconcat
などは“string(文字列)”の関数ですが、M-x
shortdoc RET string RETによって文字列を操作する関数の概要を得ることができます。
ドキュメンテーショングループはdefine-short-documentation-group
マクロにより作成されます。
関数グループとして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つ目の引数は定義するグループ名、その後に任意個数の関数説明が続く。
関数は任意個数のドキュメンテーショングループに所属できます。
このリストは関数説明に加えて、ドキュメントからセクションへの分割に使用される文字列要素ももつことができます。
この関数によりLispパッケージは関数をグループに追加できる。elemはそれぞれ上述したような関数説明であること。groupは関数グループ、sectionは関数を挿入する関数グループのセクション。
groupが存在しなければ作成する。sectionが存在しなければ、その関数グループの最後に追加される。