関数
Type: Function
Arguments: autoload FN FILE &optional COMMANDP MACROP
Package: lisp
File: misc.l
関数が呼び出された時点でファイルをロードするよう宣言します。
FN : 関数シンボルを指定します。
FILE : ロードするファイルを指定します。
COMMANDP : 実行するときにinteractiveに実行するかどうかを指定します。
MACROP : マクロかどうかを指定します。
関数を呼び出す側からは、元々そのファイルがロードされていたかのように実行
を続けます。めったに使わない関数をautoloadで宣言しておくとメモリ消費量を
節約できます。また、起動が速くなります。
使用例:
;;; defs.lより
(autoload 'search-dialog "dialogs" t)
(autoload 'replace-dialog "dialogs" t)
(autoload 'count-matches-dialog "dialogs" t)
(autoload 'goto-line-dialog "dialogs" t)
(autoload 'open-file-dialog "dialogs" t)
--- muleの説明 ---
Function: autoload symbol filename &optional docstring interactive macro
この関数は、(filename からオートロードするよう) symbol で名付けられた関
数 (もしくはマクロ)を定義します。 filename は、この関数を呼ぶ時 load に
渡すパス名です。
docstring は、この関数用のドキュメンテーションです。これは(通常)この関数
の関数定義中のものと同じストリングになります。
interactive が non-nil の場合、この関数はインタラクティブに呼ばれます。
(ここでは)完全な interactive specification を与える必要はありません。
macro が non-nil の場合、この関数は(実は)マクロです。
symbol がすでに non-nil の関数セルを持つ場合、 autoload は(何もせず) nil
を返します。 (関数セルが) void の場合、 symbol の関数セルに (autoload
filename docstring interactive macro ) というオートロードフォームを設定
します。
symbol の名前の関数を呼ぶと、(まず)オートロードフォームが評価され、
filename の名前のファイルが load でロードされます。 (この後) symbol の関
数セルは Lisp 関数かマクロを指すことになります。そうならない場合、エラー
になります。
(内容の評価でエラーが生じ) ファイルの評価が完全に行なえなかった場合、ロ
ード中に行なわれた関数定義や provide 呼び出しは undone されます(訳注:取
り消されます)。これは、(エラーを直した後)再び autoload できるようにする
ためです。
SeeAlso: 各種ロード関係の関数の違い
Type: Function
Arguments: autoload-function-p DEF
Package: lisp
File: misc.l
指定された関数がautoloadされたか否かを返します。
nil 指定された関数がautoload済み
もしくはautoloadしない関数の場合
t 指定された関数がautoload前の場合
使用例:
(export 'lisp-info-F1)
(autoload 'lisp-info-F1 "info-modoki" t)
(autoload-function-p 'lisp-info-F1)
=> t
(lisp-info-F1)
(autoload-function-p 'lisp-info-F1)
=> nil
SeeAlso: autoload
Type: Function
Arguments: beginning-of-defun &optional (ARG 1)
Package: editor
File: sexp.l
カーソルを関数定義の先頭に移動します。[ESC C-a]
Type: Function
Arguments: commandp OBJECT
Package: editor
File: builtin.l
関数がinteractive宣言されていれば tを返し、そうでなければnilを返します。
Type: Macro
Arguments: defun NAME (&rest LAMBDA-LIST) &body BODY
Package: lisp
File: evalmacs.l
関数を定義します。
--- muleの説明 ---
defun は、新しく lisp 関数を定義する場合の(通常の)方法です。 defun は、
symbol をこのフォームの残りの部分が示す関数の名前として定義します。 (こ
れは)このシンボルの関数セルが、 parameter-list と forms から作られるラム
ダ式 (lambda parameter-list . forms) を指すようにすることで行なわれます。
値セルは関数セルとは独立しているため、同じシンボルをグローバル変数として
用いてもかまいません。
(上で述べたように) forms 中の最初の 2つのフォームは、ドキュメンテーショ
ンストリングや宣言であることができます。 defun は関数の再定義をチェック
してはいないため、 (car のような) primitive を何も知らせず(再)定義してし
まうことさえありえます。 defun は symbol を返します。
(defun foo () 5)
=> foo
(foo)
=> 5
(defun bar (a &optional b &rest c)
(list a b c))
=> bar
(bar 1 2 3 4 5)
=> (1 2 (3 4 5))
(bar 1)
=> (1 nil nil)
(bar)
-> ERROR: Wrong number of arguments.
(defun capitalize-backwards ()
"This function makes the last letter of a word upper-case."
(interactive)
(backward-word 1)
(forward-word 1)
(backward-char 1)
(capitalize-word 1))
=> capitalize-backwards
Type: BufferLocal
Package: editor
バッファ中の関数の一覧を取得します。行及び関数名を要素に持つリス
トで得られます。list-functionで使用されています。
使用例:
; listfn.lで評価
(funcall ed::build-summary-function)
=> ((10 "lisp-build-summary-of-functions") (39 "lisp-maketags"))
SeeAlso: list-function
Type: Function
Arguments: end-of-defun &optional (ARG 1)
Package: editor
File: sexp.l
カーソルを関数定義の末尾に移動します。[ESC C-e]
Type: Special Form
Arguments: flet ({(NAME LAMBDA-LIST {declaration}* [doc-string] {FORM}*)}*) {FORM}*
Package: lisp
File: builtin.l
ローカルな関数を定義してフォームを評価します。フォーム内で flet で
定義された関数は、外部で定義された同じ名前の関数よりも優先されます。
関数は同時に複数定義できます。
それぞれの定義方法は defun のように、最初に関数名、
次にパラメータのリスト(&optional, &rest, &key パラメータも使えます)、
そしてoptional declaration と docstring、そして最後にフォームと続きます。
(flet ((safesqrt (x) (sqrt (abs x))))
;; The safesqrt function is used in two places.
(safesqrt (apply #'+ (map 'list #'safesqrt longlist))))
SeeAlso: labels
SeeAlso: macrolet
Type: Special Form
Arguments: interactive {INTERACTIVE-STRING {PARAMETER}*|LIST}
Package: editor
File: builtin.l
対話的なマクロ関数の定義は、必ずinteractiveを指定する必要があります。
以下の場面で使われるマクロ関数は対話的でなければなりません。
1) M-x から呼び出す場合
2) define-key, global-set-key でキーバインドする場合
3) ツールバーに登録する場合
以下のように引数を対話的に渡すことも可能です。
;;; 引数が何もない時
(defun foo ()
(interactive) ... )
;;; 引数がある時
(defun foo (n)
(interactive "nPercent: ") ... )
nPercent:のうち最初の1文字(ここではn)だけが以下のような意味を持ちます。
2文字目以降(Percent:)は,ミニバッファに表示される説明の文字列になります。
b 既に存在するバッファの名前
f 既に存在するファイルの名前
n 数字(整数)
s 文字列
B バッファの名前(存在しなくてもよい)
F ファイルの名前 (存在しなくてもよい)
N 数字。ただし、コマンドがプレフィックス付きで起動された場合は、
それを用いる
S シンボル
D ディレクトリ
l(エル) ファイルの複数選択です。ファイル名のリストが取れます。
:title0 "mojiretsu"
:default0 "bar"
:default0 , :default1, :default2というように指定できます
:history0 'execute
--99/08/23追加
1. (interactive "0C \n1s \n2b") みたいに、
制御文字(って言うのでしょうか?)の前に数字を
いれられるようなのですが、これはどういう意味
を持つのでしょうか?
# misc.l の execute-extended-command に実例
# がありますけど、さっぱ分かりまへん。(^^;
0 のとき、プロンプトに数引数がつきます。それ以外の場合
は無視されます。結局、たいした意味はありません(^^;
| 2. (interactive "s何? : " :history0 "ん?") と
| いった、:history[01]? とその組みになる引数は、
| どういう働きをするんでしょうか?
ミニバッファを初期化する際に呼ばれる *enter-minibuffer-hook*
(minibuf.l の prologue-minibuffer)の引数に使われます。
ちなみに、minibuffer-initialize の設計はたぶん間違って
ます。
--------------以下muleの説明---------------------------
Special Form: interactive [arg-descriptors]
この特殊フォームは、(これを持つ)関数がコマンドであること、(つまり) "M-x
か、それにバインドされたキーを入力することでインタラクティブに呼び出すこ
とができる" こと、を宣言します。 arg-descriptors は、"(対象とする)関数を
インタラクティブに呼ぶ場合、どのようにアーギュメントを与えるか" を示しま
す。 interactive は(呼ばれた場合)何も行ないません。 arg-descriptors の評
価も行なわず、(常に) nil を返します。 arg-descriptors が与えられない場合、
(対象とする)関数はアーギュメントを持たずに呼ばれます。もちろん、(対象と
する)関数が 1 つ以上のアーギュメントを必要とする場合、エラーになります。
arg-descriptors がストリングでない場合、それは、評価によって (対象とする)
関数に渡されるアーギュメントのリストが得られるフォームでなくてはいけませ
ん。
arg-descriptor がストリングの場合、このストリングは (そのコード文字が必
要とする場合) プロンプトを後に続けたコード文字で構成されてなくてはいけま
せん。プロンプトは、ストリングの終りかニューラインで終ります。ニューライ
ンの後 (次のアーギュメント用の) 2 番目のコード文字とプロンプトとを与える
ことができます(以下同様)。
ストリングの最初の文字が * の場合、バッファがリードオンリーである場合エ
ラーを出し(訳注:signal)ます。この場合、(その)次の文字を最初のコード文字
として用います。
コード文字の多くは、(その)アーギュメントが既存の何か (バッファ、関数、フ
ァイル名、等) の名前でなくてはいけないことを指示します。このような場合、
(Emacs により)デフォルトのものが与えられるとともに、正しくない (訳注:条
件に合わない)名前は受け入れられなくなります (Emacs は `[No Match]' と文
句を言い、プロンプトを出し、再び名前を求めます)。 TAB, SPC, RET は、関数
completing-read に従い名前の completion を行ないます。
以下のテーブルにおいて、"completion" とマークされたコード文字は completion
を行ないます。 "existing" とマークされたものは(既存の)名前を要求します。
"default" とマークされたものはデフォルトを持ちます。 "prompt" はプロンプ
トを持たなくてはいけません。
a
関数名(i.e., fboundp である(訳注:fboundp を満たす)シンボル)。
existing, completion, prompt
b
バッファ名。existing, completion, prompt
B
バッファ名。completion, prompt
c
文字。prompt
C
コマンド名(i.e. インタラクティブ関数)。existing, completion,
prompt
d
ポイントのポジションを数値として用います。No I/O
D
ディレクトリ名。existing, completion, default, prompt
f
関数名。existing, completion, default, prompt
F
関数名。existing, default, prompt
k
キーシーケンス。 (カレントなキーマップで) コマンドか undefined さ
れたコマンドが見つかるまで文字を読み込み、そのキーシーケンスをスト
リングとして関数に渡します。カーソルはエコーエリアに移動しません。
prompt
m
(数値としての)マークのポジション。No I/O
n
数値。数値を必要とします。prompt
N
未処理のプレフィックスアーギュメントを関数に渡します。プレフィック
スアーギュメントが nil の場合、 (n におけるように)数値を読み込みま
す。数値を必要とします。prompt
p (小文字のp)
処理されたプレフィックスアーギュメントを関数に渡します。No I/O
P (大文字のP)
未処理のプレフィックスアーギュメントを関数に渡します。No I/O
r
ポイントとマークを、関数に対する 2つの(数値の) アーギュメントとし
て(小さい方を先にして)渡します。 No I/O
s
ストリングを読み込み、LFD か RET でターミネートします。このどちら
も(訳注:LFD も RETも) C-q を用いることでストリングに含めることは
できます。 prompt
S
ストリングを読み込み、空白(訳注:whitespace) 文字のどれかでターミ
ネートします。読み込まれたものは、シンボルとして intern されます。
C-q を用いることで空白文字をストリングに含めることはできます。通常
シンボルをターミネートする文字(e.g., ()[])は (訳注:ここではこのス
トリングを)ターミネートしません。 prompt
v
ユーザーオプションとして宣言された変数(i.e., user-variable-p)。
existing, completion, prompt
x
Lisp フォームを読み込み、LFD か RET でターミネートします。
読み込まれるストリングが閉じのダブルクォートをタイプする前にターミ
ネートされた場合、閉じのダブルクォートを追加します。リストやベクト
ルを読み込んでいて、最後の閉じの ) や ] の前にターミネートされた場
合、エラーを出します。 (訳注:読み込んだ)フォームは評価しません。
prompt
X
(x におけるように)フォームを読み込んだ後、評価し、その結果を関数に
渡します。 prompt
(defun foo1 () ;foo1 はアーギュメントを取らず、
(interactive) ;2 word 先に移動させるだけ。
(forward-word 2))
=> foo1
(defun foo2 (n) ;foo2 はアーギュメントを 1つ取り、
(interactive "p") ;それは 処理されたプレフィックスである。
(forward-word (* 2 n)))
=> foo2
(defun foo3 (n) ;foo3 はアーギュメントを 1つ取り、
(interactive "nCount:") ;それは ミニバッファから読み込まれる。
(forward-word (* 2 n)))
=> foo3
(defun three-b (b1 b2 b3)
"Select three existing buffer (prompting for them in the Minibuffer)
Put them into three windows, selecting the last one."
(interactive "bBuffer1:\nbBuffer2:\nbBuffer3:")
(delete-other-windows)
(split-window (selected-window) 8)
(switch-to-buffer b1)
(other-window 1)
(split-window (selected-window) 8)
(switch-to-buffer b2)
(other-window 1)
(switch-to-buffer b3)
)
=> three-b
(three-b "*scratch*" "declarations.texinfo" "*mail*")
=> nil
参照 commandp
=================
以下、花井 達さん作
===制御文字リスト 凡例===
(書式)
制御文字 {属性}[最終変換値] 入力値
{属性}
E: Existing 存在するモノを入力しない限り終わらない
C: Completion 入力候補表示・補完あり
P: Prompt ミニバッファでユーザー入力
D: Dialog ダイアログ表示することも
[最終変換値]
{xx} - 関数には xxx 型の値がくる
{xx/yy} - 入力値が省略又は未定義値だと、yy型がくる。
{xx|yy} - 入力値が多重値だと、yy の型でくる
{*****} - なんでもあり
===制御文字リスト===
a {ECP }[symbol] 関数名。
b {ECP }[buffer] バッファ名。
B { CP }[buffer/string] バッファ名。
c { P }[character] キー入力キャラクタ。
C {ECP }[symbol] インタラクティブコマンド。
d { }[integer] 選択バッファ上での位置。
D {ECPD}[string] ディレクトリ。
e { CP }[string] 実行可能ファイル。
f { CPD}[string] ファイル。
F { CP }[string] ファイル。
k { P }[character|cons] キーシーケンス。
l {ECPD}[string|cons] ファイル。複数可。
m { }[integer] マーク。
M { }[integer] 選択開始位置。
n { P }[integer/nil] 数値。
N { P }[integer/nil] 数値。前置引数(c-u)を優先採用。
p { }[integer] 前置引数による数値。
P { }[integer/nil] 前置引数による数値。
r { }[integer] リージョン。マークが先に来る。
R { }[integer] 選択範囲。開始位置が先に来る。
s { P }[string] 文字列。
S { CP }[symbol] シンボル。
v {ECP }[symbol] 変数。
x { P }[*****] lisp式。
X { P }[*****] lisp式。関数には評価後の値が渡る
AgGhHiIjJKoOqQtTuUVwWyYzZ いまのところ使えない
===その他===
* interactive 文字列の先頭がこれになってるときは、
選択バッファが ReadOnly だとエラーにしちゃう。
(interactive "*fFiles : ") ;;; こんな感じ
\n 複数の制御文字を使う場合、これで区切る
(interactive "*fFiles : \np")::: こんな感じ
0 各制御文字の前に置いておくと、プロンプトに
前置引数(C-u)が挿入されて表示される。
(interactive "0fFiles : ") ::: こんな感じ
1-9 各制御文字の前に置けるけど、とりあえず意味無し。
Type: Function
Arguments: list-function &rest ARGS
Package: editor
File: listfn.l
バッファ中の関数の一覧をダイアログで表示します。選択することで定
義位置にジャンプすることが可能です。バッファ中の関数の一覧は、バ
ッファローカル変数build-summary-functionから取得しています。
Type: Function
Arguments: mark-sexp &optional (ARG 1)
Package: editor
File: sexp.l
前方のS式の末尾にマークを設定します。[ESC NUL]
Type: Macro
Arguments: shiftf {PLACE}+ NEWVALUE
Package: lisp
File: setf.l
引数として与えられた値の格納場所の内容をシフトさせます。
(shiftf a b c)とすると以下のようになります。
┌a ┐ ┌b ┐ ┌c ┐
実行前:│ 1│ │ 2│ │ 3│
└─┘ └┬┘ └┬┘
┌─┘ ┌─┘
┌─┘ ┌─┘
↓ ↓
┌a ┐ ┌b ┐ ┌c ┐
実行後:│ 2│ │ 3│ │ 3│
└─┘ └─┘ └─┘
SeeAlso: rotatef