2013-11-04 30 views
6

Bir argüman alan bir Elisp fonksiyonum var (şimdiye kadar çok iyi). Bu argümanın bir listeden bir öğe olması ve başka bir şey olmaması gerekiyor.Elisp işlevi listeden bağımsız değişken seç

Listeyi bir "seçim arabelleği" olarak (yönlendirilmiş gibi) görüntüleyebilmemin bir yolu var. Burada, kullanıcı el ile dizgeyi yazmak yerine, öğeye gidip enter tuşuna basarak seçebilir ?

cevap

5

Bunu yapmak için normal yol completing-read aracılığıyladır. Daha sonra, *Completions* arabelleği kapatacak şekilde minibuffer-completion-help'u arayabileceğiniz bir kullanabilirsiniz, böylece kullanıcı kendi seçimini tıklatabilir.

4

Ben doğru soru anlasalardı, böyle bir şey arıyor: seçim süreci dired Seviyorum değildir

(defun foo (list) 
    (interactive) 
    (let ((arg (ido-completing-read "Select from list: " list)))) 
    ...) 

ama emacs kullanıcıları ido veya başka kullanarak bir listeden seçmek için daha yaygındır benzer alternatifler. Aramanızı daraltabilir, alternatifler arasında geçiş yapabilir ve uzun vb. Özelleştirebilirsiniz. Tercihlerinizi hangi şekilde özelleştirebileceğinizi düşünüyorsanız, M-x özelleştirme grubu RET ido'yu seçin.

4

Ne arıyorsun completing-read geçerli:

(defun foo (arg) 
    (interactive (list (completing-read ...))) 
    ....) 
0

Ben şeylerin bu tür açılır menüler kullanmak ister: BTW

(x-popup-menu 
    (list '(50 50) (selected-frame)) ;; where to popup 
    (list "Please choose"   ;; the menu itself 
     (cons "" (mapcar (function (lambda (item) (cons item item))) 
        your-list-of-strings)))) 

, tek la Ortak à (mapcar 'cons your-list-of-strings your-list-of-strings) kullanmak istiyorum Lisp, ancak elisp yalnızca tekli işlevleri alır :-(