[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バックアップ・ファイルと自動セーブは、Emacsがクラッシュやユーザ自身のあ やまちがもたらす結果からユーザを守ろうとするのに使う二つの方法です。自動 セーブは、現在の編集セッションの初期の段階のテキストを保存します。バック アップ・ファイルは現在のセッション以前のファイルの内容を保存します。
23.1 バックアップ・ファイル | ||
23.2 自動セーブ | ||
23.3 復帰 | revert-buffer とそのカスタマイズ方法。
|
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バックアップ・ファイル(backup file)は、編集しているファイルの古い 内容のコピーです。Emacsはバッファを、読み込んだファイル(visited file)に 最初にセーブするときにバックアップ・ファイルを作ります。普通は、バックアッ プ・ファイルには現在の編集セッションの前のファイルの内容が入っていること になります。バックアップ・ファイルの内容は、通常は一度作られたら変更され ずに残ります。
バックアップは通常、読み込んだファイルを新しい名前に変更して作ります。読 み込んだファイルをコピーしてバックアップ・ファイルを作るように指定すること も可能です。この選択は複数の名前をもつファイルに関して違いがあります。ま た、編集しているファイルが元のオーナーの所有のままか、編集しているユーザ の所有になるかにも影響します。
デフォルトでは、Emacsは編集しているファイルそれぞれに一つのバックアップ・ ファイルを作ります。あるいは、番号付のバックアップを指定することもできま す。こうすると、新しいバックアップ・ファイルはそれぞれ新しい名前になりま す。古い番号つきバックアップは、もうこれ以上いらないと思ったときに消すこ とができますし、自動的に消すこともできます。
23.1.1 バックアップ・ファイルの作成 | Emacsはいつ、どのようにバックアップ・ファイルを作るか。 | |
23.1.2 バックアップの手段は名前の変更?それともコピー? | ||
23.1.3 番号付バックアップ・ファイルの作成と削除 | ||
23.1.4 バックアップ・ファイルの命名 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
この関数はカレント・バッファに読み込んでいるファイルのバックアップを、必
要ならば作ります。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
をセットすべきです。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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
のときだけ意味があります。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルの名前が`foo'なら、その番号付バックアップ・バージョンの名前は `foo.~v~'になります。vはさまざまな整数で、こんな感じになり ます: `foo.~1~'、`foo.~2~'、`foo.~3~'、…、 `foo.~259~'など。
この変数は、単独の番号付でないバックアップ・ファイルを作るか、複数の番号付 バックアップを作るかを制御します。
nil
読み込んだファイルがすでに番号付バックアップを持っていれば番号付バックアッ プを作り、そうでなければ作りません。
never
番号付バックアップを作りません。
番号付バックアップを作ります。
番号付バックアップを使っていると、しまいにはたくさんのバックアップ・バー ジョンができてしまいます。そうなったらそれらを削除しなくてはなりません。 Emacsがこれを自動で行なうこともできますし、それらを削除するかどうかユー ザに問い合わせることもできます。
この変数の値は、新しい番号付バックアップが作られたときに取っておく最新の バージョンの数です。新しく作られたバックアップはこの数に含まれています。 デフォルト値は2です。
この変数の値は、新しい番号付バックアップが作られたときに取っておく最も古 いバージョンの数です。デフォルト値は2です。
1、2、3、5と7の番号がついたバックアップがあり、これらの変数の値が両方と
も2なら、1と2の番号のバックアップを古いバージョンとして取っておき、5番と
7番を新しいバージョンとしてとっておきます。バックアップ・バージョン3は過
剰ということになります。関数find-backup-file-name
(see section バックアップ・ファイルの命名)は、どのバックアップ・バージョンを削除するか決定する役を引き受け
ますが、それ自身でそれらを削除することはありません。
この変数が非nil
なら、ファイルをセーブするときに過剰なバックアップ・
バージョンを黙って削除します。そうでなければ、それらを削除するかどうかユー
ザに問い合わせます。
この変数はDiredコマンド.(dired-clean-directory
)中で最新のバックアップ・バージョンをいくつ取っておくかを指定します。これは、新しいバックアップ・ファイルを作るときにkept-new-versions
が指定している動作とお
なじことです。デフォルト値は2です。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
この節の関数を再定義することによってバックアップ・ファイルの名前をつけるや り方をカスタマイズできるようにすることを主な目的として説明します。一つを 変更したなら、多分残りも変更する必要があるでしょう。
この関数は、filenameがバックアップ・ファイルの名前として適当な場合、
非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行になります。)
この簡単な式を独立した関数にしているのは、カスタマイズするときに再定義し やすくするためです。
この関数は、ファイルfilenameの番号つきでないバックアップ・ファイル の名前の文字列を返します。Unixでは、ただ単にfilenameにチルダ (tilde)を後ろにつけたものになります。
この関数の標準の定義は以下のとおりです:
(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~" |
この関数は、filenameの新しいバックアップ・ファイルのファイル名を算出
します。また、既存のバックアップ・ファイルのうち削除した方がいいものを示し
すこともします。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~") |
この関数は、filenameの最も新しいバックアップ・ファイルの名前を返しま
す。そのファイルのバックアップ・ファイルがなければnil
を返します。
あるファイル比較コマンドは、ファイルをその最新のバックアップと自動的に比 較するためにこの関数を使います。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Emacsは読み込んだファイル全てを定期的にセーブします。これを自動セー ブ(auto-saving)といいます。自動セーブはシステムがクラッシュしたときに、 ある決まった量以上の作業が失われることを防ぎます。デフォルトでは自動セー ブは300打鍵ごと、または30秒以上暇だと行なわれます。自動セーブのユーザ向 け情報は、See Auto-Save: (emacs)Auto-Save section `Auto-Saving: Protection Against Disasters' in The GNU Emacs Manual。ここでは自動セーブを実装するの に使われている関数とそれらを制御する変数について説明します。
このバッファローカル変数は、カレント・バッファを自動セーブするのに使われ
るファイルの名前です。バッファが自動セーブされないときはnil
です。
buffer-auto-save-file-name => "/xcssun/users/rms/lewis/#files.texi#" |
対話的に引数なしで使われたときはこのコマンドはトグル・スイッチになり、カ
レント・バッファの自動セーブがオフならオンにし、オンならオフにします。引
数argがあり、その値がt
、空ではないリスト、正の整数のいずれ
かのときは、このコマンドは自動セーブをオンにします。それ以外のときは自動
セーブをオフにします。
この関数はfilenameが自動セーブ・ファイルの名前になり得る文字列のとき
非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
を返します。
この変数の値は、Emacsが自動セーブと自動セーブの間にキーボードから読み込 む文字の数を示しています。この文字数よりも多くの文字を読み込むたびに、自 動セーブがオンになっている全てのバッファで自動セーブが行なわれます。
この変数の値は、自動セーブが起きるアイドル時間の秒数です。この長さの間ユー ザが何もしないでいるたびごとに、Emacsは必要な全てのバッファで自動セーブ を行ないます。(実際には、カレント・バッファのサイズに依存する要因のせい で、指定された時間より長くなります。)
この正規フックは自動セーブが行なわれる直前に実行されます。
この変数が非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とホスト名も含んでいま す。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルを広範囲に渡って変更してから気が変わった場合、
revert-buffer
コマンドでファイルの直前のバージョンを読み込むことに
よりその変更を破棄できます。See (emacs)Reverting 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モードは更新されたバッファの内容のフォントを再算出するためにこ のフックを使います。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.