¿Cómo ignoro los comentarios con scan-sexps?

Pregunta:

Tengo un código lisp que contiene un comentario:

(while list
  ;; take the head of LIST
  (setq len 1))

Quiero extraer las posiciones de los sexps. Estoy usando scan-sexps . Si llamo a M-: (scan-sexps 12 1) con el código anterior en un búfer, devuelve 54, como se esperaba.

Sin embargo, si trato de hacer esto mediante programación:

(setq src "(while list
  ;; take the head of LIST
  (setq len 1))")

(with-temp-buffer
  (insert src)
  (scan-sexps 12 1))

¡Tengo 22! Esto parece estar analizando las palabras de mi comentario. ¿Por qué no obtengo 54 y cómo soluciono esto?

Al leer la cadena de documentos para scan-sexps , menciona parse-sexp-ignore-comments . Sin embargo, esto no parece afectar el resultado:

(with-temp-buffer
  (insert src)
  (setq parse-sexp-ignore-comments t)
  (scan-sexps 12 1)) ; still 22

¿Cómo puedo hacer que scan-sexps devuelva la posición final del siguiente sexp, ignorando los comentarios?

Respuesta:

El problema es que with-temp-buffer pone el búfer en un modo fundamental, y usted está contando con que estará en modo Lisp, como emacs-lisp-mode . Entonces, los comentarios y los sexps no son lo que esperabas.

(with-temp-buffer
  (emacs-lisp-mode)
  (insert src)
  (scan-sexps 12 1))

;; => 54

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım