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