Я хотел бы проверить, посещает ли какой-нибудь (скажем, текущий) буфер файл или нет. Я мог бы сказать:
(if (buffer-file-name) ...)
но это кажется не очень элегантным - меня интересует только логическое значение, а не фактическое имя рассматриваемого буфера. Если бы buffer-file-name
функция была написана на Elisp, я мог бы заглянуть в ее источник, чтобы выяснить, что она использует - но она написана на C, и, хотя я мог бы установить исходники Emacs, я боюсь, что не смогу найти имя elisp для функции, которая проверяет, что я там после в любом случае.
Для этого мне нужно создать каталог на основе имени файла текущего буфера, и в настоящее время я делаю более или менее это:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Итак, каков будет Elisp-идиоматический способ сделать это?
(and (buffer-file-name) t)
выглядит странно.
(if (buffer-file-name) ... )
это элегантно, значит, вы давно не пишете в elisp. Отсюда становится только хуже.
buffer-file-name
самом деле, это правильный способ сделать это (если вы действительно хотитеt
, делайте,(and (buffer-file-name) t)
но это уродливее ИМО). Его реализация читаетfilename
поле структуры C буфера, которое в любом случае недоступно непосредственно из Elisp. В конце концов, это просто указатель, который либо нулевой, либо нет.