2017-09-20 14 views
2

こんにちは私はneotreeで 'm'を使用してNerdtreeで使用したものと同様のオプションを与えるときにインタラクティブメニューを定義しようとしています。バインドキーの引数が間違っています

私はこのキーをバインドさ:

(evil-define-key 
    'normal neotree-mode-map 
... More keybindings ... 
    (kbd "m") 'neotree-modify-mode-menu) 

と私の機能は次のとおりです。

(defun neotree-modify-mode-menu (option) 
    "Asks for a mode and execute associated Neotree command" 
    (interactive "c(a)dd node | (d)elete node | (r)ename node") 
    (cond 
    ((eq option ?a) (neotree-create-node)) 
    ((eq option ?d) (neotree-delete-node)) 
    ((eq option ?c) (neotree-copy-node)) 
    ((eq option ?r) (neotree-rename-node)) 
    (:else (message (format "Invalid option %c" option))))) 

それはすべてのオプションのために動作しますが作成ノードはありません。その理由は、ここで見ることができるように、create-nodeが1つの引数をとり、残りが引数をとらないからです。

キーバインドから関数を呼び出すときにだから私はこのエラーを取得する:

Wrong number of arguments: #[(filename) "Å2w^@Æ^X GÇU\203^R^@ÈÅÆ\"\210 ÉÆOÊ\232?^PË !\203*^@ÌÍ \"\210ÈÅÆ\"\210^H\203[^@                  
ÎÏ \"!\203[^@Ð ÇÑÒ ÓÔ$TOÔ\"\210ÕÖÆ #\210× !\210ØÆ!\210^K\203[^@Ù !\210^H?\205u^@^LÎÚ \"!\205u^@Ð Ô\"\210× !\210ØÆ!)0\207" [is-file filename neo-confirm-create-file neo-create-file-auto-o\ 
pen neo-confirm-create-directory rlt nil 0 throw -1 ...] 8 ("/home/panavtec/.emacs.d/elpa/neotree-20170522.758/neotree.elc" . 64641) (let* ((current-dir (neo-buffer--get-filename-current-lin\ 
e neo-buffer--start-node)) (current-dir (neo-path--match-path-directory current-dir)) (filename (read-file-name "Filename:" current-dir))) (if (file-directory-p filename) (setq filename (con\ 
cat filename "/"))) (list filename))], 0 

私がキーにneotree作成ノードの機能をバインドする場合、それは動作します:

(evil-define-key normal neotree-mode-map 
    (kbd "m") 'neotree-create-node) 

私は修正することができますどのようにそれ?

答えて

2

私は答えを見つけました。あなたがinteractivlyと呼ばれる関数に入っているとき、その関数の引数には自動的にユーザーの答えが入力されます。

(defun neotree-modify-mode-menu (option) 
    (interactive "c(a)dd node | (d)elete node | (r)ename node") 

しかし、あなたは コール対話的

完全なコードでそれを呼び出す必要があり、対話型を必要とする別の関数を呼び出す必要がある場合:私は私の質問には「オプション」を使用するよう https://github.com/PaNaVTEC/dotfiles/commit/f69c855cb2d31d79ab81331a5ee53cb9cd8e2f38#diff-e68ea0da4891dbc0f47897e9562e9daeR29

ありがとうございます。

2

明らかに、create nodeの引数を指定する必要があります。どのような議論をしたいのですか?その議論をどのように期待していますか?

常に同じ引数値を使用したい場合は、neotree-create-nodeへの呼び出しでハードコードするだけです。

それ以外の場合は、interactiveスペックをお読みください。

あなたのinteractive仕様は間違っています - Elispマニュアル、ノードUsing Interactiveを参照してください。

+0

こんにちは、あなたは明らかに正しいです、私は渡す引数が不足していますが、私はバインドされたキーからノードを作成すると動作なぜ? (evot-define-key 'normal neotree-mode-map (kbd "m")neotree-create-node) – PaNaVTEC

+0

これは、関数をインタラクティブに呼び出すと、対話的に関数を呼び出さないカスタムコード。しかし、あなたは '(neotree-create-node)'の代わりに '(call-interactively 'neotree-create-node)'を使って正確に行うことができることに注意してください... *(編集:あなた自身で...)* – phils

関連する問題