代码之家  ›  专栏  ›  技术社区  ›  PaNaVTEC

绑定密钥时参数数量错误

  •  2
  • PaNaVTEC  · 技术社区  · 7 年前

    我绑定了这把钥匙:

      (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采用了一个参数,我可以在这里看到: https://github.com/jaypei/emacs-neotree/blob/dev/neotree.el#L1921

    因此,当从键绑定调用函数时,我遇到了这个错误:

    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 create node函数,它会工作:

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Drew    7 年前

    显然,您需要为创建节点提供一个参数。你想提供什么论据?你希望如何得到那个论点?

    neotree-create-node .

    否则,请 interactive 请阅读。

    你的 互动的 Using Interactive .

        2
  •  2
  •   PaNaVTEC    7 年前

    我找到了答案,当你在一个交互调用的函数中时,该函数的参数会自动填充用户的答案。当我在问题中使用“option”时:

    (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

    谢谢