【问题标题】:wrong type argument commandp with a custom function in emacsemacs 中带有自定义函数的错误类型参数 commandp
【发布时间】:2014-07-29 12:20:03
【问题描述】:

我知道很多人都问过这类问题, 但我已经阅读了很多类似的帖子,但仍然不知道 该怎么办。所以这里是 .emacs 中的 elisp 代码:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (progn
  (py-execute-line)
  (evil-next-line)))
(add-hook 'python-mode-hook
    (lambda () (define-key python-mode-map (kbd "C-c C-j") 'py-execute-line-down)))

我也试过在函数中添加(interactive),还是不行。

【问题讨论】:

  • 对于有兴趣查看python-mode 源代码的人,这里是原始发布者可能使用的库的链接:launchpad.net/python-mode 最新版本有一个绿色下载链接。跨度>
  • qed: (interactive) 你所需要的。我猜您在添加该行后没有重新评估该功能?还是你放错地方了? (应该紧跟在文档字符串之后)。另请注意,您也不需要将(progn ... ) 包裹在函数体周围。
  • 另外:对define-key 的调用不需要进入钩子,每次打开 python 缓冲区时都会对其进行评估。
  • +1 @phils 的评论。并确保将(interactive) 放在正确的位置:在文档字符串之后和函数体之前。
  • 链接一些类似的问题:thisthisthis

标签: emacs elisp


【解决方案1】:

只是为了保持记录,这似乎可以解决问题,但不确定它是否是最佳的:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (interactive)
  (py-execute-line)
  (evil-next-line 1))
(defun kaiyin-pykeys ()
  "python mode custome keys"
  (local-set-key (kbd "C-c j") 'py-execute-line-down)
  )
(add-hook 'python-mode-hook 'kaiyin-pykeys)

听从 Dan 的建议,我将上面的内容改为:

;; send line to python console
(require 'python-mode)
(defun py-execute-line-down ()
  "execute python line and move cursor down"
  (interactive)
  (py-execute-line)
  (forward-line 1))
(define-key python-mode-map (kbd "C-c j") 'py-execute-line-down)

【讨论】:

  • 我建议将 (evil-next-line 1) 替换为 (forward-line 1) 以避免引入 Evil 依赖项(如果您决定停止使用后者)。假设您想在所有 python 缓冲区中绑定 C-cj,我还建议您放弃第二个 defunadd-hook 组合,只需将以下内容放入您的 .emacs 文件中:(define-key python-mode-map (kbd "C-c j") 'py-execute-line-down)
猜你喜欢
  • 2013-12-31
  • 2010-11-18
  • 2017-03-29
  • 2012-09-29
  • 2012-10-16
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
相关资源
最近更新 更多