0

原来的


说,我有这样的功能:

(defun my-function ()
  "This is my function."
  :his-keyword xxx
  :her-keyword yyy
  (his-function)
  (her-function))

在为 Emacs Lisp 应用 Emacs 内置缩进后,我得到:

(defun my-function ()
  "This is my function."
  :his-keyword xxx
   :her-keyword yyy
    (his-function)
    (her-function))

当然,我希望它保持原样,所以对我来说看起来像是一个错误。有谁知道如何拦截这种行为?还是我应该提交错误报告?我在 Emacs 24.3 上。

更新


我想到了。

我一直在扩展emacs-lisp-modewith myelisp-mode以添加更多语法突出显示:

...

(define-derived-mode elisp-mode
  fundamental-mode
  "EL"
  "A major mode for Emacs Lisp."
  (emacs-lisp-mode)
  ...)

(provide 'elisp)

然后某处:

(require 'elisp)

(add-to-list
 'auto-mode-alist
 '("\\.el" . elisp-mode))

虽然elisp-mode加载成功,但emacs-lisp-mode即使我已经进行(emacs-lisp-mode)elisp-mode初始化(见上文),它也没有加载。

改为:

(define-derived-mode elisp-mode
  emacs-lisp-mode
  "EL"
  "A major mode for Emacs Lisp."
  ...)

emacs-lisp-mode正确打开,缩进最终按预期运行。那是相当微妙的。

虽然,第二个变体似乎更自然和正确,但谁能给我一个线索,为什么第一个变体不起作用?

4

1 回答 1

1

原始问题

我无法使用emacs -qand重现此emacs-lisp-mode问题,因此您的设置有问题。

您必须弄清楚.emacs触发此行为的原因,然后报告错误(如果它与记录的行为相矛盾)。

回复您的编辑

我认为区别或多或少类似于从另一个类继承的类:

(defclass c1 (c2))

并具有该类的字段:

(defclass c1 () ((a :type c2)))

也可以看看

  1. 定义派生模式
  2. 在 emacs 中创建新模式

您可能还想问一个单独的问题。

于 2013-06-12T17:03:39.807 回答