変数と定数


*activate-hook*

type: Variable
package: editor
バッファがactivateされたときに任意の処理を行うために使用されます。
デフォルトではファイルの修正日付を確認しています。

seealso: verify-buffers-file-modtime
seealso: *deactivate-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*after-save-buffer-hook*

type: Variable
package: editor
多分 save-buffer の最後に実行されます。

seealso: save-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*auto-fill-hook

type: Variable
package: editor
file: cmds.l
auto-fill-mode の時に、self-insert-command から *last-command-char*
を引数として実行されます。普通は do-auto-fill が設定されています。
多分修正しない方が良いと思います。
※ run-hooks ではなく、 funcall されるので注意すること

seealso: auto-fill-mode
seealso: auto-fill-hook
seealso: self-insert-command
seealso: funcall
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*before-delete-buffer-hook*

type: Variable
package: editor
delete-bufferを継続するかどうかを制御します。登録された関数が一
つでもnilを返すとdelete-bufferを中止します。

参考:
  ;;; 呼び出し方
  (run-hook-with-args-until-success
       '*before-delete-buffer-hook* (selected-buffer))

使用例:
  (add-hook '*before-delete-buffer-hook* 'func)
  =>(func)
  (defun func (x) (yes-or-no-p "delete-buffer ~A ?" (buffer-name x)))
  =>func

seealso: delete-buffer
seealso: *delete-buffer-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*before-find-file-hook*

type: Variable
package: editor
file: files.l
find-fileの最初で実行されます。
※run-hook-with-args-until-successで実行されるので注意すること

seealso: find-file
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*before-grep-hook*

type: Variable
package: editor
file: grep.l
grep起動前に実行されます。
フックの引数は検索キーワード(or regex string)です。
フック実行時のselected-bufferはgrepバッファです。

seealso: *grep-hook*
seealso: *grepd-hook*
seealso: *before-grepd-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*before-grepd-hook*

type: Variable
package: editor
file: grepd.l
grep-dialog起動前に実行されます。
フックの引数は検索キーワード(or regex string)です。
フック実行時のselected-bufferはgrepバッファです。

seealso: *grep-hook*
seealso: *grepd-hook*
seealso: *before-grep-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*before-save-buffer-hook*

type: Variable
package: editor
多分 save-buffer の最初に実行されます。
※ run-hook-with-args-until-success で実行されるので注意すること

seealso: save-buffer
seealso: run-hook-with-args-until-success
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*brackets-is-wildcard-character*

type: Variable
package: lisp
non-nil ならばファイルパスとして渡した文字列中の [...] をワイルドーカー
ドとして扱います。
[共通設定] - [さまざま] - [[...]はワイルドカード(I)] で値を指定すること
ができます。
xyzzy ソース内で定義されており、デフォルト値は t です。
具体的には、wild-pathname-p, pathname-match-p 関数での判定の際に
*brackets-is-wildcard-character* の値が考慮されます。

seealso: wild-pathname-p
seealso: pathname-match-p
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*change-buffer-colors-hook*

type: Variable
package: editor
途中

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*change-clipboard-hook*

type: Variable
package: editor
クリップボードに値が設定された時に処理を行うために使用されます。
デフォルトではクリップボードの同期を行っています。

補足:
  xyzzy 0.2.2.250 から利用可能です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*command-line-mailto-hook*

type: Variable
package: editor
file: estartup.l
コマンドラインで指定された -mailto オプションの引数を元に実行されます。 
※run-hooksではなくfuncallされるので注意すること

seealso: 起動時処理フロー
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*create-buffer-hook*

type: Variable
package: editor
多分create-new-bufferで実行されます。

seealso: *default-buffer-mode*
seealso: create-new-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*deactivate-hook*

type: Variable
package: editor
バッファがdeactivateされたときに任意の処理を行うために使用されま
す。デフォルトではクリップボードの同期を行っています。

seealso: *activate-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*debug-output*

type: Variable
package: editor
現在のデバッガに文字列を送信する出力ストリームです。
出力したメッセージはDebugViewやVisualStudioの出力ウィンドウで確認可能です。

補足:
  xyzzy 0.2.2.246 から利用可能です。

seealso: si:output-debug-string
seealso: debug-output-stream-p
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*default-load-path*

type: Variable
package: editor
file: misc.l
siteinit.lから*load-path*を修正するために用いられます。
siteinit.lの直後に*default-load-path*の内容が、*load-path*にマー
ジされ、*pre-startup-hook*から有効になります。
追加するパスはリストで設定します。

使用例:
  (setq *default-load-path* '("C:/APPLICATIONS/XYZZY/lib"))

seealso: *load-path*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*delete-buffer-hook*

type: Variable
package: editor
delete-bufferで実行されます。

seealso: delete-buffer
seealso: *before-delete-buffer-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*drag-and-drop-hook*

type: Variable
package: editor
file: mouse.l
D&D時に実行されます。デフォルトでは、D&D先がミニバッファ
ならミニバッファへの入力として扱い、それ以外ならfind-fileする
ようになっています。

※run-hooksではなくfuncallされます。引数は2つで、ドロップされたウィンド
  ウとドロップしたファイルのリストです。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*etc-path*

type: Variable
package: editor
file: misc.l
キーワードファイル等を格納するパスが設定されています。
標準では(merge-pathnames "etc" (si:system-root))が設定されています。

参照例:
  *etc-path*
  => "C:/APPLICATIONS/XYZZY/etc"

seealso: etc-path
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*find-buffer-package-hook*

type: Variable
package: editor
file: lispmode.l
eval-region時のパッケージを決定する際に利用します。

eval-region時パッケージの決定は以下の順序になります。
1.*buffer-package*に代入された値
2.*find-buffer-package-hook*の評価結果

補足:
  xyzzy 0.2.2.239 から利用可能です。

seealso: eval-region
seealso: *buffer-package*
seealso: set-buffer-package
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*find-file-file-not-found-hook*

type: Variable
package: editor
file: files.l
find-file で指定されたファイルが存在しないときに実行されます。
※run-hook-with-args-until-successで実行されるので注意すること

seealso: find-file
seealso: run-hook-with-args-until-success
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*grep-directory-name-hook*

type: Variable
package: editor
file: grepd.l
grep-dialogでgrep対象のディレクトリを個々に設定したい場合に実行
されます。
※funcallされるので注意すること

seealso: *grep-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*grep-hook*

type: Variable
package: editor
file: grep.l
grep起動後に実行されます。

seealso: *grepd-hook*
seealso: *before-grep-hook*
seealso: *before-grepd-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*grep-ignored-directories*

type: Variable
package: editor
file: grepd.l
grep-dialogおよびgresreg-dialogで無視するサブディレクトリを指定します。
標準では以下のディレクトリが設定されています。

  *grep-ignored-directories*
  => ("SCCS" "RCS" "CVS" "MCVS" ".svn" ".git" ".hg" ".bzr" "_MTN" "_darcs" "{arch}")

たとえばtmpを無視したい場合は以下のようにします。

  (require "grepd")
  => t

  (pushnew "tmp" *grep-ignored-directories* :test #'string-equal)
  => ("tmp" "SCCS" "RCS" "CVS" "MCVS" ".svn" ".git" ".hg" ".bzr" "_MTN" "_darcs" "{arch}")

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*grepd-hook*

type: Variable
package: editor
file: grepd.l
grep-dialog起動後に実行されます。

seealso: *grep-hook*
seealso: *before-grep-hook*
seealso: *before-grepd-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*gresreg-directory-name-hook*

type: Variable
package: editor
file: gresregd.l
gresreg-dialog で gresreg 対象のディレクトリを個々に設定したい場合
に実行されます。
※funcallで実行されるので注意すること

seealso: gresreg-dialog
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*history-file-name*

type: Variable
package: editor
file: history.l
ヒストリを保存するファイル名です。
nil の場合は関数 history-file-name において
適当に決定されます。

例:
  *history-file-name*
  =>"X:/xyzzy/usr/username/wxp/.xyzzy.history"

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*inhibit-quit*

type: Variable
package: editor
この値が t のとき、 quit-char を入力しても無視されます。

seealso: quit-char
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*keyword-load-path*

type: Variable
package: editor
file: kwd.l
キーワードファイルのパスをリストで設定します。
指定されたキーワードファイルがこのリストから見つからない場合には、
etc-pathで取得されるパスを検索します。

使用例:
  (pushnew (merge-pathnames "keyword" (si:system-root))
           *keyword-load-path* :test #'string=)

seealso: load-keyword-file
seealso: *etc-path*
seealso: キーワードファイルの書き方
seealso: キーワードファイルのカスタマイズ
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*kill-buffer-kills-scratch*

type: Variable
package: editor
file: lispmode.l
*kill-buffer-kills-scratch*がnon-nilの場合には、kill-bufferで
*scratch*が削除可能です。デフォルトはnilになっています。

seealso: kill-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*kill-xyzzy-hook*

type: Variable
package: editor
xyzzyの終了時に実行されます。

seealso: kill-xyzzy
seealso: *query-kill-xyzzy-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*last-command*

type: Variable
package: editor
最後に実行したコマンドが入っています。直前の *this-command* の値が設定されます。

seealso: *this-command*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*lisp-popup-completion-list*

type: Variable
package: editor
file: lispmode.l
lisp-complete-symbol 時の補完候補をポップアップ表示するかを設定します。 

動作:
  *lisp-popup-completion-list*
    :always   ポップアップ表示
    :never    *Completion*バッファで表示

    *popup-completion-list-default*
      :always ポップアップ表示
      :never  *Completion*バッファで表示

    non-nil   ポップアップ表示
    nil       *Completion*バッファで表示

seealso: lisp-complete-symbol
seealso: *popup-completion-list-default*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*load-history-hook*

type: Variable
package: editor
file: history.l
.xyzzy処理後に実行されます。コマンドバー、セッション等のヒストリ変
数の読み込みに使用されています。

seealso: 起動時処理フロー
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*load-path*

type: Variable
package: lisp
ライブラリをロードするパスがリストで設定されています。
直接リストを修正するよりも、siteinit.lで *default-load-path* 
に追加する方が好ましいようです。

seealso: si:*load-library
seealso: load-library
seealso: *default-load-path*
seealso: find-load-path
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*make-backup-filename-hook*

type: Variable
package: editor
file: backup.l
(多分触らないほうがいいと思われます) 

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*menu-display-length*

type: Variable
package: editor
file: app-menu.l
メニューの「最近使ったファイル」で表示されるファイルパスの長さを指定します。
デフォルトでは40です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-buffer-name-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファのバッファ名の履歴です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-directory-name-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファのディレクトリ名の履歴です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-execute-history*

type: Variable
package: editor
file: minibuf.l
(詳細不明)

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-file-name-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファのファイル名の履歴です。

seealso: add-file-history-to-menu
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-lisp-sexp-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファのS式の履歴です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-search-string-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファの検索文字の履歴です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*minibuffer-symbol-name-history*

type: Variable
package: editor
file: minibuf.l
ミニバッファのシンボル名の履歴です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*post-command-hook*

type: Variable
package: editor
コマンドループにおいてコマンドの実行後に実行されます。

seealso: *pre-command-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*post-startup-hook*

type: Variable
package: editor
file: estartup.l
初期設定ファイル.xyzzy実行後に以下の順番でフック変数が評価されま
す。
  1. *load-history-hook*
  2. *init-app-menu-hook*
  3. *command-line-mailto-hook*(-mailtoがある場合)
  4. *process-command-line-hook*(不明なオプションがある場合)
  5. *post-startup-hook*

seealso: 起動時処理フロー
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*pre-abbrev-expand-hook*

type: Variable
package: editor
file: abbrev.l
expand-abbrevの最初に実行されます。

seealso: expand-abbrev
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*pre-command-hook*

type: Variable
package: editor
コマンドループにおいてコマンドの実行前に実行されます。 

seealso: *post-command-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*pre-startup-hook*

type: Variable
package: editor
file: estartup.l
初期設定ファイルsiteinit.l実行後に実行されます。

seealso: 起動時処理フロー
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*prefix-args*

type: Variable
package: editor
コマンドが数引き数付きで呼ばれた場合に設定される変数です。

  (defun test1 ()
    (interactive)
    (message "~s,~s " *prefix-args* *prefix-value*))

例えば、C-u 10 M-x test1と呼び出されると、
*prefix-args* が non nil になり、 *prefix-value* に値が入ります。

seealso: *prefix-value*
seealso: universal-argument
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*prefix-value*

type: Variable
package: editor
コマンドが数引き数付きで呼ばれた時に数値が入ります。

seealso: *prefix-args*
seealso: universal-argument
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*print-circle*

type: Variable
package: lisp
循環リストの表示を省略形にします

標準はnilです。read-eval-printのループでの
表示は常にtのようです。

(setq *print-circle* nil) => nil
(setq x (list 'a))        => (a)
(setf (cdr x) x)          => #1=(a . #1#)
(princ x)
=> (a a a ...
;;無限に続くのでC-gで終了
(setq *print-circle* t)   => t
(princ x)
#1=(a . #1#)
=> #1=(a . #1#)

seealso: *print-length*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*print-completion-list-hook*

type: Variable
package: editor
file: complete.l
do-completion実行時に、補完リストを表示するために使用されています。
ポップアップ表示の前に処理されます。 
※funcallで実行されるので注意すること
  
使用例:
  (setq *print-completion-list-hook*
        #'(lambda (list prefix &optional string)
            (popup-string
             (format nil
                     "Possible completions are ~D items:\n~{\n~A~}"
                     (length list) list) (point))))

seealso: *popup-completion-list-default*
seealso: *print-completion-sort-function*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*print-completion-sort-function*

type: Variable
package: editor
file: complete.l
do-completion実行時に、補完リストをソートする比較関数を指定します。
デフォルトはstring<です。nilを指定するとソートは行いません。

使用例:
  (setq *print-completion-sort-function* #'string-lessp)

補足:
  xyzzy 0.2.2.244 から利用可能です。

seealso: *print-completion-list-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*print-length*

type: Variable
package: lisp
長いリストの表示を途中で打ち切ります。

(setq *print-length* nil) => nil
(princ '(a b c d e f g h i j))
=>(a b c d e f g h i j)

(setq *print-length* 5)   => 5
(princ '(a b c d e f g h i j))
=>(a b c d e ...)

seealso: *print-circle*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*print-pretty*

type: Variable
package: lisp
式の表示を見やすくします。

標準はtです。

(flet ((f (x) (princ x) (terpri)))
  (let ((*print-pretty* t))
    (f '('a #'b))  ;;tの時の表示
    (setq *print-pretty* nil)
    (f '('a #'b))));;nilの時の表示
=> ('a #'b)
   ((quote a) (function b))

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*query-kill-buffer-hook*

type: Variable
package: editor
file: buffer.l
kill-buffer で実行されます。バッファの破棄を確認するために使用します。
※run-hook-with-args-while-successで実行されるので注意すること。

seealso: kill-buffer
seealso: run-hook-with-args-while-success
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*query-kill-xyzzy-hook*

type: Variable
package: editor
xyzzy終了時に実行されます。このフック変数の実行がnilだと終了しません。
[xyzzy:03872]を参照

seealso: *kill-xyzzy-hook*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*read-eval*

type: Variable
package: lisp
読み取り時評価(read-time evaluation)を制御します。
*read-eval*がnon-nilなら #. リーダマクロは通常どおり直後のS式を評価した結果を値とします。
nilならreader-errorが発生します。

標準はtです。

(let ((*read-eval* nil))
  (read-from-string "#.(+ 1 1)"))
=> Line 1: リード時の評価が許されていません

(let ((*read-eval* t))
  (read-from-string "#.(+ 1 1)"))
=> 2
   9

補足:
  xyzzy 0.2.2.236 から利用可能です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*save-buffer-no-filenames-hook*

type: Variable
package: editor
get-buffer-file-name が nil とかだと実行されます。
使用例:
  (add-hook '*save-buffer-no-filenames-hook*
          #'(lambda ()
              (if (yes-or-no-p "保存しますか")
                  ;;この時点で set-buffer-file-name をしても遅い。
                  ;;emacs-write-file なりを呼んでからnon-nilを渡すべき
                  (emacs-write-file (read-file-name "filename:"))
                ;;次のhookに処理を渡す場合はnilを渡す
                nil)))

seealso: save-buffer
seealso: get-buffer-file-name
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*save-history*

type: Variable
package: editor
file: history.l
保存するヒストリの個数です。
[共通設定] - [いろいろ] - [保存するヒストリの個数(S)] で値を指定すること
ができます。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*save-history-hook*

type: Variable
package: editor
file: history.l
*kill-xyzzy-hook*実行時に呼び出されます。
コマンドバー、セッション等のヒストリ変数の保存に使用されています。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*save-resume-info*

type: Variable
package: editor
file: history.l
non-nil ならば終了時の状態を保存します。
[共通設定] - [さまざま] - [終了時の状態を保存する(U)] で値を指定すること
ができます。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*show-match-hook*

type: Variable
package: editor
file: search.l
検索で一致したものの表示に使用しています。設定されていなければ、
show-matchが実行されます。
※run-hook-with-args-while-successで実行されるので注意すること。

seealso: search-dialog
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*sync-kill-ring-with-clipboard*

type: Variable
package: editor
file: region.l
non-nil ならば削除バッファとクリップボードを同期します。
[共通設定] - [さまざま] - [削除バッファとクリップボードを同期する(C)] で値を
指定することができます。

  t       : 削除バッファとクリップボードを中途半端に同期します。
            xyzzyから他のアプリに切り替えるタイミングで削除バッファの方が
            新しければ削除バッファの内容をクリップボードにコピーします。
            また、yank (C-y) のタイミングでクリップボードの方が新しければ
            クリップボードの内容を削除バッファにコピーします。
  :always : 削除バッファとクリップボードを完全に同期します。
            削除バッファやクリップボードにコピーされたタイミングで
            すぐに同期します。
            クリップボードにコピーされた内容は削除バッファに追加されてるので、
            yank-pop (M-y) で遡って貼り付けることができます。
  nil     : 削除バッファとクリップボードを同期しません。

補足:
  :always は xyzzy 0.2.2.250 から利用可能です。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*this-command*

type: Variable
package: editor
現在実行中の関数名のシンボルを格納しています。*last-command*に設定されます。
*pre-command-hook* / *post-command-hook*で特別な処理をかますのに使ったり、
実行中のコマンドを偽ったりできます。

seealso: *last-command*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

*xyzzyenv-show-flag*

type: Variable
package: editor
make-processで外部コマンドを実行するときのxyzzyenv.exeの
表示を指定します。

  :show      通常のウィンドウ
  :no-active 非アクティブ
  :minimize  最小化
  :maximize  最大化
  :hide      非表示
  上記以外   通常のウィンドウ

補足:
  xyzzy 0.2.2.242 から利用可能です。

seealso: make-process
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:case-fold

type: Keyword
package: keyword
検索する場合に大文字と小文字を区別するかどうかを指定します。

  t     大文字と小文字を区別しません。
  nil   大文字と小文字を区別します。

seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:key

type: Keyword
package: keyword
assoc や member、find などの関数で検索をする際に
各要素に適用する関数を指定します。
言い換えると、:test や :test-not で指定された関数に渡す値を
各要素から“取り出す”方法をこの関数で指定します。

使用例:
  ;; car が 'a である要素を除去する
  (remove 'a '((a . b) (b . x) (c d e) (a f h i) (x y)) :key #'car)
  => ((b . x) (c d e) (x y))
  ;; :test と組み合わせることも可能
  (remove "a" '(("a" . "b") ("b" . "c") ("d" . "a") ("a" . "e") ("b". "b"))
          :test #'string= :key #'car)
  => (("b" . "c") ("d" . "a") ("b" . "b"))

seealso: :test
seealso: :test-not
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:no-dup

type: Keyword
package: keyword
検索する場合に同じ位置から行うかどうかを指定します。

  t     ひとつ次から検索を行う。
  nil   同じ位置から検索を行う。

seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:regexp

type: Keyword
package: keyword
検索文字列が正規表現か否かを指定します。

  t     検索文字列は正規表現
  nil   検索文字列はただの文字列

seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:reverse

type: Keyword
package: keyword
検索する場合に正方向か逆方向かを指定します。

  t     逆方向に検索します。
  nil   正方向に検索します。

seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:right-bound

type: Keyword
package: keyword


seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:tail

type: Keyword
package: keyword
検索した場合にカーソルを文字列の先頭か末尾のどちらに位置づけるかを指定します。

  t     カーソルを末尾に位置づけます。
  nil   カーソルを先頭に位置づけます。

seealso: scan-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:test

type: Keyword
package: keyword
assoc や member、find などの関数で検索をする際に、
このキーワードに設定した関数を用いて真偽の判定をします。

なお :test-not と同時に指定することはできません。

使用例:
  (assoc "b" '(("a" . 1) ("B" . 2) ("b" . 3) ("c" . 4)))
  => nil
  (assoc "b" '(("a" . 1) ("B" . 2) ("b" . 3) ("c" . 4)) :test #'string=)
  => ("b" . 3)
  (assoc "b" '(("a" . 1) ("B" . 2) ("b" . 3) ("c" . 4)) :test #'string-equal)
  => ("B" . 2)

seealso: :test-not
seealso: :key
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

:test-not

type: Keyword
package: keyword
assoc や member、find などの関数で検索をする際に、
このキーワードに設定した関数の逆(not)を用いて真偽の判定をします。
  
なお :test と同時に指定することはできません。

使用例:
  ;; "abc" を含む文字列を選ぶ = "abc" を含まない文字列を除去する
  (remove "abc" '("abcd" "test" "xabcx" "abc" "xyz") :test-not #'string-match)
  => ("abcd" "xabcx" "abc")

seealso: :test
seealso: :key
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

add-history

type: Function
arguments: add-history ITEM VAR
package: editor
file: minibuf.l
VAR に ITEM を LRU順で追加します。 *minibuffer-maximum-history-count* 
を超えるときは、最も使用されていないヒストリを削除します。

また、 *minibuffer-enable-add-to-menu* が non-nil のときに、
(get VAR 'add-lru-menu-function) に関数が設定されていれば、
その関数を実行します。例えば、 *minibuffer-file-name-history* には、 
add-file-history-to-menu が設定されており、開いたファイルをメニューの
「最近使ったファイル(F)」に登録しています。

使用例:
  (add-history file '*minibuffer-file-name-history*)
  (add-history cmd '*minibuffer-execute-history*)

seealso: *minibuffer-maximum-history-count*
seealso: *minibuffer-enable-add-to-menu*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

auto-fill-hook

type: Variable
package: editor
入力の結果、fill-columnを越えたらdo-auto-fillから実行されます。

seealso: *auto-fill-hook
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

auto-save

type: BufferLocal
package: editor
自動保存を行うかを制御するためのフラグです。
個々のバッファ毎や特定のモードだけしたくないのであれば、使用例の様にロー
カル変数にします。

  t     自動保存する
  nil   自動保存しない

使用例:
  ;;; 現在のバッファは自動保存しないようにする。
  (make-local-variable 'auto-save)
  => t  
  (setq auto-save nil)
  => nil

seealso: setup-temp-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

buffer-read-only

type: BufferLocal
package: editor
バッファが読み取り専用かどうかを管理します。

  t     バッファは読み取り専用
  nil   バッファは読み書き可能

seealso: toggle-read-only
seealso: setup-temp-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

call-arguments-limit

type: Variable
package: lisp
関数に与えることのできる引数の個数の限界値

参照例: 
  call-arguments-limit
  => 536870911

seealso: lambda-parameters-limit
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

char-code-limit

type: Variable
package: lisp
文字コードの限界値を定めている定数(65536)です。
*character-name-hash-table* を設定する
(make-character-name-hash-table) 関数の定義中でのみ使用されています。
xyzzy ソース内で定義されています。

seealso: *character-name-hash-table*
seealso: make-character-name-hash-table
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

constantp

type: Function
arguments: constantp OBJECT
package: lisp
file: builtin.l
オブジェクトがconstantかどうかを返します。

  t     オブジェクトはconstant
  nil   オブジェクトはconstantでない

使用例:
  ;;; defvar/defconstantの違い
  (defvar foo 2)
  => foo
  (defconstant bar 3)
  => bar
  (constantp 'foo)
  => nil
  (constantp 'bar)
  => t

seealso: defconstant
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

declaim

type: Macro
arguments: declaim &rest DECL-SPECS
package: lisp
file: typespec.l
変数をスペシャル変数にします。proclaim のマクロ版です。

seealso: declare
seealso: proclaim
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

declare

type: Misc
package: lisp
Common Lispの機能で、「変数を動的に bind しろ」と宣言する事です。
Emacs Lispではそもそも動的にしか bind できないので存在しません。

  (declare (special 変数名))

違いを図示します。

  ;;; 大域変数 x          ┏大域変数━━━━━━┓    Common Lisp/xyzzy lisp:
  (setq x 0)              ┃x │0             ←╂─┐大域変数のxを参照する。
                          ┠─┴────────┨  │(+ 0 12)となる
  ;;; 関数 bar            ┃                    ┃  │
  (defun bar (x)          ┃┏(bar 34)━━━━┓┃  │    Emacs Lisp:
    (foo 12))             ┃┃x │34        ←╂╂─│─┐呼び出しスタックの
                          ┃┠─┴──────┨┃  │  │深いところのxを参照する。
  ;;; 関数 foo            ┃┃                ┃┃  │  │(+ 34 12)となる。
  (defun foo (y)          ┃┃┏(foo 12)━━┓┃┃  │  │
     (+ x y))    ... ※   ┃┃┃y │12      ┃┃┃  │  │
                          ┃┃┠─┴────┨┃┃  │  │
                          ┃┃┃(+ x y)   ─╂╂╂─┴─┘

とあったときに(bar 34)と呼び出すと、古いLispでは(Emacs Lispを含む)
※の時点で x = 34, y = 12と見えます。ところが、Common Lispやxyzzy lispでは
※の時点で x = 0,  y = 12と見えます。

昔Lispはインタープリタだったので、動的バインディングでもよかったんだけど、
コンパイラを作る時に、効率上なにかと問題があってCommon Lisp
では、静的バインディングに変更になりました。

でも、そうすると、古いコードを移植するのが大変になるので、

                          ┏大域変数━━━━━━┓    
                          ┃x │0               ┃
                          ┠─┴────────┨
  ;;; 関数 bar            ┃                    ┃    
  (defun bar (x)          ┃┏(bar 34)━━━━┓┃    Common Lisp/xyzzy lisp:
    (declare (special x)) ┃┃x │34        ←╂╂─┐大域変数ではなく
    (foo 12))             ┃┠─┴──────┨┃  │スタック上のxを参照する。
                          ┃┃                ┃┃  │(+ 34 12)となる。
                          ┃┃┏(foo 12)━━┓┃┃  │
                          ┃┃┃y │12      ┃┃┃  │
                          ┃┃┠─┴────┨┃┃  │
                          ┃┃┃(+ x y)   ─╂╂╂─┘

と書いてやると古いLisp(Emacs Lisp)のように動くという訳。

seealso: special
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

defconstant

type: Macro
arguments: defconstant NAME VALUE &optional DOC
package: lisp
file: evalmacs.l
定数を宣言します。

使用例:
  ;;; encoding.lの中より
  (defconstant *eol-crlf* 1)
  => *eol-crlf*

seealso: constantp
seealso: defvar
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

define-history-variable

type: Macro
arguments: define-history-variable NAME &optional (INITIAL-VALUE nil sv) DOC
package: editor
file: history.l
ヒストリ変数を定義します。

  NAME          : ヒストリ変数名を指定します。
  INITIAL-VALUE : 初期値を設定します。
  DOC           : 変数の説明を指定します。

ヒストリ変数とは、次回のxyzzyの立ち上げまで値を保持してくれる(lispを書く
人には)便利な変数です。ヒストリ変数がないと各マクロごとに独自の保存方法
をとらないといけませんが、ヒストリ変数のおかげで宣言するだけで変数の状態
を保存することが可能な優れものです。

ただし、一旦作成したヒストリ変数はいつまでも残ってしまうので、
不要になったらed::*history-variable-list*を確認した上で、
unregister-history-variableで削除して下さい。

使用例:
  ;;; grepd.lより
  (define-history-variable *grep-directory-history* nil)
  (define-history-variable *grep-file-history* nil)

seealso: register-history-variable
seealso: unregister-history-variable
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

defparameter

type: Macro
arguments: defparameter NAME VALUE &optional DOC
package: lisp
file: evalmacs.l
グローバルなスペシャル変数を宣言し、指定した値に設定します。
defvar に似ていますが、VALUE は省略できません。
また NAME がすでに値を持つ場合でも VALUE が評価され、結果が変数値として
設定されます。

seealso: defvar
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

defstruct

type: Macro
arguments: defstruct NAME-AND-OPTIONS &rest REST
package: lisp
file: struct.l
構造体を定義します。C言語のstruct文に相当します。
オプションとして以下のものを指定できます。
以下、xxxx の部分には構造体名が入ります。

  :conc-name         通常、xxxx-スロット名 という名前を持つ関数で変数に
                     アクセスしますが、この名前を変更します。xxxx- 
                     の部分に相当する名前を指定します。
  :constructor       指定したコンストラクタを生成します。
                     複数の :constructor 宣言することができます。 引数には
                       コンストラクタ名 (変数名1 変数名2 ... 変数名n)
                     の様に指定します。&key や &optionalを使用したり、
                     スロットのデフォルト値とは異なるデフォルト値を指定できま
                     す。
                     これ以上の詳細は不明です。
  :copier            コピー関数名を指定したものに変更します。異なる動作をする
                     関数を指定できるわけではありません。
                     コピー関数は、新しい構造体オブジェクトを作ってスロットを
                     コピーします。新旧の構造体で各スロットは、同じオブジェク
                     トを共有します。
  :predicate         指定された構造体であるか否かを調べる関数名を指定します。
                     この名前を持つ述語をシステムが生成します。
                     デフォルトは、 xxxx-p です。
  :include           他の構造体名を指定することで、構造体を継承します。
                     継承した構造体にある変数の宣言が、この構造体でも宣言され
                     ているものとして扱われます。
                     これ以上の詳細は不明です。
  :print-function    オブジェクトを print する時に使われる関数を指定します。
                     format関数の ~A などでオブジェクトをプリントする時に呼び出
                     される関数が変わります。指定する関数は3つの引数をとり、
                     順にオブジェクト、ストリーム、(詳細不明)をとります。
                     第3引数は、pretty printに関する値が来ます。
                     :print-function が指定されない場合、 #S 構文でプリントさ
                     れます。
  :type              (詳細不明)
  :named             (詳細不明)
  :initial-offset    (詳細不明)

引数:
  NAME-AND-OPTIONS   オプションを指定しないときは構造体名、オプションを指定する
                     ときは、
                       (構造体名 (オプション名1 値1) (オプション名2 値2) ... )
                     の様に指定します。
  REST               構造体のスロットを指定します。スロット名のみを書くか、
                       (スロット名 デフォルト値 :type タイプ名 :read-only フラグ) 
                     の様に書いてひとつのスロットを定義します。 
                     :type と :read-only は、逆順にしても片方のみでも構いません。
                     リスト形式で書いた場合、後ろから順に省略できます。
                     タイプ名は、この構造体のオブジェクトであるかどうかを調べる
                     述語の生成に使うことができますが、xyzzy では使われていない
                     ようです。

特にオプション指定しないと make-xxxx, copy-xxxx, xxxx-p, xxxx-変数名 という関数
が作られるようです。 

  make-xxxx     デフォルトのコンストラクタ
  copy-xxxx     デフォルトのコピー関数
  xxxx-p        指定された構造体であるか否かを調べる関数
  xxxx-変数名   変数へのアクセス関数

定義:
  ;;; struct.lの定義
  (defmacro defstruct (name-and-options &rest rest)
    (eval-when (:compile-toplevel :load-toplevel :execute)
      (defstruct-helper name-and-options rest)))

使用例:
  ;;; FTPサーバを表す構造体の場合
  ;;; 初期値を予め指定することも可能
  (defstruct ftpsvr 
     anonymous hostname (port 80))
  => #<structure-definition: ftpsvr>
  (setq f1 (make-ftpsvr))
  => #S(ftpsvr anonymous nil hostname nil port 80)
  (setq f2 (make-ftpsvr  :anonymous t :hostname "ftp.world.com"))
  => #S(ftpsvr anonymous t hostname "ftp.world.com" port 80)
  (setq f3 #S(ftpsvr anonymous nil hostname "localhost"))
  => #S(ftpsvr anonymous nil hostname "localhost" port 80)

  ;;; 人を表す構造体の場合
  (defstruct person
     (name nil :type string)
     age
     (bloodtype "A"))
  => #<structure-definition: person>
  (setq p1 (make-person :name "Mike" :age 19))
  => #S(person name "Mike" age 19 bloodtype "A")
  (person-name p1)
  => "Mike"
  (setq p2 (copy-person p1))
  => #S(person name "Mike" age 19 bloodtype "A")
  (setf (person-bloodtype p1) "O")
  => "O"
  (person-bloodtype p1)
  => "O"
  (person-bloodtype p2)
  => "A"

  ;;; 患者を表す構造体の場合
  (defstruct (patient
             (:conc-name p-)
             (:print-function
              (lambda (o s p)
                (format s "<patient ~A ~D ~A>" (p-name o) (p-age o) (p-sicks o))))
              (:include person))
     (sicks nil :type (or nil list))
     id)
  => #<structure-definition: patient>
  (setq p3 (make-patient :name "Lucy" :age 18 :sicks '("かぜ")))
  => #S(patient name "Lucy" age 18 bloodtype "A" sicks ("かぜ") id nil)
  (format nil "~A" p3)
  => "<patient Lucy 18 (かぜ)>"

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

defvar

type: Macro
arguments: defvar NAME &optional (INITIAL-VALUE () SV) DOC
package: lisp
file: evalmacs.l
グローバルなスペシャル変数を宣言します。
宣言された変数はダイナミックなスコープを持つようになります。
INITIAL-VALUE が与えられた場合、NAME が変数としての値を持たなければ
INITIAL-VALUE を評価し、その結果を変数値として設定します。

seealso: defparameter
seealso: defvar-local
seealso: defconstant
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

defvar-local

type: Macro
arguments: defvar-local NAME INITIAL-VALUE &optional DOC
package: editor
file: misc.l
変数NAMEがバッファ毎に異なる値を持つようにします。関連する関数として、
defvar/make-local-variable等がありますが、それぞれ機能が異なります。
defvar-localはdefvarと異なり、スペシャル変数とはならないので注意が必要です。

  defvar              : スペシャル変数を作る。
  defvar-local        : 全バッファで変数が独自の値を持つようにする。
  make-local-variable : 特定のバッファで変数が独自の値を持つようにする。

また、defvar-localだけではその変数はローカル変数にはならないようです。バ
ッファでsetqをして初めてローカルになる(local-variable-pがtになる)よう
です。

使用例:
  ;;; defvarとdefvar-localを使ってダイナミックかレキシカルかを確認する。
  (defvar var 3)
  => var  
  (defvar-local var-local 3)
  => var-local
  
  (defun foo () (let ((var 4) (var-local 4)) (bar)))
  => foo
  (defun bar () (format nil "var : ~S, var-local : ~S" var var-local))
  => bar
  
  (foo)
  => "var : 4, var-local : 3"
(defvar-local *dabbrevs-case-fold* nil)

seealso: make-local-variable
seealso: setq-default
seealso: local-variable-p
seealso: buffer-local-value
seealso: defvar
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

ed::*register-alist*

type: Variable
package: editor
file: register.l
レジスタに格納されている値を保持する変数。
中身は (name . datum) の形の連想リストです。
emacs と違い name にはどんな文字でも入るようです。

datum としては(通常は)以下のものが使用できます。
  マーカー
  文字列
  矩形領域(文字列のリスト)
  window configuration

seealso: ed::get-register
seealso: ed::set-register
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

enable-post-buffer-modified-hook

type: Function
arguments: enable-post-buffer-modified-hook ENABLE &optional BUFFER
package: editor
file: builtin.l
post-buffer-modified-hookを有効・無効にします。
カレントバッファの値のみ変更します。

  ENABLE  : non-nil 有効にします
            nil     無効にします
  BUFFER  : 有効にするバッファを指定します。
            省略時やnilを与えた場合はカレントバッファを指定したとみなします。

seealso: post-buffer-modified-hook-enabled-p
seealso: post-buffer-modified-hook
Link: [xyzzy:06354]
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

fmakunbound

type: Function
arguments: fmakunbound SYMBOL
package: lisp
file: builtin.l
指定されたシンボルの関数定義からの束縛を解消します。
これ以降fboundpはnilを返すようになります。値と関数定義の束縛は独立してい
るので、fmakunboundをしてもboundpの結果は変わりません。

使用例:
  ;;; 関数定義への束縛を解消してみる。
  (defun foo (x) (* x 3))       => foo
  (fboundp 'foo)                => t
  (fmakunbound 'foo)            => foo
  (fboundp 'foo)                => nil

seealso: fboundp
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

function

type: Special Form
arguments: function FN
package: lisp
file: builtin.l
関数の関数定義を返します。#'と同じです。

使用例:
  ;;; #'とfunctionとsymbol-functionを比べてみる。
  (defun foo (x) (* x 3))
  => foo
  #'foo
  => #<lexical-closure: foo>
  (function foo)
  => #<lexical-closure: foo>
  (symbol-function 'foo)
  => #<lexical-closure: foo>

seealso: symbol-function
seealso: quote
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

lambda-list-keywords

type: Variable
package: lisp
file: evalmacs.l
ラムダリストキーワードとして使えるシンボルのリストです。

参照例:
  lambda-list-keywords
  =>(&optional &rest &key &aux &body &whole &environment)

seealso: interactive
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

lambda-parameters-limit

type: Variable
package: lisp
lambdaに与えることのできる引数の個数の限界値

参照例: 
  lambda-parameters-limit
  => 536870911

seealso: call-arguments-limit
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

let

type: Special Form
arguments: let ({VAR|(VAR [VALUE])}*) {declaration}* {FORM}*
package: lisp
file: builtin.l
ローカルな変数を定義してフォームを評価します。

seealso: let*
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

let*

type: Special Form
arguments: let* ({VAR|(VAR [VALUE])}*) {declaration}* {FORM}*
package: lisp
file: builtin.l
letとよく似ています。letと異なり、VARの初期化に先に定義した他のVARを参照
することが可能です。

使用例:
  ;;; letとlet*の違い
  (setq Y 2)
  => 2
  (let (X (Y 1) (Z Y)) (list X Y Z))
  => (nil 1 2)
  (let* (X (Y 1) (Z Y)) (list X Y Z))
  => (nil 1 1)

seealso: let
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

make-list-from-keyword-table

type: Function
arguments: make-list-from-keyword-table HASH
package: editor
file: kwd.l
キーワードハッシュテーブルから補完用のリストを作成します。

  HASH:キーワードハッシュテーブル(*xxxx-keyword-hash-table*)を指定

使用例:
  ;;; CSSのキーワードハッシュテーブルを元に
  ;;; 補完用リストを作成して、do-completionする。
  (defun css-completion ()
    (interactive)
    (or *css-completion-list*
        (setq *css-completion-list* (make-list-from-keyword-table *css-keyword-hash-table*))
        (return-from css-completion nil))
    (let ((opoint (point)))
      (when (skip-syntax-spec-backward "w_")
        (let ((from (point)))
          (goto-char opoint)
          (do-completion from opoint :list-ignore-case *css-completion-list*)))))

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

makunbound

type: Function
arguments: makunbound SYMBOL
package: lisp
file: builtin.l
指定されたシンボルの値からの束縛を解消します。
これ以降boundpはnilを返すようになります。値と関数定義の束縛は独立してい
るので、makunboundをしてもfboundpの結果は変わりません。

使用例:
  ;;; 束縛を解消してみる。
  (set 'foo 2)          => 2
  (boundp 'foo)         => t
  (makunbound 'foo)     => foo
  (boundp 'foo)         => nil

seealso: boundp
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

mode-name

type: BufferLocal
package: editor
モードの名前を格納しているローカル変数です。
?mode-nameとbuffer-modeは必ずローカル変数になるのでしょうか?

seealso: buffer-mode
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

multiple-value-bind

type: Special Form
arguments: multiple-value-bind ({VAR}*) VALUES-FORM {declaration}* {FORM}*
package: lisp
file: builtin.l
フォームが返す多値を受け取ります。広井さんの"xyzzy Lisp Programming"の
解説が分かり易いので掲載の許可を頂きました。以下を参照して下さい。

--- 引用開始  ---
複数の値を受け取るには、マクロ multiple-value-bind を使うと簡単です。 

multiple-value-bind (&rest vars) values-form &rest form

multiple-value-bind は、多値を返す関数 values-form を評価し、その結果を 
vars で定義した変数にセットします。変数は局所変数として設定されるので、
multiple-value-bind を実行している間だけ有効です。簡単な例を示しましょう。
Common Lisp には、整数でない値を整数に変換する関数 floor, ceiling, 
truncate, round が定義されています。これらの関数は2つの値(多値)を返します。

  (truncate 10 3)
  => 3

  (multiple-value-bind
  (q r)
  (truncate 10 3)
  (format nil "商 ~D, 余り ~D~%" q r))
  => "商 3, 余り 1"

関数 truncate は割り算を行って商と余りを返します。ふつうに truncate を呼
び出すと商を返すだけですが、multiple-value-bind を使うと、商のほかに余り
も受け取ることができます。q と r は truncate が返す値を受け取る変数です。
次に、truncate を評価して結果を変数にセットします。あとは、残りの form 
を順番に評価していきます。 multiple-value-bind は最後に評価した form の
値を返します。

もしも、返される値よりも変数の個数が多い場合、残りの変数には nil がセッ
トされます。逆に、返される値が変数よりも多い場合、余分な値は捨てられます。
次の例を見てください。

  (multiple-value-bind (q)
  (truncate 10 3)
  (list q))
  => (3)
  
  (multiple-value-bind (q r s)
  (truncate 10 3)
  (list q r s))
  => (3 1 nil)

最初の例では、変数 q しか定義されていないので、 q には商がセットされます
が余りは捨てられます。次の例では、変数 s が定義されていますが、truncate 
は2つの値しか返さないので、 s には nil がセットされます。
--- 引用終了 ---

seealso: values
seealso: multiple-value-list
seealso: multiple-value-setq
Link: http://www.geocities.jp/m_hiroi/
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

multiple-value-list

type: Macro
arguments: multiple-value-list FORM
package: lisp
file: evalmacs.l
関数が返した多値をリストで返します。

使用例:
  (defun foo () (values 1 2 3))
  => foo
  (foo)
  => 1
     2
     3
  (multiple-value-list (foo))
  => (1 2 3)

seealso: values
seealso: multiple-value-call
seealso: multiple-value-bind
seealso: multiple-value-setq
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

multiple-value-setq

type: Special Form
arguments: multiple-value-setq VARIABLES FORM
package: lisp
file: builtin.l
返された多値を個々の変数に設定します。
変数の個数よりもフォームが返した値の数が多いときには余った分は捨てられま
す。少ない場合には、足りない分だけnilが設定されます。

  VARIABLES : 変数のリスト
  FORM      : 評価するフォーム

使用例:
  ;;; valuesで多値を返した場合
  (setq a (values 1 2)) => 1
  a                     => 1
  (multiple-value-setq (a b) (values 1 2))
                        => 1
  a                     => 1
  b                     => 2

seealso: multiple-value-bind
seealso: multiple-value-list
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

need-not-save

type: BufferLocal
package: editor
保存する必要があるかどうかを設定します。
個々のバッファ毎や特定のモードだけしたくないのであれば、使用例の様にロー
カル変数にします。例えば、*scratch*の様に書き捨てたりするバッファでは、
保存の必要はないので、tになっています。

  t     保存の必要はない
  nil   保存する

使用例:
  ;;; 現在のバッファは保存の必要はなし。
  (make-local-variable 'need-not-save)
  => t
  (setq need-not-save t)
  => t

seealso: need-buffer-save-p
seealso: setup-temp-buffer
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

nil

type: Variable
package: lisp
偽を表す定数です。

seealso: t
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

nth-value

type: Macro
arguments: nth-value N FORM
package: lisp
file: evalmacs.l
フォームが返す多値の N 番目を返します。

  N    : リストのインデックスを指定します。0を基底とします。
  FORM : 要素を返すフォームです。

N が多値の数より多い場合は nil を返します。 N が負数であればエラーを
返します。

使用例:
  (nth-value 1 (values 1 2 3 4))
  => 2
  (nth-value 10 (values 1 2 3 4))
  => nil
  (nth-value -3 (values 1 2 3 4))
  => 範囲外の値です: -3

備考:
  xyzzy 0.2.2.239 から利用可能です。

seealso: nth
seealso: nthcdr
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

post-buffer-modified-hook

type: Variable
package: editor
バッファが修正されたときに実行されます。

設定された関数は以下の5引数で呼び出されます。
  BUFFER    : 修正されたバッファ
  OPERATION : 修正された操作の種類
               :insert  文字の挿入
               :delete  文字の削除
               :modify  修正(downcase-wordなど)
  FROM      : 開始位置のポイント
  TO        : 終了位置のポイント
              OPERATIONが:deleteの場合はFROMとTOは同じ値になります。
  UNDO-P    : 修正された状況
               undo     undo
               redo     redo
               nil      その他

注意:
  enable-post-buffer-modified-hookでフックを有効にしないと実行されません。
  対話的でなくても実行されます。
  同じバッファに修正を行うとread-only-bufferエラーになります。
  なんらかのエラーが発生するとフックが無効になります。
  ウィンドウ・バッファを削除したり、
  戻るときにウィンドウ・バッファが切り替わってたりすると、
  きっと良くないことが起こるので、あまり無茶なことはしない方が無難です。

使用例:
  (enable-post-buffer-modified-hook t)
  (defun buffer-modified-hook (buffer operation from to undo-p)
    (message "ope:~A  undo:~A from:~d to:~d" operation undo-p from to))
  (add-hook 'post-buffer-modified-hook 'buffer-modified-hook)

seealso: enable-post-buffer-modified-hook
seealso: post-buffer-modified-hook-enabled-p
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

post-buffer-modified-hook-enabled-p

type: Function
arguments: post-buffer-modified-hook-enabled-p &optional BUFFER
package: editor
file: builtin.l
バッファでpost-buffer-modified-hookが有効かを判定します。
[xyzzy:06354]を参照
xyzzy 0.2.1.186〜 

seealso: enable-post-buffer-modified-hook
seealso: post-buffer-modified-hook
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

proclaim

type: Function
arguments: proclaim DECL-SPEC
package: lisp
file: typespec.l
変数をスペシャル変数にします。
declare との違いは、関数であるため引数が評価されることと、効果が大域的で
ある点です。

以下の形で使用します。

  (proclaim '(special var1 var2...))

xyzzy では special 以外の指定をしても効果はありません。

seealso: declaim
seealso: declare
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

psetq

type: Macro
arguments: psetq {VAR FORM}*
package: lisp
file: evalmacs.l
変数に値を設定します。

  (psetq 変数1 値1 変数2 値2 ... 変数N 値N)

上記の様に変数と値の組を任意の数だけ並べることができます。 

setqと似ていますがsetqが頭から順に変数に値を設定していくのに対し、psetq
は値を全て評価した上で設定します。

使用例:
  ; psetq の場合
  (let ((from 1)
        (to 100))
    (psetq from to to from)
    (values from to))
  =>100
  =>1

  ; setq の場合
  (let ((from 1)
        (to 100))
    (setq from to to from)
    (values from to))
  =>100
  =>100

seealso: setq
seealso: psetf
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

quote

type: Special Form
arguments: quote OBJECT
package: lisp
file: builtin.l
OBJECTを評価せずに返します。
single quoteで代用されます。

使用例:
  ;;; quoteと'を使ってみる。
  (quote x)             => x
  'x                    => x
  (eq (quote x) 'x)     => t

seealso: ``'(backquote)
seealso: function
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

register-history-variable

type: Function
arguments: register-history-variable VAR
package: editor
file: history.l
すでに定義された変数 VAR をヒストリ変数に登録します。
ファイルに書き込まれるため、変数の内容は readable である必要があります。
readable であるとは、具体的に言うと「文字、文字列、数値、シンボルと
それらのリストで構成されるデータ」のことです。
  VAR : ヒストリ変数に登録する変数のシンボル、もしくはそれらのリスト

seealso: define-history-variable
seealso: unregister-history-variable
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

rotatef

type: Macro
arguments: rotatef {PLACE}*
package: lisp
file: setf.l
引数として与えられた値の格納場所の内容をローテーションさせます。

        ┌a ┐  ┌b ┐  ┌c ┐
実行前:│ 1│  │ 2│  │ 3│
        └┬┘  └┬┘  └┬┘
      ┌─┘  ┌─┘  ┌─┘
   (*)┘  ┌─┘  ┌─┘  ┌─(*)
          ↓      ↓      ↓
        ┌a ┐  ┌b ┐  ┌c ┐
実行後:│ 2│  │ 3│  │ 1│
        └─┘  └─┘  └─┘
使用例:
  ;;; a b cに数値を入れてrotatefする。
  (setq a 1 b 2 c 3)    => 3
  (list a b c)          => (1 2 3)
  (rotatef a b c)       => 1
  (list a b c)          => (2 3 1)

seealso: setf
seealso: shiftf
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

set

type: Function
arguments: set SYMBOL VALUE
package: lisp
file: builtin.l
シンボルの値を設定します。
setq と違って局所変数には影響を与えません。

  SYMBOL : シンボル名
  VALUE  : 設定する値

使用例:
  ;;; foo というシンボルを束縛してみる
  (boundp 'foo)         => nil
  (set 'foo 2)          => 2
  (boundp 'foo)         => t
  foo                   => 2
  ;;; 局所変数には影響しない
  (let ((foo 1))
    (set 'foo 2) foo)   => 1

seealso: setq
seealso: symbol-value
seealso: makunbound
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

set-default

type: Function
arguments: set-default SYMBOL VALUE
package: lisp
file: builtin.l
この関数は、ただ 1つの symbol と 1 つの value のみを許す点と、その両方を
評価する点とを除き setq-default と同じです (setq-default 参照)。

使用例:
  (set-default (car '(a b c)) 23)
  => 23

seealso: setq-default
seealso: set
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

set-variable

type: Function
arguments: set-variable VAR
package: editor
file: cmds.l
変数 VAR をプロンプトから入力した値に設定します。[C-x a]
VAR の値が文字列なら文字列として、それ以外なら S 式として入力を読み取ります。

VAR が boundp でないとエラーになります。

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

setf

type: Macro
arguments: setf {PLACE NEW-VALUE}*
package: lisp
file: setf.l
このマクロは、変数にアクセスし、その値を変更するために使われます。従来用
いられてきたsetqよりも汎用的であり、setqと全く置き換えて使用することがで
きます。PLACEは、アクセスしようとするデータオブジェクトのある場所を指し、
NEW-VALUEを評価した値がその場所に書き込まれます。

setfは、いくつでもPLACEやNEW-VALUEの対でも受け付けます。そして、同時にで
はなく、順番に値を割り当てます。つまり、最初の引数の対は、二番目の対が評
価される前に評価され、PLACEによって示される場所に値が書き込まれています。
このように、二番目の引数の対は、最初の対の評価によって割り当てられた値を
使うことが可能です。setfは、最後に評価された引数の対によって割り当てられ
た値、あるいは、まったく引数が与えられなかった場合は、nilを返します。

PLACEの形式は以下のどのようなものも可能です:

(1)変数名(レキシカル変数でもスペシャル変数でもよい)

  (setf hoge 1); 変数hogeに1を代入する
  => 1
  hoge
  => 1

(2)アクセス関数
 * 構造体(構造体名+変数)

  (defstruct foo a b c); 構造体fooを宣言する
  => #<structure-definition: foo>
  (setf hoge (make-foo)); hogeに空のfoo構造体を代入する(ここのsetfはsetqでもよい)
  => #S(foo a nil b nil c nil)
  (setf (foo-a hoge) 10); hogeのスロットaに10を代入する
  => 10
  hoge
  => #S(foo a 10 b nil c nil)

 * 配列(aref, svref, fill-pointer)

  (setf hoge (make-array 3)); hogeに空のベクタを代入する(ここのsetfはsetqでもよい)
  => #(nil nil nil)
  (setf (aref hoge 1) 5); hogeベクタの2番目の数値を5にする
  => 5
  hoge
  => #(nil 5 nil)

 * リスト(car, cdr, first, rest, etc...)

  (setf hoge '("a" "b" "c"))
  => ("a" "b" "c")
  (setf (car (cdr hoge)) "d")
  => "d"
  hoge
  =>("a" "d" "c")

 * 属性リスト(get, getf, symbol-plist)

  (setf (get 'Japan 'language) "Japanese")
  => "Japanese"
  (setf (get 'Japan 'population) 120000000)
  => 120000000
  (symbol-plist 'Japan)
  => (population 120000000 language "Japanese")

 * その他(symbol-value, gethash, symbol-function, documentation, macro-function)

seealso: setq
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

setq

type: Special Form
arguments: setq {VAR FORM}*
package: lisp
file: builtin.l
変数に値を設定します。

  (setq 変数1 値1 変数2 値2 ... 変数N 値N)

上記の様に変数と値の組を任意の数だけ並べることができます。

  (setq foo '(1 2 3)) = (set 'foo '(1 2 3))

使用例:
  ;;; setとsetqで同じことをしてみる。
  (set 'foo '(2 3 4))   => (2 3 4)
  foo                   => (2 3 4)
  (setq foo '(1 2 3))   => (1 2 3)
  foo                   => (1 2 3)

seealso: setf
seealso: psetq
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

setq-default

type: Macro
arguments: setq-default VAR VAL
package: editor
file: misc.l
シンボルがローカルでない場合のデフォルトの値を設定します。

この関数は、各 symbol のデフォルト値を、(それに対応する) value に設定し
ます。(symbol は評価しませんが) value は評価します。最初の value を返し
ます。 

デフォルト値は、固有のバッファローカル値を持たないバッファで見られます。 

カレントバッファで symbol がバッファローカルでない場合、これは (この)カ
レントバッファで setq を行なうのと同じことになります。 symbol がカレント
バッファでバッファローカルである場合、カレントバッファで見える値ではなく、
他のバッファがまだバッファローカルな値を持たない場合にそこで見える値を設
定します。

使用例:
  (make-variable-buffer-local 'local)
  => local
  ;; バッファ foo 中:
  (setq local 'foo)
  => foo
  ;; バッファ bar 中:
  local
  => nil
  (setq-default local 'default)
  => default
  local
  => default
  (setq local 'bar)
  => bar
  ;; バッファ baz 中:
  local
  => default
  ;; バッファ foo 中:
  (setq local 'foo)
  => foo
  (default-value 'local)
  => default

seealso: default-value
seealso: set-default
seealso: make-local-variable
seealso: defvar-local
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

shiftf

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
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

si:*paste-hook*

type: Variable
package: system
クリップボードから貼り付けるときに実行されます。

seealso: paste-from-clipboard
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

special

type: Misc
package: lisp
declare をごらんください。

seealso: declare
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

special-form-p

type: Function
arguments: special-form-p SYMBOL
package: lisp
file: builtin.l
シンボルが特殊形式かどうかを返します。

  SYMBOL : 判定するシンボル

戻り値
  nil      シンボルは特殊形式ではない。
  non-nil  シンボルは特殊形式

  ; 特殊形式を書き出してみる
  (do-all-symbols (i "end")
    (and (special-form-p i)
         (format t "~A~%" i)))
  interactive
  save-restriction
  save-excursion
  save-window-excursion
  *byte-code
  macrolet
  setq
  throw
  return-from
  progn
  let*
  go
  labels
  if
  multiple-value-call
  unwind-protect
  multiple-value-setq
  catch
  tagbody
  eval-when
  let
  multiple-value-bind
  block
  function
  quote
  multiple-value-prog1
  flet
  =>"end"

[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

symbol-function

type: Function
arguments: symbol-function SYMBOL
package: lisp
file: builtin.l
シンボルが束縛された関数定義を返します。
fletなどで定義したローカルの関数定義は参照できません。

  SYMBOL : 関数定義を取得するシンボル名

使用例:
  ;;; 関数定義の取得
  (symbol-function 'foo)
  => 関数が定義されていません: foo
  (defun foo (x) (* x 2))
  => foo
  (symbol-function 'foo)
  => #<lexical-closure: foo>

seealso: symbol-value
seealso: function
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

t

type: Variable
package: lisp
真を表す定数です。

seealso: nil
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

title-bar-format

type: Variable
package: editor
タイトルバーのフォーマットを設定します。

使用例:
  (setq title-bar-format "--%*- %b (%M) [%k:%l] %P %f")

パラメタ:
  %*    変更あり          : **
        書込禁止          : %-
        変更あり・書込禁止: %*
        それ以外          : --
  %#*   変更あり: *
        変更なし: (空白) 
  %r    書込可  : (空白)
        書込禁止: % 
  %#r   書込可        : (空白)
        書込禁止      : %
        不完全バッファ: # 
  %p    プログラム名 
  %v    バージョン 
  %$    プロセスID
  %h    ホスト名 
  %#h   @ホスト名 
  %b    バッファ名 
  %f    File: ファイル名 
  %#f   ファイル名 
  %F    File: ファイル名。ファイル名がなければバッファ名 
  %#F   ファイル名。ファイル名がなければバッファ名 
  %M    モード(マイナーモード含む) 
  %m    モード 
  %k    エンコーディング 
  %l    改行コード 
  %!    xyzzyが管理者として実行されている場合は "管理者: "

備考:
  モードラインのフォーマットとほぼ同様ですが、
  %i, %P, %/ はタイトルバーでは設定できません。

備考:
  %$ は xyzzy 0.2.2.236 から利用可能です。
  %! は xyzzy 0.2.2.247 から利用可能です。

seealso: mode-line-format
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

unregister-history-variable

type: Function
arguments: unregister-history-variable VAR
package: editor
file: history.l
変数をヒストリ変数の登録から削除します。

seealso: define-history-variable
seealso: register-history-variable
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

values

type: Function
arguments: values &rest ARGS
package: lisp
file: evalmacs.l
多値で値を返します。

C言語では関数は1つの値しか返すことができませんが、Common Lispでは複数の
値を返す事ができます(リストとは違います)。これを多値(関数)と呼びます。
複数の値を返したい時は、 (values 値1 値2 ..)という構文を使います。

多値関数を呼び出す場合には、複数の戻り値を受け取れるように 
multiple-value-bind または multiple-value-listを使って受け取ります。

互換性:
  Common Lispとxyzzyにはあり。
  muleにはなさそう。

seealso: values-list
seealso: multiple-value-bind
seealso: multiple-value-list
seealso: multiple-value-setq
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

values-list

type: Function
arguments: values-list LIST
package: lisp
file: builtin.l
指定されたリストを多値として返します。

  (values-list '(a b c)) == (values a b c)
  (values-list list) == (apply #'values list)

seealso: values
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]

wild-pathname-p

type: Function
arguments: wild-pathname-p PATHNAME
package: lisp
file: builtin.l
ワイルドカード指定されたパスかどうかを返します。

  t     ワイルドカード指定されたパスです。
  nil   ワイルドカード指定されていません。

使用例:
  ;;; ワイルドカードかどうかを調べてみる。
  (wild-pathname-p "site-lisp/*.l")
  => t

seealso: *brackets-is-wildcard-character*
seealso: pathname-match-p
[ Intro | 目次 | 索引 | 目的別 | 変数と定数 ]