本節では、バッファを作成するための2つのプリミティブについて説明します。get-buffer-createは、指定された名前の既存バッファが見つからない場合にバッファを作成し、generate-new-bufferは常に新しいバッファを作成して一意の名前を付与します。
どちらの関数も、オプション引数 inhibit-buffer-hooks を受け付けます。これが
nil 以外の場合、作成されるバッファではフック kill-buffer-hook、kill-buffer-query-functions(バッファの破棄 を参照)、および buffer-list-update-hook(バッファリスト
を参照)が実行されません。これにより、ユーザーに提示されることも他のアプリケーションに渡されることもない内部バッファや一時バッファの動作が遅くなるのを防ぎます。
バッファを作成するために利用できるその他の機能には、with-output-to-temp-buffer(一時ディスプレイを参照)やcreate-file-buffer(ファイルの参照を参照)があります。また、サブプロセスを起動することでもバッファを作成できます(プロセスを参照)。
この関数は buffer-or-name という名前のバッファを返します。返されたバッファが現在のバッファになるわけではありません。この関数は現在のバッファを変更しません。
buffer-or-name
は文字列か、既存のバッファのいずれかである必要があります。文字列であり、かつ同名の有効なバッファが既に存在する場合、get-buffer-create
はそのバッファを返します。そのようなバッファが存在しない場合は、新しいバッファを作成します。buffer-or-name が文字列ではなくバッファである場合は、たとえ無効であってもそのまま返されます。
(get-buffer-create "foo")
⇒ #<buffer foo>
新規に作成されたバッファのメジャーモードは、ファンダメンタルモードに設定されます。(変数 major-mode のデフォルト値はより上位のレベルで処理されます。Emacs がメジャーモードを選択する仕組み
を参照してください。)名前がスペースで始まる場合、そのバッファでは初期状態でアンドゥ情報の記録が無効になります(アンドゥ を参照してください)。
この関数は、新しく作成された空のバッファを返しますが、それをカレントにはしません。バッファ名は、関数 generate-new-buffer-name に name
を渡すことで生成されます(バッファ名
を参照)。したがって、name
という名前のバッファが存在しない場合、それが新しいバッファの名前になります。その名前が既に使用されている場合は、name に n を整数とした ‘<n>’ 形式の接尾辞が付加されます。
name が文字列でない場合、エラーが報告されます。
(generate-new-buffer "bar")
⇒ #<buffer bar>
(generate-new-buffer "bar")
⇒ #<buffer bar<2>>
(generate-new-buffer "bar")
⇒ #<buffer bar<3>>
新しいバッファのメジャーモードはファンダメンタルモードに設定されます。変数 major-mode
のデフォルト値は、より上位のレベルで処理されます。Emacs
がメジャーモードを選択する仕組み を参照してください。