Vorrei verificare se alcuni buffer (diciamo, correnti) stanno visitando un file o no. Potrei dire:
(if (buffer-file-name) ...)
ma sembra non essere molto elegante - ciò che mi interessa è solo il valore booleano, non il nome effettivo del buffer in questione. Se la buffer-file-name
funzione fosse scritta in Elisp, potrei cercare nella sua fonte per scoprire cosa usa - ma è scritta in C, e mentre potrei installare le fonti di Emacs, temo di non trovare un nome elisp per la funzione che controlla comunque quello che sto cercando lì.
Quello di cui ho bisogno è che voglio creare una directory in base al nome del file del buffer corrente, e attualmente sto facendo più o meno questo:
(make-directory (if (buffer-file-name) (file-name-base) "default-dir"))
Quindi, quale sarebbe il modo Elisp-idiomatico di farlo?
(and (buffer-file-name) t)
sembra strano.
(if (buffer-file-name) ... )
sia elegante, allora non hai programmato elisp per molto tempo. Diventa solo più brutto da qui.
buffer-file-name
davvero, è il modo giusto per farlo (se lo vuoi davverot
, fallo(and (buffer-file-name) t)
ma è IMO più brutto). La sua implementazione sta leggendo ilfilename
campo del buffer C struct, che non è comunque accessibile direttamente da Elisp. Alla fine, è solo un puntatore che è nullo o no.