Время изменения буфера
Предположим, что вы посетили файл и внесли изменения в его буфер, а в это время сам файл был изменён на диске. В этот момент сохранение буфера перезапишет изменения в файле. Иногда это может быть то, что вам нужно, но обычно это приведёт к потере ценной информации. Поэтому Emacs проверяет время изменения файла с помощью функций, описанных ниже, перед сохранением файла. (См. Атрибуты файлов, чтобы узнать, как проверить время изменения файла.)
- Функция: verify-visited-file-modtime &optional buffer
-
Эта функция сравнивает то, что buffer (по умолчанию, текущий буфер) зафиксировал для времени изменения посещённого файла, с фактическим временем изменения файла, как указано операционной системой. Эти два значения должны совпадать, если только какой-либо другой процесс не записал файл после того, как Emacs посетил или сохранил его.
Функция возвращает
t, если последнее фактическое время изменения и время изменения, зафиксированное Emacs, совпадают,nilв противном случае. Она также возвращаетt, если буфер не содержит записанного последнего времени изменения, то есть еслиvisited-file-modtimeвернёт ноль.Она всегда возвращает
tдля буферов, которые не посещают файл, даже еслиvisited-file-modtimeвозвращает ненулевое значение. Например, она всегда возвращаетtдля буферов dired. Она возвращаетtдля буферов, которые посещают файл, который не существует и никогда не существовал, ноnilдля буферов, посещающих файл, который был удалён.
- Функция: clear-visited-file-modtime
-
Эта функция очищает запись последнего времени изменения файла, посещаемого текущим буфером. В результате, следующая попытка сохранить этот буфер не будет жаловаться на расхождение во временах изменения файла.
Эта функция вызывается в
set-visited-file-nameи других исключительных случаях, когда обычный тест, чтобы избежать перезаписи изменённого файла, не должен выполняться.
- Функция: visited-file-modtime
-
Эта функция возвращает записанное последнее время изменения файла текущего буфера в качестве метки времени Lisp (см. Время суток).
Если буфер не содержит записанного последнего времени изменения, эта функция возвращает ноль. Этот случай возникает, например, если буфер не посещает файл или если время было явно очищено функцией
clear-visited-file-modtime. Обратите внимание, однако, чтоvisited-file-modtimeвозвращает метку времени и для некоторых буферов, не связанных с файлами. Например, в буфере Dired, отображающем список директорий, она возвращает последнее время изменения этой директории, как записано в Dired.Если буфер посещает файл, который не существует, эта функция возвращает -1.
- Функция: set-visited-file-modtime &optional time
-
Эта функция обновляет запись буфера последнего времени изменения посещённого файла до значения, указанного параметром time, если time не является
nil, а в противном случае — до последнего времени изменения посещённого файла.Если time не является
nilи не является целочисленным флагом, возвращаемым функциейvisited-file-modtime, то это должно быть значение времени Lisp (см. Время суток).Эта функция полезна, если буфер не был прочитан из файла обычным образом или если сам файл был изменён по какой-либо известной безобидной причине.
- Функция: ask-user-about-supersession-threat filename
-
Эта функция используется для запроса у пользователя, как поступить после попытки изменить буфер, посещающий файл filename, когда файл новее текста буфера. Emacs обнаруживает это, потому что время изменения файла на диске новее, чем последнее время сохранения, и его содержимое изменилось. Это означает, что, вероятно, какой-то другой программе изменила файл.
В зависимости от ответа пользователя, функция может вернуться обычно, в этом случае изменение буфера продолжается, или она может сигнализировать об ошибке
file-supersessionс данными(filename), в этом случае предлагаемое изменение буфера не допускается.Эта функция вызывается автоматически Emacs в соответствующих случаях. Она существует, чтобы вы могли настроить Emacs, переопределяя её. См. файл userlock.el для стандартного определения.
См. также механизм блокировки файлов в Блокировки файлов.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Modification-Time.html