Spec-Zone.ru › Elisp

Время изменения буфера

Предположим, что вы посетили файл и внесли изменения в его буфер, а в это время сам файл был изменён на диске. В этот момент сохранение буфера перезапишет изменения в файле. Иногда это может быть то, что вам нужно, но обычно это приведёт к потере ценной информации. Поэтому 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API