2011-01-26 3 views
6

Mevcut bir dizini etkileşimli olarak sormak için bir işlev istiyorum, ancak varsayılan dizinden başlamak yerine, '~/should/start/here/always/in/this/function' gibi bir yerel varsayılan yol işlevini istiyorum. (interactive "D")'u kullanırken başlamak nasıl bunu başarabilirim? İlk düşüncem, ilk önce varsayılan-dir'i ayarlayan ve daha sonra orijinal işlevimi çağıran başka bir işlev yaratmaktır, ancak bu doğru görünmüyor ve bu durumda etkileşimin nasıl isteneceğinden emin değilim. ,Elisp defunla başlamak için etkileşimli dizin seçimi için varsayılan yolu nasıl ayarlayabilirim?

bir dizin adını almak için read-directory aramak için bir lisp ifadeyle interactive kullanır
(defun choose-directory (directory) 
    "sample that uses interactive to get a directory" 
    (interactive (list (read-directory-name "What directory? " 
              choose-directory-default-directory))) 
    (message "You chose %s." directory)) 

(defvar choose-directory-default-directory "/home/tjackson/work/data" 
    "Initial starting point.") 

(ek argümanlar eklemek isteyebilirsiniz: Kendinizi bu yazıyoruz yana

cevap

9

, böyle bir şey yapabilirsiniz bağlantıyı/dokümanları kontrol edin).

Orijinal önseziniz de işe yarayacaktı, düşündüğünüz gibi, oldukça temiz değil. Ancak, davranışını değiştirmek istediğiniz işlevi istemediğinizde veya değiştiremediğinizde iyi çalışır. Bunu nasıl başardığınızı göstermek için aşağıdaki çözümü ekledim (bahsetmediğiniz bulmacanın tek parçası call-interactively idi):