💾 Archived View for it.omarpolo.com › articoli › pillole-di-emacs-002 captured on 2022-03-01 at 15:22:55. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-11-30)

-=-=-=-=-=-=-

002 — Pillole di Emacs: la macro comment

Tra le prime cose presenti nel mio init.el c’è una macro piuttosto carina, anche se l’idea non è mia. Si tratta della macro ‘comment’, una macro che ignora tutti gli argomenti che gli vengono passati e ritorna sempre ‘nil’.

(defmacro comment (&rest _body)
  "Ignore everything in its BODY and return nil."
  ())

(in Common-Lisp ed Emacs-Lisp ‘nil’ e la lista vuota sono effettivamente la stessa cosa)

Qual è l’utilità di questa macro apparentemente inutile? In diversi casi, magari mentre si sta debuggando del codice, o per disattivare alcune parti della nostra configurazione commentiamo del codice.

Commentare però ha degli svantaggi. Disattiva la syntax-highlighting, rende praticamente impossibile sfruttare comandi “avanzati” nel testo che abbiamo commentato (es. ‘mark-sexp’ non può funzionare all’interno di un commento) e altro. La macro ‘comment’ invece rende il codice al suo interno “morto”, lasciando comunque che Emacs lo colori e indenti correttamente, e permettendoci comunque di selezionare intere sexp al suo interno.

Un piccolo esempio dal mio init.el

(use-package cider
  :config
  (comment
   (defun my/cider-find-var (fn &optional arg var line)
     "Invert the meaning of the prefix argument"
     …)
   (advice-add 'cider-find-var :around #'my/cider-find-var))
  …)

Ho modificato il comportamento di ‘cider-find-var’, ma da una certa versione in poi non è più necessario perchè il comportamento di default è lo stesso che stavo forzando. Ho comunque lasciato il vecchio codice, commentandolo, come referenza per il futuro (nel caso Batsov cambi idea di nuovo).

La macro ‘comment’ è spudoratamente copiata da Clojure, dove fa parte della libreria standard.

$BlogIt: index.gmi,v 1.1 2021/10/20 07:42:31 op Exp $