Ich möchte überprüfen, ob ein (z. B. aktueller) Puffer eine Datei besucht oder nicht. Ich könnte sagen:
(if (buffer-file-name) ...)
aber es scheint nicht sehr elegant zu sein - was mich interessiert, ist nur der boolesche Wert, nicht der tatsächliche Name des fraglichen Puffers. Wenn die buffer-file-name
Funktion in Elisp geschrieben wäre, könnte ich in ihrer Quelle nachsehen, was sie verwendet - aber sie ist in C geschrieben, und während ich die Emacs-Quellen installieren könnte, befürchte ich, dass ich keinen Elisp-Namen finden würde für die Funktion, die prüft, was ich dort sowieso bin.
Wofür ich es brauche, möchte ich ein Verzeichnis erstellen, das auf dem Namen der Datei des aktuellen Puffers basiert, und derzeit mache ich mehr oder weniger Folgendes:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Also, was wäre die Elisp-idiomatische Art, dies zu tun?
(and (buffer-file-name) t)
sieht seltsam aus.
(if (buffer-file-name) ... )
elegant halten, haben Sie nicht lange in elisp programmiert. Ab hier wird es nur noch hässlicher.
buffer-file-name
bin mir nicht sicher, warum Sie die Verwendung wirklich ablehnen, es ist der richtige Weg, dies zu tun (wenn Sie es wirklich wirklich wollent
, tun Sie es,(and (buffer-file-name) t)
aber das ist hässlicher, IMO). Seine Implementierung liest dasfilename
Feld der Puffer-C-Struktur, auf die ohnehin nicht direkt von Elisp aus zugegriffen werden kann. Am Ende ist es nur ein Zeiger, der entweder null ist oder nicht.