2010-03-04 13 views
12

¿Hay alguna manera de agregar mi propia finalización a una función elisp (interactive)? Idealmente, me gustaría pasarle una lista de cadenas de las que completaría las pestañas. Sé que usando (interactive "D"), (interactive "F") o (interactive "b") le dan la terminación para directorios, archivos y nombres de búfer respectivamente, pero ¿qué pasa con las entradas más generales?Agregar compleción a (interactivo)

Respuesta

24

El argumento de interactive no necesita ser una cadena; si no lo es, se evalúa para obtener la lista de argumentos para pasar a la función. Por lo tanto, se puede hacer algo como esto:

(defun insert-foo-bar-or-baz (arg) 
    (interactive 
    (list 
    (completing-read "Choose one: " '("foo" "bar" "baz")))) 
    (insert arg)) 
+0

/facepalm Ahora que he visto un ejemplo, ese comentario en el 'M-x entrada de apropos'' interactive' tiene mucho sentido. – Inaimathi