検索エンジンから来た人に注意このマニュアルは、Emacs ver. 19.x 向けのマニュアルを Mule 2.x の開発にあたり邦訳したものを、 電脳外道学会がミラーリングしているものであり、旧版製品パラノイアであるところの椅子人の趣味によるものです。しかしながら、現在の Emacs の主流は ver. 20 以降であり、ver 19.x と ver 20.x とでは、仕様の違いが少なからずあります。 したがって、一般的な Emacs ユーザーにとっては、
このマニュアルと実機の動作とが符合しない場合があります。
|
この章にはEmacs Lispの新たな機能の説明ではなく、前章までに説明された 機能を効果的に使用するためのアドバイスが記述されています。
以下は、広く使用されることを目的とするLispコードを書くときによく犯され る誤りを避けるためのヒントや作法です。
cadr
であっても)適用されます。
たとえば、いくつものcadr
を定義するうまい方法があります。安全のた
めに、cadr
とせずに、foo-cadr
もしくはmylib-cadr
など
としてください。
ある名前(たとえばtwiddle-files
という名前で)でEmacsの配布に加えら
れるべきだと思われる関数を書いたときも、あなたのプログラムの中でその名前
を使って呼ばないでください。とりあえず、あなたのプログラムの中では
mylib-twiddle-files
と呼んでおいて、その関数をEmacsに加えるよう
`bug-gnu-emacs@prep.ai.mit.edu'宛にメイルを送ってください。
一つの接頭語では不十分である場合は、意味があるのであれば複数の共通な接
頭語を使っても構いません。
接頭語と残りのシンボル名はハイフン`-'で区切ってください。これは
Emacs自身やほとんどのEmacs Lispプログラムと一貫します。
provide
関数を用いると便利
です。
require
を使用して
ください。
require
が必
要です。
(eval-when-compile (require 'bar))なお、
require
がうまく働くためには、barが(provide '
bar)
を含んでいなければなりません。
このようにすることにより、fooがバイト・コンパイルされるときに
barがロードされます。こうしないと、必要なマクロをロードせずに
fooをコンパイルしてしまうため、コンパイルされたコードは正しく動
作しなくなります。See section マクロとバイトコンパイル。
eval-when-compile
を用いることにより、コンパイルされたfooが
使用されるときに、barがロードされるのを防ぐことができます。
run-hooks
を用いてフック変数を実行するようにしてください。
See section フック。
framep
、frame-live-p
)
whatever-mode
という名前のコマ
ンドを定義し、それを自動ロード(autoload)してください(see section 自動ロード)。
パッケージを単にロードしただけでは目に見える効果がないよう、つまりその効
果を有効にしないように設計してください。そうしてユーザがそのコマンドを起
動することによって効果を有効にします。
next-line
とprevious-line
を使用しないで
ください。ほとんど全ての場合forward-line
の方が便利であり、安
全です。See section テキスト行単位での移動。
beginning-of-buffer
, end-of-buffer
replace-string
, replace-regexp
princ
よりもmessage
関数の方が適切です。See section エコー領域。
error
(もしくはsignal
)
を呼んでください。関数error
はもとの関数に返りません。
See section エラーを発行する方法。
エラーの通知にmessage
、throw
、sleep-for
もしくは
beep
を使用しないでください。
edit-options
コマンドが行っているように、別のバッファに切り替わっ
た後、ユーザの操作により元に戻るようにしてください。See section 再帰編集。
indent-sexp
)によって字下げしてください。
バイト・コンパイルされたLispプログラムの実行速度を改善する方法につい て説明します。
memq
、member
、assq
も
しくはassoc
を使う方が、明示的な繰り返しを使うよりずっと高速です。
これらのプリミティブ検索関数が使えるように、データ構造自体を再検討するの
もよいでしょう。
byte-compile
属性を調べてください。もし
byte-compile
属性がnil
でなければ、その関数は特別扱いさ
れます。
たとえば次のようにすれば、aref
は特別扱いされるが(see section 配列に関する関数)、elt
は特別扱いされないされないことがわかります
(see section シーケンス)。
(get 'aref 'byte-compile) => byte-compile-two-args (get 'elt 'byte-compile) => nil
説明文字列(documentation string)の書き方の作法について説明します。
nil
でない場合は
..." などというようにしてください。こうすることによって、全ての
nil
でない値が等価であることを明確になり、nil
および
nil
でない値がそれぞれ何を意味するのかも明確に示されます。
/
の説明文字列では、2番目の実引数の名前がdivisor
で
あるため、それを`DIVISOR'としています。
たとえばリストやベクタを、変化する文法的要素(subunits)に分解して代表的に
示す場合などは、メタ構文上の変数(meta-syntactic variable)は全て大文字と
してください。(29)
t
とnil
は引用符
をつけないで記述してください。
forward-char
が対応づけられているキーに置き換えます(この例
では、通常は`C-f'となりますが、ユーザがキー・バインドを変更している
場合は別の文字となります)。See section 説明文字列でのキー・バインドの置換。
ここに書かれているようにコメントを記述し、字下げを行うことが推奨されま す。
indent-for-comment
)コマンドが、自動的に正しい場所にこの`;'
を挿入したり、すでにコメントがある場合はその位置を揃えたりします。
この例およびこれ以降の例はEmacsのソースのものです。
(setq base-version-list ; there was a base (assoc (substring fn 0 start-vn) ; version to which file-version-assoc-list)) ; this looks like ; a subversion
(prog1 (setq auto-fill-function ... ... ;; update mode line (force-mode-line-update)))(そのパッケージ内でのみ使用されるため)説明文字列を持たない関数には、かわ りにその関数が何を行ないどのように呼ばれるのが正しいかを説明する二つのセ ミコロンから始まるコメントを書くべきです。それぞれの引数の意味とその値を 関数がどのように用いるかを正確に説明してください。
;;; This Lisp code is run in Emacs ;;; when it is to operate as a server ;;; for other processes.三つのセミコロンで始まるコメントのもう一つの使い方は、関数の中の行をコ メント・アウトするものです。コメントが左マージンに残るようにこの目的に 使用します。
(defun foo (a) ;;; This is no longer necessary. ;;; (force-mode-line-update) (message "Finished with %s" a))
;;;; The kill ring
M-; (indent-for-comment
)やTAB
(lisp-indent-line
)などのEmacsのLispモードの字下げ命令は、自動的に
この規約に従って字下げを行ないます。See section `Manipulating Comments' in The GNU Emacs Manual。
Emacsバージョン19では、Lispライブラリを段落に分けたり、その作者 などの情報を付加するために特別なコメントの規約を定めています。この節で はこれらの規約について説明します。まず最初に例を示します。
;;; lisp-mnt.el --- minor mode for Emacs Lisp maintainers ;; Copyright (C) 1992 Free Software Foundation, Inc. ;; Author: Eric S. Raymond <esr@snark.thyrsus.com> ;; Maintainer: Eric S. Raymond <esr@snark.thyrsus.com> ;; Created: 14 Jul 1992 ;; Version: 1.2 ;; Keywords: docs ;; This file is part of GNU Emacs. copying permissions...
1番先頭の行は次の書式です。
;;; file名 --- 説明
説明(description)は一行に納めてください。
著作権表示に続いて、数行のヘッダ・コメント(header comment)行 が置かれます。それぞれ`;; header名:'で始まります。以下が header名で使われる規約の表です。
;;
とタブ文字で始まる継続
行を用いて記述します。
;; Author: Ashwin Ram <Ram-Ashwin@cs.yale.edu> ;; Dave Sill <de5@ornl.gov> ;; Dave Brennan <brennan@hal.com> ;; Eric Raymond <esr@snark.thyrsus.com>
finder-by-keyword
ヘルプ命令のためのキーワードを記述し
ます。ユーザは、やりたいことから探すときに、あなたのプログラムをこのキー
ワードから探すため、この行は重要です。キーワードを分けるときは、空白文字、
コンマ、もしくはその両方を用います。
少なくとも`Author'と`Keywords'の行は、全てのLispライブラリに 必要です。適切であれば他の行も使用してください。別のヘッダ名の行を加えて も構いません。標準的な意味はないため何の害もありません。
我々は、ライブラリ・ファイルの内容をいくつかに分割するために標準的なコ メントを決めています。以下がその表です。
Go to the first, previous, next, last section, table of contents.