[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
バッファ(buffer)は, 編集するテキストを収めている Lispオブジェクトです. バッファは, 訪問しているファイルのテキストを保持するために使われますが, ファイルを訪問していないバッファもあります. 一度に複数のバッファが存在してかまいませんが, ある時点ではたった1つのバッファがカレントバッファ (current buffer)として区別されます. ほとんどの編集コマンドは, カレントバッファの内容に作用します. カレントバッファを含む各バッファは, ウィンドウに表示されることも されないこともあります.
26.1 バッファの基本 | What is a buffer? | |
26.2 カレントバッファ | Designating a buffer as current so primitives will access its contents. | |
26.3 バッファ名 | Accessing and changing buffer names. | |
26.4 バッファファイル名 | The buffer file name indicates which file is visited. | |
26.5 バッファの変更 | A buffer is modified if it needs to be saved. | |
26.6 更新時刻の比較 | Determining whether the visited file was changed “behind Emacs’s back”. | |
26.7 読み出し専用バッファ | Modifying text is not allowed in a read-only buffer. | |
26.8 バッファリスト | How to look at all the existing buffers. | |
26.9 バッファの作成 | Functions that create buffers. | |
26.10 バッファの削除 | Buffers exist until explicitly killed. | |
26.11 間接バッファ | An indirect buffer shares text with some other buffer. |
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Emacsの編集においてバッファとは, 異なる名前を持ち編集可能なテキストを保持するオブジェクトです. バッファは, Lispプログラムには特別なデータ型として見えます. バッファの内容は拡張可能な文字列であると考えることができます. つまり, バッファのどの部分ででも挿入や削除を行えるのです. See section テキスト.
Lispのバッファオブジェクトには, さまざまな情報が含まれています. 変数を介してプログラマが直接参照できる情報もあれば, 特別目的の関数のみを介して参照できる情報もあります. たとえば, 訪問しているファイルの名前は, 変数を介して直接参照できますが, ポイントの値は基本関数を介してのみ参照できます.
直接参照可能なバッファに固有の情報は,
バッファローカル(buffer-local)な変数束縛,
つまり, 特定のバッファでのみ有効な変数に保持されています.
この機能により, 各バッファでは特定の変数の値を優先できます.
ほとんどのメジャーモードでは, このようにして,
fill-column
やcomment-column
などの変数を優先させます.
バッファローカルな変数とそれらに関する関数について詳しくは,
バッファローカルな変数を参照してください.
バッファで訪問しているファイルに関する関数や変数については, ファイルの訪問とバッファの保存を参照してください. ウィンドウにバッファを表示することに関する関数や変数については, バッファとウィンドウを参照してください.
この関数は, objectがバッファであればt
を返し,
さもなければnil
を返す.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
一般に, Emacsセッションには多くのバッファがあります. いつの時点でも, それらの1つをカレントバッファ (current buffer)として区別します. バッファ内のテキストを検査したり変更する基本関数は 暗黙のうちにカレントバッファに作用するため, ほとんどの編集はカレントバッファに対して行われます (see section テキスト). 通常, スクリーン上で選択されたウィンドウに表示されているバッファが カレントバッファですが, つねにそうとは限りません. Lispプログラムでは, スクリーン上の表示は変えずに, 任意のバッファの内容を操作するために 一時的に当該バッファをカレントバッファにできます.
Lispプログラムでカレントバッファを指定するには,
set-buffer
を呼び出します.
新たに指定し直すまで指定したバッファがカレントバッファであり続けます.
編集コマンドがエディタコマンドループへ戻ると,
コマンドループは, 混乱を避けるために, 選択されているウィンドウに
表示されているバッファをカレントバッファとします.
つまり, Emacsがコマンドを読むときにカーソルがあるバッファが
コマンドが適用されるバッファです.
(See section コマンドループ. )
したがって, set-buffer
は,
ユーザーが編集できるように別のバッファへ切り替える方法にはなりません.
これには, ウィンドウへのバッファの表示で述べている関数を使う必要があります.
しかし, 別のカレントバッファに替えるLisp関数では,
コマンドループがカレントバッファを
あとで戻すということに依存してはいけません.
Emacs Lispで書かれた編集コマンドは, コマンドループに加えて
別のプログラムからも呼ばれます.
サブルーティンがカレントバッファを替えないほうが
(それがサブルーティンの目的でなければ),
呼び出し側にとっては便利です.
したがって, 関数の実行が終るともとのカレントバッファに戻す
フォームsave-current-buffer
や
save-excursion
(see section エクスカージョン)の内側で,
普通はset-buffer
を使います.
例として, (説明文字列を簡略にして)コマンドappend-to-buffer
のコードを示します.
(defun append-to-buffer (buffer start end) "Append to specified buffer the text of the region. …" (interactive "BAppend to buffer: \nr") (let ((oldbuf (current-buffer))) (save-current-buffer (set-buffer (get-buffer-create buffer)) (insert-buffer-substring oldbuf start end)))) |
この関数では, ローカル変数を束縛してカレントバッファを記録し,
save-current-buffer
でそれがカレントバッファに戻るようにしています.
つぎに, set-buffer
で指定したバッファをカレントバッファにします.
最後に, insert-buffer-substring
でもとのカレントバッファから
指定された(いまはカレント)バッファに文字列をコピーします.
内容を付加したバッファがどれかのウィンドウに表示されていると, つぎに表示を更新したときに変更されたテキストが表示されます. それ以外では, スクリーン上でただちには変更を見ることはできません. コマンドの実行中にはバッファが一時的にカレントバッファになりますが, それによりそのバッファが表示されるわけではありません.
バッファローカルな束縛を持つ変数を(let
や関数の引数で)
ローカルに束縛する場合には, ローカルな束縛の有効範囲の開始時と終了時には,
同じバッファが必ずカレントバッファであるようにします.
さもないと, あるバッファでは変数を束縛し,
別のバッファではその束縛を解除してしまうことがあります.
これには2つの方法があります.
単純な場合には, 束縛の有効範囲内で
カレントバッファが替わらないを確認します.
さもなければ, save-current-buffer
やsave-excursion
を使って,
始めにカレントバッファであったバッファが,
変数束縛が解除されるときにはつねにカレントバッファであるようにします.
set-buffer
でもとのカレントバッファに戻すのでは信頼性がありません.
正しくないバッファがカレントバッファであるときに
中断が起きると戻せないからです.
してはいけないことをつぎに示します.
(let (buffer-read-only (obuf (current-buffer))) (set-buffer …) … (set-buffer obuf)) |
つぎのようにsave-current-buffer
を使えば,
通常の評価に加えて, 中断, エラー, throw
も扱えます.
(let (buffer-read-only) (save-current-buffer (set-buffer …) …)) |
この関数はカレントバッファを返す.
(current-buffer) ⇒ #<buffer buffers.texi> |
この関数は, buffer-or-nameをカレントバッファにする. この関数は現在選択されているウィンドウやその他のウィンドウに 当該バッファを表示しないので, ユーザーが当該バッファを見られるとは限らない. しかし, Lispプログラムはいずれにしても当該バッファを操作できる.
この関数はbuffer-or-nameで指定されるバッファを返す. buffer-or-nameが既存のバッファを指定しなければ, エラーを通知する.
マクロsave-current-buffer
は,
カレントバッファの識別子を保存し, フォームbodyを評価し,
最後にもとのカレントバッファに戻す.
戻り値は, bodyの最後のフォームの値である.
throw
やエラー(see section 非ローカル脱出)による異常終了であっても
カレントバッファは戻される.
save-current-buffer
から抜けるときに,
もとのカレントバッファとして使われていたバッファが削除されていると,
もちろん, カレントバッファにはならない.
そのかわりに, 抜けるまえにカレントバッファであったバッファが
カレントバッファであり続ける.
マクロwith-current-buffer
は,
カレントバッファの識別子を保存し,
bufferをカレントバッファにし, フォームbodyを評価し,
最後にもとのカレントバッファに戻す.
戻り値は, bodyの最後のフォームの値である.
throw
やエラー(see section 非ローカル脱出)による異常終了であっても
カレントバッファは戻される.
マクロwith-temp-buffer
は,
一時的なバッファをカレントバッファとして
フォームbodyを評価する.
カレントバッファの識別子を保存し,
一時的なバッファを作成してそれをカレントバッファにし,
フォームbodyを評価し,
最後にもとのカレントバッファに戻すとともに一時的なバッファを削除する.
戻り値は, bodyの最後のフォームの値である.
最後のフォームとして(buffer-string)
を使えば,
一時的なバッファの内容を返せる.
throw
やエラー(see section 非ローカル脱出)による異常終了であっても
カレントバッファは戻される.
ファイルへの書き出しのwith-temp-file
も参照してください.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
各バッファには, 文字列で一意な名前があります. バッファに作用するほとんどの関数は, 引数としてバッファかバッファ名を受け付けます. buffer-or-nameという名前の引数はこの種のものであり, 当該引数が文字列でもバッファでもないとエラーを通知します. bufferという名前の引数は 実際のバッファオブジェクトである必要があり, 名前ではだめです.
短命で一般にはユーザーが関心を示さないバッファの名前は空白で始まり,
コマンドlist-buffers
やbuffer-menu
はそれらを表示しません.
さらに, 空白で始まる名前のバッファでは,
アンドゥ情報の記録も最初は禁止してあります.
アンドゥを参照してください.
この関数は, bufferの名前を文字列で返す. bufferを指定しないと, デフォルトはカレントバッファである.
buffer-name
がnil
を返す場合,
bufferが削除されたことを意味する.
see section バッファの削除.
(buffer-name) ⇒ "buffers.texi" (setq foo (get-buffer "temp")) ⇒ #<buffer temp> (kill-buffer foo) ⇒ nil (buffer-name foo) ⇒ nil foo ⇒ #<killed buffer> |
この関数は, カレントバッファをnewnameと改名する. newnameが文字列でなかったり, 当該名のバッファがすでに存在していると, エラーを通知する. 関数はnewnameを返す.
通常, newnameがすでに使われていると,
rename-buffer
はエラーを通知する.
しかし, uniqueがnil
以外であると,
newnameを未使用な名前に修正する.
対話的に呼び出した場合, 数値前置引数を指定すると
uniqueはnil
以外になる.
このコマンドの1つの用途は, バッファ‘*shell*’を別の名前に改名して, 同じ‘*shell*’という名前で別のシェルを作れるようにすることである.
この関数は, buffer-or-nameで指定したバッファを返す.
buffer-or-nameが文字列であり,
そのような名前のバッファが存在しなければnil
を返す.
buffer-or-nameがバッファであればそれ自身を返す.
(これは有用ではないので, 普通, 引数は名前である. )
例を示す.
(setq b (get-buffer "lewis")) ⇒ #<buffer lewis> (get-buffer b) ⇒ #<buffer lewis> (get-buffer "Frazzle-nots") ⇒ nil |
バッファの作成の関数get-buffer-create
も参照.
この関数は, 新たなバッファ向けの一意な名前を返すが, バッファは作成しない. 名前はstarting-nameで始まり, ‘<…>’で囲った数を追加することで, どのバッファでも現在使っていない名前を作成する.
バッファの作成の関連する関数generate-new-buffer
を参照.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
バッファファイル名(buffer file name)とは,
当該バッファで訪問しているファイルの名前です.
バッファでファイルを訪問していないときには,
バッファファイル名はnil
です.
ほとんどの場面で, バッファ名は
バッファファイル名の非ディレクトリ部分と同じですが,
バッファファイル名とバッファ名は別のものであり個別に設定できます.
See section ファイルの訪問.
この関数は, bufferで訪問しているファイルの
絶対ファイル名を返す.
bufferがファイルを訪問していなければ,
buffer-file-name
はnil
を返す.
bufferを指定しないと,
デフォルトはカレントバッファである.
(buffer-file-name (other-buffer)) ⇒ "/usr/user/lewis/manual/files.texi" |
このバッファローカルな変数は,
カレントバッファで訪問しているファイルの名前を保持する.
あるいは, ファイルを訪問していなければnil
である.
これは恒久的にバッファローカルであり,
kill-local-variables
に影響されない.
buffer-file-name ⇒ "/usr/user/lewis/manual/buffers.texi" |
他のさまざまなことを行わずにこの変数の値だけを変更することは危険である.
通常, set-visited-file-name
(下記参照)を使うほうがよい.
バッファ名を変更するなどの重要でないことも行うが,
Emacsを混乱させないように本質的なことも行うからである.
このバッファローカルな変数は,
カレントバッファで訪問しているファイルの実名を保持する.
あるいは, ファイルを訪問していなければnil
である.
これは恒久的にバッファローカルであり,
kill-local-variables
に影響されない.
see section 実名.
このバッファローカルな変数は,
カレントバッファで訪問しているファイルの
ファイル番号とディレクトリ装置番号を保持する.
あるいは, ファイルを訪問していなければnil
である.
これは恒久的にバッファローカルであり,
kill-local-variables
に影響されない.
この値は, 通常, (filenum devnum)
の形のリストである.
この数の対により, システム上のすべての参照可能なファイルを一意に識別できる.
これらについてより詳しくは,
ファイルに関する他の情報の関数file-attributes
を参照.
この関数は, ファイルfilenameを訪問しているバッファを返す.
そのようなバッファが存在しなければnil
を返す.
引数filenameは文字列であり,
展開(see section ファイル名を展開する関数)してから
すべてのバッファの訪問しているファイル名と比較する.
(get-file-buffer "buffers.texi") ⇒ #<buffer buffers.texi> |
稀れな状況では, 複数のバッファが同じ名前のファイルを訪問している場合がある. そのような場合, この関数はバッファリストで最初にみつかったバッファを返す.
filenameが空でない文字列であると, この関数はカレントバッファで訪問しているファイルの名前を filenameに変える. (ファイルを訪問していないバッファでは, 当該バッファに訪問しているファイル名を指定する. ) バッファをつぎに保存すると, 指定した新たなファイルに保存される. このコマンドは, バッファに変更済みと印を付ける. 変更まえの訪問しているファイルの内容とバッファ内容が一致していたとしても (Emacsにとっては) バッファ内容はfilenameの内容と一致しないからである.
filenameがnil
だったり空文字列であると,
『ファイルを訪問していない』ことにする.
この場合, set-visited-file-name
は,
当該バッファではファイルを訪問していないと印を付ける.
通常, この関数は, 指定したファイルが既存の場合には
ユーザーに確認をとる.
no-queryがnil
以外であると, 確認をとらない.
along-with-fileがnil
以外であると,
それ以前に訪問していたファイルはfilenameと改名してあると仮定する.
関数set-visited-file-name
を対話的に呼び出すと,
ミニバッファでfilenameを問い合わせる.
このバッファローカルな変数は, 訪問しているファイル名を持たないバッファに対して, バッファ一覧において訪問しているファイル名を表示する部分に 表示する文字列を指定する. diredのバッファはこの変数を使う.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Emacsは, 各バッファごとに当該バッファのテキストを変更したかどうかを
記録する変更フラグ(modified flag)と呼ばれるフラグを保持しています.
バッファの内容が変わるたびにこのフラグはt
に設定され,
保存するたびにnil
に設定されます.
つまり, このフラグは未保存の変更があるかどうかを表します.
このフラグの値は通常モード行(see section モード行に使われる変数)に表示され,
保存(see section バッファの保存)と
自動保存(see section 自動保存)を制御します.
このフラグを明示的に設定するLispプログラムもあります.
たとえば, 関数set-visited-file-name
はこのフラグをt
に設定します.
ファイルを訪問してから変更していなくても,
バッファのテキストが新たな訪問しているファイルとは一致しないからです.
バッファの内容を変更する関数についてはテキストに述べてあります.
この関数は, 最後にファイルから読み込んだり保存してから
バッファbufferが変更されていればt
を返し,
さもなければnil
を返す.
bufferを指定しないとカレントバッファを調べる.
この関数は, flagがnil
以外であれば
カレントバッファは変更されていると印を付け,
nil
ならば未変更であると印を付ける.
この関数を呼び出した別の効果として,
カレントバッファのモード行を無条件に再表示する.
実際, 関数force-mode-line-update
はつぎのようにしている.
(set-buffer-modified-p (buffer-modified-p)) |
このコマンドは, カレントバッファを未変更であり 保存する必要がないと印を付ける. 前置引数を指定すると, バッファに変更されていると印を付け, 以降の適当な場面で保存される.
エコー領域にメッセージを表示するので,
プログラムからこの関数を使わないこと.
かわりにset-buffer-modified-p
を使う(上記).
この関数は, bufferの変更回数を返す.
変更回数はバッファを変更するたびに増やされる.
bufferがnil
であると(あるいは省略すると),
カレントバッファを使う.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ファイルを訪問してそのバッファで変更したとします. そのあいだに, ディスク上の当該ファイル自身も変更されたとします. ここでバッファを保存すると, ファイルの変更内容を上書きしてしまいます. たしかにこれを望む場合もあるでしょうが, 普通は重要な情報を失うことになります. そのため, Emacsは, ファイルに保存するまえに, 以下に述べる関数を用いてファイルの更新時刻を検査します.
この関数は, bufferに記録してある 訪問しているファイルの更新時刻と, オペレーティングシステムが記録している ファイルの実際の更新時刻を比較する. Emacsが当該ファイルを訪問したり保存してから 他のプロセスが当該ファイルに書いていない限り, 2つの時刻は同じはずである.
実際の更新時刻とEmacsに記録している更新時刻が同じならばt
を返し,
さもなければnil
を返す.
この関数は, カレントバッファで訪問しているファイルの 最終更新時刻の記録を破棄する. その結果, つぎにこのバッファを保存しようとしても, ファイルの更新時刻のと不一致を報告しない.
この関数は, set-visited-file-name
や
変更されたファイルを上書きしないためのテストを行わない例外的な場面で
呼び出される.
この関数は,
バッファに記録されているファイルの最終更新時刻を
(high . low)
の形のリストで返す.
(これはfile-attributes
が時刻を返すために使う形と同じである.
ファイルに関する他の情報を参照. )
この関数は, timeがnil
以外であるときには,
バッファに記録してあるファイルの最終更新時刻を
timeで指定された時刻にする.
さもなければ, 訪問しているファイルの最終更新時刻にする.
timeがnil
でないときには,
(high . low)
か(high low)
の形であること.
いずれの場合も, 2つの整数は時刻の16ビットを保持する.
この関数は, ファイルから普通に読み込んだのではないバッファや ファイル自体が明確な理由で変更された場合に有用である.
この関数は, ファイルfilenameを訪問している廃れたバッファを 変更しようとしたときにどのように処理すべきかをユーザーに問い合わせる ために用いる. 廃れたバッファ(obsolete buffer)とは, 未変更のバッファではあるが, 対応するディスク上のファイルが バッファの最終更新時刻よりも新しいものである. つまり, 別のプログラムが当該ファイルを変更した可能性があることを意味する.
ユーザーの応答に依存して, 関数は正常に戻る.
その場合, バッファは変更できる.
あるいは, データ(filename)
を付けて
エラーfile-supersession
を通知する.
その場合, バッファの変更は許されない.
この関数は, 適切な場面でEmacsが自動的に呼び出す. これを再定義することでEmacsをカスタマイズできるようにしている. 標準定義についてはファイル‘userlock.el’を参照.
ファイルロックのファイルロック機構も参照.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
バッファが読み出し専用(read-only)であると, スクロールしたりナロイングしてその内容を眺めることはできますが, その内容は変更できません.
読み出し専用バッファは, 2種類の場面で使われます.
ここでの目的は, バッファを編集してファイルに保存しようとしても それに失敗するか望ましくないことであることをユーザーに伝えることである. それにも関わらずバッファのテキストを変更したいユーザーは, 読み出し専用フラグをC-x C-qでクリアすれば編集できる.
これらのモードの特別なコマンドは,
それら自身がテキストを変更する場面では,
(let
で)buffer-read-only
にnil
を束縛したり,
inhibit-read-only
にt
を束縛する.
このバッファローカルな変数は,
バッファが読み出し専用であるかどうかを指定する.
この変数がnil
以外であると, バッファは読み出し専用である.
この変数がnil
以外であると,
読み出し専用バッファや読み出し専用文字を変更できる.
バッファ内の読み出し専用文字とは
(テキスト属性やオーバレイ属性の)
属性read-only
がnil
以外の文字である.
テキスト属性について詳しくは, see section 特別な意味を持つ属性.
重ね合わせとそれらの属性について詳しくは, see section オーバレイ.
inhibit-read-only
がt
であると,
すべての文字の属性read-only
は効果を失う.
inhibit-read-only
がリストであると,
文字の属性read-only
が(eq
で比較して)
リストのメンバであると効果を失う.
このコマンドは, カレントバッファが読み出し専用かどうかを変更する.
対話的な使用を意図しており, プログラムからは使わないこと.
プログラムの任意の箇所で, 読み出し専用フラグを
オンにしたいかオフにしたいかを読者は知っているはずであり,
そうすれば, 読者はbuffer-read-only
を
t
かnil
の正しい値に明示的に設定できる.
この関数は, カレントバッファが読み出し専用であると
エラーbuffer-read-only
を通知する.
カレントバッファが読み出し専用であるときに
エラーを通知する別の方法については, see section 対話的呼び出し.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
バッファリスト(buffer list)は,
すべてのバッファのリストです.
バッファを作成すると当該バッファはこのリストに追加され,
削除するとこのリストから取り除かれます.
リスト内のバッファの順序は, 各バッファが選択されているウィンドウに
どの程度最近に表示されたかを主な基準にしています.
バッファが選択されるとリストの先頭に移動し,
隠されると(下記のbury-buffer
を参照)末尾に移動します.
other-buffer
をはじめとするいくつかの関数が, この順序を使います.
ユーザーに表示するバッファ一覧もこの順序を反映しています.
Emacs基本バッファリストに加えて,
各フレームには独自のバッファリストがあります.
そのリストでは,
当該フレームでもっとも最近に選択されたバッファから順に
当該フレームで選択されたバッファが先にきます.
(この順番は, フレームのフレームパラメータbuffer-list
に入っている.
ウィンドウフレームのパラメータを参照. )
当該フレームで選択されたことがないバッファは,
Emacs基本バッファリストでの順にうしろに続きます.
この関数は, 空白で始まる名前のバッファを含めて, すべてのバッファを含んだバッファリストを返す. 要素は実際にバッファであり, それらの名前ではない.
frameがフレームであると,
この関数はフレームframeのバッファリストを返す.
frameがnil
であるとEmacs基本バッファリストを使う.
(buffer-list) ⇒ (#<buffer buffers.texi> #<buffer *Minibuf-1*> #<buffer buffer.c> #<buffer *Help*> #<buffer TAGS>) ;; ミニバッファの名前は空白で始まることに注意
(mapcar (function buffer-name) (buffer-list))
⇒ ("buffers.texi" " *Minibuf-1*"
"buffer.c" "*Help*" "TAGS")
|
buffer-list
が返すリストはbuffer-list
が構築したものであり,
Emacsの内部データ構造ではなく,
それを変更してもバッファの順序には影響しません.
フレーム独立なバッファリスト内のバッファ順序を変更するには,
つぎのような簡単な方法があります.
(defun reorder-buffer-list (new-list) (while new-list (bury-buffer (car new-list)) (setq new-list (cdr new-list)))) |
この方法を使えば, どんな順序でもリストに指定でき, しかも, バッファを失ったり正しくないバッファを 追加してしまう危険はありません.
フレームのバッファリストの順序や値を変更するには,
modify-frame-parameters
(see section フレームパラメータの参照)で,
フレームのフレームパラメータbuffer-list
に設定します.
この関数は, バッファリストからbuffer以外の最初のバッファを返す. 通常, 当該バッファは, bufferを除いて (frameか現在選択されているフレームで) もっとも最近に選択されたバッファである. 空白で始まる名前のバッファは完全に除外する.
bufferを指定しないと(あるいはバッファでないと),
other-buffer
は, 選択されているフレームのバッファリストの中から
可視フレームのどのウィンドウにも表示されていない最初のバッファを返す.
frameにnil
以外のパラメータbuffer-predicate
があると,
other-buffer
は当該述語を使って
どのバッファを考慮に入れるかを決定する.
各バッファについて当該述語を1回呼び出し,
その値がnil
であると当該バッファを無視する.
see section ウィンドウフレームのパラメータ.
visible-okがnil
であると,
other-buffer
は可視フレームのいずれかのウィンドウに
表示されているバッファを可能な限り返さないようにする.
visible-okがnil
以外であると,
バッファが表示されているかどうかは関係ない.
適当なバッファが存在しない場合には, バッファ‘*scratch*’を(必要ならば作成して)返す.
この関数は, バッファリストの他のバッファの順序は変えずに
buffer-or-nameを末尾に置く.
この結果, 当該バッファは, other-buffer
が返す候補としては
もっとも可能性が低くなる.
bury-buffer
は,
Emacsのフレーム独立なバッファリストに加えて,
各フレームのパラメータbuffer-list
も操作する.
したがって, 指定したバッファは,
(buffer-list frame)
と(buffer-list nil)
の
いずれの値でも最後になる.
buffer-or-nameがnil
であるか省略すると,
カレントバッファを最後尾に置くことを意味する.
さらに, 当該バッファが選択されているウィンドウに表示されていると,
そのウィンドウでは(other-buffer
で得られる)
別のバッファに切り替わる.
当該バッファが別のウィンドウにも表示されている場合,
その表示は替わらない.
すべてのウィンドウに表示している特定のバッファを置き換えるには,
replace-buffer-in-windows
を使う.
see section バッファとウィンドウ.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
本節では, バッファを作成するための2つの基本関数を説明します.
get-buffer-create
は, 指定した名前のバッファが
存在しなければバッファを作成します.
generate-new-buffer
は, つねに新たなバッファを作成し,
それに一意な名前を与えます.
バッファを作成するために読者が使える他の関数には,
with-output-to-temp-buffer
(see section 一時的な表示),
create-file-buffer
(see section ファイルの訪問)があります.
サブプロセスを開始してもバッファを作ります(see section プロセス).
この関数は, nameという名前のバッファを返す. その名前のバッファが存在すれば, 当該バッファを返す. さもなければ, 新たなバッファを作成する. バッファはカレントバッファにはならない. この関数は, どのバッファがカレントバッファであるかは変更しない.
nameが文字列でないとエラーを通知する.
(get-buffer-create "foo") ⇒ #<buffer foo> |
新たなバッファのメジャーモードは基本(fundamental)モードに設定される.
変数default-major-mode
は, より高いレベルで処理される.
see section メジャーモードの選択方法.
この関数は, 新たに作成した空のバッファを返すが, それをカレントバッファにはしない. nameという名前のバッファが存在しなければ, 新たなバッファの名前はnameである. その名前が使われている場合には, この関数は, nを整数として‘<n>’の形の接尾辞を nameに付加する. nを2から始めて順に使える名前を探す.
nameが文字列でないとエラーを通知する.
(generate-new-buffer "bar") ⇒ #<buffer bar> (generate-new-buffer "bar") ⇒ #<buffer bar<2>> (generate-new-buffer "bar") ⇒ #<buffer bar<3>> |
新たなバッファのメジャーモードは基本(fundamental)モードに設定される.
変数default-major-mode
は, より高いレベルで処理される.
see section メジャーモードの選択方法.
バッファ名の関連する関数generate-new-buffer-name
を参照.
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
バッファを削除するとは, Emacsに当該バッファの名前を忘れさせ, それが使っていた場所を他の目的に使えるようにすることです.
削除されたバッファを表すバッファオブジェクトは,
それを指すものが存在する限り存在し続けますが,
それをカレントバッファにしたり表示できないように特別な印が付いています.
削除されたバッファの識別子は残っているので,
異なる2つのバッファを削除しても,
eq
に関する限りそれらは区別できるのです.
カレントバッファやウィンドウに表示しているバッファを削除すると, そのかわりにEmacsは別のバッファを選択したり表示します. つまり, バッファを削除すると一般にはカレントバッファが 替わりうることを意味します. したがって, バッファを削除するときには, (削除するバッファがカレントバッファではないことがわかっていない限り) カレントバッファを替える可能性についてあらかじめ注意しておく必要があります. See section カレントバッファ.
複数の間接バッファの基底バッファであるバッファを削除すると, 間接バッファも自動的に削除されます.
削除されたバッファのbuffer-name
はnil
です.
これを使えばバッファが削除されているかどうか調べられます.
(defun buffer-killed-p (buffer) "Return t if BUFFER is killed." (not (buffer-name buffer))) |
この関数はバッファbuffer-or-nameを削除し,
当該バッファが使用していたすべてのメモリを他の目的に使えるように解放したり,
オペレーティングシステムに返すために解放する.
この関数はnil
を返す.
当該バッファをprocess-buffer
としているすべてのプロセスに
シグナルSIGHUP
を送る.
このシグナルは, 通常, プロセスを終了させる.
(SIGHUP
の基本的な意味は, 接続回線が切断されたである. )
see section プロセスの削除.
当該バッファがファイルを訪問していて, かつ, 未保存の変更があれば,
kill-buffer
は当該バッファを削除するまえにユーザーに確認をとる.
確認をとらないようにするには, kill-buffer
を呼び出すまえに
バッファの変更フラグをクリアしておく.
see section バッファの変更.
削除済みのバッファを削除してもなんの効果もない.
(kill-buffer "foo.unchanged") ⇒ nil (kill-buffer "foo.changed") ---------- Buffer: Minibuffer ---------- Buffer foo.changed modified; kill anyway? (yes or no) yes ---------- Buffer: Minibuffer ---------- ⇒ nil |
未保存の変更を確認したあとで, kill-buffer
は,
リストkill-buffer-query-functions
の関数を現れる順に
引数なしで呼び出す.
これらの関数が呼び出されるときには,
削除対象のバッファがカレントバッファである.
これらの関数でさまざまな非標準的な理由から
ユーザーの確認をとることが目的である.
いずれかがnil
を返すと, kill-buffer
はバッファを削除しない.
これは, kill-buffer
が問い合わせをすべて完了し
バッファを実際に削除する直前に実行されるノーマルフックである.
フック関数を実行するときには, 削除対象のバッファがカレントバッファである.
see section フック.
この変数が特定のバッファでnil
以外であると,
save-buffers-kill-emacs
とsave-some-buffers
に対して
ファイルを訪問しているバッファと同様に
当該バッファを保存する機会を与えるように指示する.
変数buffer-offer-save
に
設定すると自動的にバッファローカルになる.
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。