26.9.7 Стандартные имена файлов

Иногда программе Emacs Lisp необходимо указать стандартное имя файла для определенного использования — обычно для хранения конфигурационных данных, указанных текущим пользователем. Обычно такие файлы должны располагаться в каталоге, указанном user-emacs-directory, который по умолчанию обычно составляет ~/.config/emacs/ или ~/.emacs.d/ (см. Как Emacs находит ваш файл инициализации в Руководство GNU Emacs). Например, определения сокращений по умолчанию хранятся в ~/.config/emacs/abbrev_defs или ~/.emacs.d/abbrev_defs. Самый простой способ указать такое имя файла — использовать функцию locate-user-emacs-file.

Функция: locate-user-emacs-file base-name &optional old-name

Эта функция возвращает абсолютное имя файла для конфигурационного или данных файла, специфичного для Emacs. Аргумент base-name должен быть относительным именем файла. Возвращаемое значение — это абсолютное имя файла в каталоге, указанном user-emacs-directory; если этот каталог не существует, эта функция создает его.

Если необязательный аргумент old-name не равен nil, он указывает на файл в домашнем каталоге пользователя, ~/old-name. Если такой файл существует, возвращаемое значение — это абсолютное имя этого файла, а не файл, указанный base-name. Этот аргумент предназначен для использования пакетами Emacs для обеспечения обратной совместимости. Например, до введения user-emacs-directory файл сокращений находился в ~/.abbrev_defs. Вот определение abbrev-file-name:

(defcustom abbrev-file-name
  (locate-user-emacs-file "abbrev_defs" ".abbrev_defs")
  "Default name of file from which to read abbrevs."
  …
  :type 'file)

Функция более низкого уровня для стандартизации имен файлов, которую locate-user-emacs-file использует в качестве подпрограммы, — это convert-standard-filename.

Функция: convert-standard-filename filename

Эта функция возвращает имя файла на основе filename, которое соответствует соглашениям текущей операционной системы.

В системах GNU и других POSIX-подобных системах она просто возвращает filename. В других операционных системах она может принудительно применять специфические для системы соглашения об именах файлов; например, в MS-DOS эта функция выполняет ряд изменений для соблюдения ограничений имен файлов MS-DOS, включая преобразование любого ведущего «.» в «_» и усечение до трех символов после «.».

Рекомендуемый способ использования этой функции — указать имя, соответствующее соглашениям систем GNU и Unix, и передать его в convert-standard-filename.