Chciałbym sprawdzić, czy jakiś (powiedzmy, bieżący) bufor odwiedza plik, czy nie. Mógłbym powiedzieć:
(if (buffer-file-name) ...)
ale wydaje się, że nie jest zbyt elegancki - interesuje mnie tylko wartość logiczna, a nie faktyczna nazwa bufora. Gdyby buffer-file-name
funkcja została napisana w Elisp, mógłbym zajrzeć do jej źródła, aby dowiedzieć się, z czego korzysta - ale jest napisane w C i chociaż mogę zainstalować źródła Emacsa, obawiam się, że nie znalazłbym nazwy elisp dla funkcji, która i tak sprawdza to, co tam mam.
Potrzebuję do tego, aby utworzyć katalog na podstawie nazwy bieżącego bufora, a obecnie robię mniej więcej to:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Więc jaki byłby Elisp-idiomatyczny sposób na zrobienie tego?
(and (buffer-file-name) t)
wygląda to dziwnie.
(if (buffer-file-name) ... )
to nie jest eleganckie, to nie pisałeś długo w elisp. Staje się coraz bardziej brzydki.
buffer-file-name
naprawdę sprzeciwisz się używaniu , jest to właściwy sposób (jeśli naprawdę chceszt
, zrób to,(and (buffer-file-name) t)
ale jest to brzydsze IMO). Jego implementacją jest odczytywaniefilename
pola struktury bufora C, która i tak nie jest dostępna bezpośrednio z Elisp. Ostatecznie jest to po prostu wskaźnik zerowy lub nie.