検索エンジンから来た人に注意このマニュアルは、Emacs ver. 19.x 向けのマニュアルを Mule 2.x の開発にあたり邦訳したものを、 電脳外道学会がミラーリングしているものであり、旧版製品パラノイアであるところの椅子人の趣味によるものです。しかしながら、現在の Emacs の主流は ver. 20 以降であり、ver 19.x と ver 20.x とでは、仕様の違いが少なからずあります。 したがって、一般的な Emacs ユーザーにとっては、
このマニュアルと実機の動作とが符合しない場合があります。
|
バックアップ・ファイルと自動セーブは、Emacsがクラッシュやユーザ自身のあ やまちがもたらす結果からユーザを守ろうとするのに使う二つの方法です。自動 セーブは、現在の編集セッションの初期の段階のテキストを保存します。バック アップ・ファイルは現在のセッション以前のファイルの内容を保存します。
バックアップ・ファイル(backup file)は、編集しているファイルの古い 内容のコピーです。Emacsはバッファを、読み込んだファイル(visited file)に 最初にセーブするときにバックアップ・ファイルを作ります。普通は、バックアッ プ・ファイルには現在の編集セッションの前のファイルの内容が入っていること になります。バックアップ・ファイルの内容は、通常は一度作られたら変更され ずに残ります。
バックアップは通常、読み込んだファイルを新しい名前に変更して作ります。読 み込んだファイルをコピーしてバックアップ・ファイルを作るように指定すること も可能です。この選択は複数の名前をもつファイルに関して違いがあります。ま た、編集しているファイルが元のオーナーの所有のままか、編集しているユーザ の所有になるかにも影響します。
デフォルトでは、Emacsは編集しているファイルそれぞれに一つのバックアップ・ ファイルを作ります。あるいは、番号付のバックアップを指定することもできま す。こうすると、新しいバックアップ・ファイルはそれぞれ新しい名前になりま す。古い番号つきバックアップは、もうこれ以上いらないと思ったときに消すこ とができますし、自動的に消すこともできます。
save-buffer
はバッファが最初にセーブされるときに
これを呼び出します。
nil
ならバックアップ・
ファイルは書き込まれています。そうでなければファイルは次のセーブ時にバッ
クアップする必要があります(バックアップがオンになっていれば)。これは常時
ローカルで、kill-local-variables
は効きません。
nil
なら、Emacsはそれぞれのファイルのバックアップをそれが最初にセー
ブされるときに作ります、ただしbackup-inhibited
がnil
(下記参
照)ならばです。
次の例は、make-backup-files
変数を`RMAIL'バッファの中だけで変
更して、ほかでは変更しない方法を示しています。これをnil
にすると、
Emacsは`RMAIL'ファイルのバックアップを作らなくなり、ディスク・スペー
スの節約になります。(このコードは`.emacs'ファイルに入れておくといい
でしょう。)
(add-hook 'rmail-mode-hook (function (lambda () (make-local-variable 'make-backup-files) (setq make-backup-files nil))))
nil
を返す場合はそのファイルはバックアップす
る必要がありません。そうでない場合はこの節のほかの変数によってバックアッ
プするかどうか、またその方法が決まります。
デフォルト値はこうです:
(lambda (name) (or (< (length name) 5) (not (string-equal "/tmp/" (substring name 0 5)))))
nil
の場合はバックアップを行ないません。この変数には、
読み込んだファイル名をbackup-enable-predicate
で試した結果が記録さ
れています。この変数は、読み込んだファイルにしたがってバックアップを抑制
するほかの仕組みが一緒に使っても大丈夫です。
たとえば、VCはバージョン管理システムで管理されているファイルのバッ
クアップが作られるのを防ぐためにこの変数を非nil
にセットします。
この変数は、主モードを変更しても変数の値が変わらないように常時ロー
カルになっています。主モードはこの変数をセットしてはいけません。代
わりにmake-backup-files
をセットすべきです。
Emacsがバックアップ・ファイルを作る方法は二つあります:
1番目の、名前を変更する方法がデフォルトです。
変数backup-by-copying
が非nil
なら2番目の方法、元のファイル
をコピーしてバッファの新しい内容を上書きする方法を使います。変数
file-precious-flag
が非nil
のときも同様の効果(本来の意味の副
作用としてですが)があります。See section バッファを保存する。
nil
なら、Emacsは常にバックアップ・ファイルをコピーによっ
て作ります。
以下の二つの変数が非nil
のときは、ある特殊な場合に2番目の方法が使わ
れることになります。ファイルがその特殊な場合に当てはまらない場合はファイ
ルの扱い方に何の影響もありません。
nil
なら、Emacsは複数の名前をもつファイル(ハード・リンク)
のバックアップをコピーによって作ります。
backup-by-copying
が非nil
なら常にコピーが使われるので、この
変数はbackup-by-copying
がnil
のときだけ意味があります。
nil
なら、Emacsは名前を変更するとオーナーやグループが
変わってしまうようなファイルのバックアップをコピーによって作ります。
名前を変更してもファイルのオーナーやグループに変化がないときは、すなわち ファイルがユーザーの所有で、グループがそこでユーザーがファイルを作成した ときのデフォルトと一致している場合、この値は何の影響も与えません。
backup-by-copying
が非nil
なら常にコピーが使われるので、この
変数はbackup-by-copying
がnil
のときだけ意味があります。
ファイルの名前が`foo'なら、その番号付バックアップ・バージョンの名前は `foo.~v~'になります。vはさまざまな整数で、こんな感じになり ます: `foo.~1~'、`foo.~2~'、`foo.~3~'、...、 `foo.~259~'など。
nil
never
番号付バックアップを使っていると、しまいにはたくさんのバックアップ・バー ジョンができてしまいます。そうなったらそれらを削除しなくてはなりません。 Emacsがこれを自動で行なうこともできますし、それらを削除するかどうかユー ザに問い合わせることもできます。
1、2、3、5と7の番号がついたバックアップがあり、これらの変数の値が両方と
も2なら、1と2の番号のバックアップを古いバージョンとして取っておき、5番と
7番を新しいバージョンとしてとっておきます。バックアップ・バージョン3は過
剰ということになります。関数find-backup-file-name
(see section バックアップ・ファイルの命名)は、どのバックアップ・バージョンを削除するか決定する役を引き受け
ますが、それ自身でそれらを削除することはありません。
nil
なら、ファイルをセーブするときに過剰なバックアップ・
バージョンを黙って削除します。そうでなければ、それらを削除するかどうかユー
ザに問い合わせます。
dired-clean-directory
)中で最新のバックアップ・バージョンをいくつ取っておくかを指定します。これは、新しいバックアップ・ファイルを作るときにkept-new-versions
が指定している動作とお
なじことです。デフォルト値は2です。
この節の関数を再定義することによってバックアップ・ファイルの名前をつけるや り方をカスタマイズできるようにすることを主な目的として説明します。一つを 変更したなら、多分残りも変更する必要があるでしょう。
nil
を返します。filenameという名前のファイルが存在する必要
はありません。この関数は名前をチェックするだけです。
(backup-file-name-p "foo") => nil (backup-file-name-p "foo~") => 3
この関数の標準の定義は以下のとおりです:
(defun backup-file-name-p (file) "Return non-nil if FILE is a backup file \ name (numeric or not)..." (string-match "~$" file))
したがって、この関数はファイル名が`~'で終っていれば非nil
値を
返します。(説明文字列の最初の行を二つの行に分割するのにバックスラッシュを
使っていますが、実際には1行になります。)
この簡単な式を独立した関数にしているのは、カスタマイズするときに再定義し やすくするためです。
この関数の標準の定義は以下のとおりです:
(defun make-backup-file-name (file) "Create the non-numeric backup file name for FILE. ..." (concat file "~"))
この関数を定義し直すことによって、バックアップ・ファイルの名前のつけ方を変
えることができます。以下の例では、チルダを後ろにつけるのに加えて`.'
を前につけるようにmake-backup-file-name
を定義し直しています:
(defun make-backup-file-name (filename) (concat "." filename "~")) (make-backup-file-name "backups.texi") => ".backups.texi~"
find-backup-file-name
はリストを返します。そのリス
トのCARが新しいバックアップ・ファイルの名前で、CDRが削除した方が
いいバックアップ・ファイルのリストです。
二つの変数kept-old-versions
とkept-new-versions
は、取ってお
くべきバックアップ・バージョンを決めます。この関数はこれらのバージョンを
取っておくために、返り値のCDRからこれらを除きます。See section 番号付バックアップ・ファイルの作成と削除。
この例では、`~rms/foo.~5~'が新しいバックアップ・ファイルに使う名前で、 `~rms/foo.~3~'が"過剰"バージョン、現時点で消すべきだと思われるバー ジョン、であることを示しています。
(find-backup-file-name "~rms/foo") => ("~rms/foo.~5~" "~rms/foo.~3~")
nil
を返します。
あるファイル比較コマンドは、ファイルをその最新のバックアップと自動的に比 較するためにこの関数を使います。
Emacsは読み込んだファイル全てを定期的にセーブします。これを自動セー ブ(auto-saving)といいます。自動セーブはシステムがクラッシュしたときに、 ある決まった量以上の作業が失われることを防ぎます。デフォルトでは自動セー ブは300打鍵ごと、または30秒以上暇だと行なわれます。自動セーブのユーザ向 け情報は、See section `Auto-Saving: Protection Against Disasters' in The GNU Emacs Manual。ここでは自動セーブを実装するの に使われている関数とそれらを制御する変数について説明します。
nil
です。
buffer-auto-save-file-name => "/xcssun/users/rms/lewis/#files.texi#"
t
、空ではないリスト、正の整数のいずれ
かのときは、このコマンドは自動セーブをオンにします。それ以外のときは自動
セーブをオフにします。
nil
値を返します。この関数は、ハッシュ・マーク(`#')で始まって
終る名前が自動セーブ・ファイル名になり得るという自動セーブ・ファイルの命名法
の知識に基づいて働きます。引数filenameはディレクトリ部分を含んでい
てはいけません。
(make-auto-save-file-name) => "/xcssun/users/rms/lewis/#files.texi#" (auto-save-file-name-p "#files.texi#") => 0 (auto-save-file-name-p "files.texi") => nil
この関数の標準の定義は以下のとおりです:
(defun auto-save-file-name-p (filename) "Return non-nil if FILENAME can be yielded by..." (string-match "^#.*#$" filename))
この関数は、自動セーブ・ファイルの命名法を変更したいときにカスタマイズ可能
にするために存在します。これを定義し直したときは、必ず関数
make-auto-save-file-name
も定義し直してください。
auto-save-visited-file-name
(下記参照)を見ませんので、
この関数を呼び出す前にチェックしなくてはなりません。
(make-auto-save-file-name) => "/xcssun/users/rms/lewis/#backup.texi#"
この関数の標準の定義は以下のとおりです:
(defun make-auto-save-file-name () "Return file name to use for auto-saves \ of current buffer. ..." (if buffer-file-name (concat (file-name-directory buffer-file-name) "#" (file-name-nondirectory buffer-file-name) "#") (expand-file-name (concat "#%" (buffer-name) "#"))))
自動セーブ・ファイルの命名法をカスタマイズするためにこれを定義し直せるよう
に、独立した関数として存在します。必ずauto-asve-file-name-p
も一致
するように変更してください。
nil
なら、Emacsはバッファを読み込んだファイルに自動セー
ブします。すなわち、編集しているファイルと同じファイルに自動セーブが行な
われます。通常この変数はnil
なので、自動セーブ・ファイルは
make-auto-save-file-name
によって作られた別の名前になります。
この変数の値を変更したときは、どのバッファでも次に自動セーブ・モードがもう
一度オンになるまで効果がありません。自動セーブ・モードがすでにオンになってい
るなら、auto-save-mode
が再び呼ばれるまで同じファイル名に自動セー
ブし続けます。
t
を返します。
nil
を返します。
nil
なら、ファイルを読み込んでいるバッファはデフォルト
で自動セーブがオンになります。それ以外ならそうなりません。
通常、いくつかのバッファを自動セーブすると自動セーブの実行中に
`Auto-saving...'というメッセージがエコー領域に表示されます。ですが、
no-messageが非nil
ならメッセージは抑制されます。
current-onlyが非nil
ならカレント・バッファだけを自動セーブし
ます。
delete-auto-save-files
が非nil
ならカレント・バッ
ファの自動セーブ・ファイルを削除します。これはバッファをセーブするたびご
とに呼び出されます。
delete-auto-save-file-if-necessary
で使われます。こ
れが非nil
なら、Emacsは本当のセーブを(読み込んだファイルへ)実行す
るときに自動セーブ・ファイルを削除します。これはディスク・スペースを節約し、
あなたのディレクトリが散らからないようにします。
これが-1なら、大量の削除のためにこのバッファの自動セーブが一時的に停止さ れていることを意味します。明示的にこのバッファをセーブするとこの変数に正 の値が入れられるので、自動セーブは再びオンになります。自動セーブ・モードを オフしたりオンするとこの変数の値も変更されます。
nil
なら)全ての自動セーブ・ファイルの名前を記録するファ
イルを指定します。Emacsは自動セーブを行なうたびに、自動セーブがオンになっ
ているバッファそれぞれにつき2行をこのファイルに書き込みます。1行目は読み
込んだファイルの名前で(なければ空です)、2行目は自動セーブ・ファイルの名前
です。
Emacsが正常に終了するときは、このファイルを削除します。Emacsがクラッシュ
した場合は、下手をすると失われた作業を含むかもしれない自動セーブ・ファイル
全てをそのファイルで見つけることができるでしょう。recover-session
コマンドはこれらのファイルを使います。
このファイルのデフォルトの名前はあなたのホーム・ディレクトリにあり `.saves-'で始まります。EmacsのプロセスIDとホスト名も含んでいま す。
ファイルを広範囲に渡って変更してから気が変わった場合、
revert-buffer
コマンドでファイルの直前のバージョンを読み込むことに
よりその変更を破棄できます。See section `Reverting a Buffer' in The GNU Emacs Manual。
引数check-auto-saveが非nil
で、最新の自動セーブ・ファイルが読
み込んだファイルよりも新しいなら、revert-buffer
はユーザに代わりに
それを使うかどうか問い合わせます。そうでなければ常に読み込んだファイル
(visited file)自身
のテキストが使われます。対話的に使う場合、数値前置引数があれば
check-auto-saveがセットされます。
通常revert-buffer
はバッファを変更する前に確認を求めますが、引数
noconfirmが非nil
なら確認を求めません。
復帰するときにはそのバッファ中のマーカの位置を、
insert-file-contents
の置換機能を使って保存しようとします。復帰す
る前にバッファの内容とファイルの内容が同一なら、全てのマーカが保存され
ます。同一でない場合はバッファを変更して、次にバッファの先頭と末尾の変更
されていないテキスト(もしあれば)の中のマーカを保存します。保存された追
加のマーカはどれも信用できません。
これらの変数、ほとんどがバッファローカル変数です、を設定することによって
revert-buffer
の動作をカスタマイズできます。
nil
ならこ
れは、復帰の作業を行なうために関数として引数なしで呼び出されます。値が
nil
なら、復帰は通常のやり方で行なわれます。
Diredモードのような編集されるテキストがファイルの内容ではないがある別の やり方で再生できるモードでは、この変数に内容を再生する関数をバッファロー カルな値としてセットします。
nil
なら、このバッファを復帰するときに新しい内
容を挿入するのに使う関数です。この関数は二つの引数を受けとります。1番目は
使うファイル名で、2番目はユーザが自動セーブ・ファイルを読み込むことを求め
たならt
になります。
revert-buffer
によって実行されます。ただし
revert-buffer-function
がnil
のときだけです。
Font Lockモードはバッファがもうフォント修飾(fontify)されないことを記録す るためにこのフックを使います。
revert-buffer
によって実行されます。ただし
revert-buffer-function
がnil
のときだけです。
Font Lockモードは更新されたバッファの内容のフォントを再算出するためにこ のフックを使います。
Go to the first, previous, next, last section, table of contents.