Emacs 同一模式有2种不同的配置

Emacs 同一模式有2种不同的配置,emacs,org-mode,Emacs,Org Mode,我正在构建一个工具来解析一个组织模式的源文件,以生成一个html5演示。这或多或少起作用 在emacs中编辑源文件时,如果我能够独立于现有的组织模式配置来定义函数、键绑定、代码段等,那将非常方便。(或任何其他主要模式,这不是特定于组织模式) 我研究了克隆组织模式并对其进行了重命名,但这对我来说似乎太过分了 理想情况下,我想要这样的东西 对于标准组织模式 (使用包组织 :模式(“\\.org\\\”.org模式) ... :绑定 (“s-f12”。做点什么) ) 以及我的演示模式 (使用包组织

我正在构建一个工具来解析一个组织模式的源文件,以生成一个html5演示。这或多或少起作用

在emacs中编辑源文件时,如果我能够独立于现有的组织模式配置来定义函数、键绑定、代码段等,那将非常方便。(或任何其他主要模式,这不是特定于组织模式)

我研究了克隆组织模式并对其进行了重命名,但这对我来说似乎太过分了

理想情况下,我想要这样的东西

对于标准组织模式

(使用包组织
:模式(“\\.org\\\”.org模式)
...
:绑定
(“s-f12”。做点什么)
)
以及我的演示模式

(使用包组织
:模式(“\\.orgp\\\”.org模式)
...
绑定:
(“s-f12”。做点别的)
)
当打开foo.orgp时,我会发现组织模式有一个替代配置。

您可以:

(defvar my-orgp-mode-map
  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "s-f12") 'do-something-else)
    map))

(define-derived-mode my-orgp-mode org-mode "OrgP"
  "A variant of Org mode specifically for my HTML5 presentations.")

然后使用
my orgp mode
匹配
\\\\.orgp\\\\'
的文件,像往常一样确定问题发布后答案显而易见。 使用

(定义派生模式组织表示模式组织模式“组织表示模式”
“组织模式的变体”
(defun runPresentationTool()
(互动)
(消息“这应该运行演示工具”)
)
)
(提供“组织演示模式”)

使用包组织表示模式

这把戏演得真好

哇,你比我快了11分钟。不过非常感谢。不要在
define derived mode
中使用
defun
(也不要在其他
defun
s或
defmacro
s中使用):它仍然具有全局效果,因此最好将
defun
移到外部,这样它“更诚实”。