2009-04-16 12 views
11

Estoy tratando de obtener un mensaje dinámico de mi función elisp. Quiero algo como replace-regexp donde te muestre la última expresión regular ingresada. Intenté (interactivo (concat "sab" "bab"))) que no funciona! mensajeEmacs Elisp solicitud interactiva dinámica

También probé como el formato (interactivo "s% s" de última utilizada-regexp)

y eso no funciona! ¿Alguien sabe cómo hacer esto?

¡Gracias!

Respuesta

15

M-x find-function es tu amigo. Te dirá cómo funciona cualquier cosa en emacs mostrándote el código fuente. Utilicándolo, me parece que query-regexp-replace llama al query-replace-read-args que llama al query-replace-read-from que llama al read-from-minibuffer usando un aviso creado a partir de la última expresión utilizada, que se guarda en el par de puntos query-replace-defaults.

Así:

(defun my-func() 
    "Do stuff..." 
    (interactive) 
    (read-from-minibuffer "Regexp? " (first query-replace-defaults))) 

es un comando que lanza un aviso con la última expresión regular introducida como predeterminado.

9

utilizar una variable de entrada para la historia, e interactiva con una lista:

(defvar my-func-history nil) 

(defun my-func (str) 
    (interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history))) 
    (insert str)) 

Si no desea que el último valor introducido allí inicialmente, cambiar el (car my-func-history)-nil. Por supuesto, puede subir/bajar la flecha para ir a través de la historia en el aviso.

+1

Gracias agradable, ahora todo lo que necesito es completar ... – To1ne

Cuestiones relacionadas