2009-04-16 18 views
11

Sto provando ad avere un prompt dinamico dalla mia funzione elisp. Voglio qualcosa come replace-regexp dove ti mostrerà l'ultima espressione regexp inserita. Ho provato (interattivo (concat "sab" "bab"))) che non funziona! messaggioEmacs Elisp prompt interattivo dinamico

Ho provato anche come formato (interattivo "s% s" ultimo-usato-regexp)

e che non funziona! Qualcuno sa come fare questo?

Grazie!

risposta

15

M-x find-function è tuo amico. Ti dirà come funziona qualsiasi cosa in emacs mostrandoti il ​​codice sorgente. Usandolo, trovo che query-regexp-replace chiama query-replace-read-args che chiama query-replace-read-from che chiama read-from-minibuffer utilizzando un prompt creato dall'ultima espressione regolare usata, che viene salvata nella coppia puntata query-replace-defaults.

Quindi:

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

è un comando che getta un prompt con l'ultimo regexp inserito come predefinito.

9

utilizzare una variabile per la storia di ingresso, e interattivo 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)) 

Se non si desidera che l'ultimo valore immesso in là inizialmente, cambiare il (car my-func-history)-nil. Ovviamente è possibile utilizzare la freccia su/giù per scorrere la cronologia al prompt.

+1

Grazie carino, ora tutto ciò di cui ho bisogno è il completamento ... – To1ne