2009-04-16 6 views
11

Ich versuche, eine dynamische Eingabeaufforderung von meinem elisp Funktion zu haben. Ich möchte etwas wie replace-regexp, wo es dir die letzte eingegebene Regexp zeigt. Ich versuchte (interaktiv (concat "sab" "bab"))) das funktioniert nicht!Emacs Elisp dynamische interaktive Eingabeaufforderung

ich auch versucht Nachricht wie Format (interaktive "s% s" last-used-regexp)

und das funktioniert nicht! Wer weiß, wie man das macht?

Vielen Dank!

Antwort

15

M-x find-function ist dein Freund. Es wird Ihnen sagen, wie alles in Emacs funktioniert, indem Sie den Quellcode anzeigen. Ich finde, dass query-regexp-replacequery-replace-read-argsquery-replace-read-args Anrufe query-replace-read-from ruft, die read-from-minibuffer unter Verwendung einer Eingabeaufforderung aufruft, die von dem zuletzt verwendeten regexp erstellt wird, das in dem gepunkteten Paar query-replace-defaults gespeichert wird.

So:

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

ist ein Befehl, der eine Eingabeaufforderung mit dem zuletzt eingegebenen regexp als Standard wirft.

9

eine Variable für Eingabeverlauf verwenden, und interaktiv mit einer Liste:

(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)) 

Wenn Sie dort zunächst eingegeben nicht den letzten Wert wollen, die (car my-func-history)-nil ändern. Sie können natürlich auf/ab Pfeil, um durch die Geschichte an der Eingabeaufforderung zu gehen.

+1

Danke schön, jetzt brauche ich nur noch die Fertigstellung ... – To1ne

Verwandte Themen