编辑当前的emacs主模式

时间:2012-03-04 21:55:52

标签: emacs

是否有emacs命令打开描述当前主要模式的文件?在运行中编辑语法高亮和缩进会很有用。

2 个答案:

答案 0 :(得分:6)

(find-library (file-name-sans-extension (symbol-file major-mode)))

将打开定义当前主模式的文件。字面上回答了你的问题。

但是,您不应该“动态”编辑此文件。 Emacs中的自定义不是通过直接编辑库源来实现的。而是在主模式挂钩或eval-after-load块中执行代码。

答案 1 :(得分:2)

其他人可能会提供一些预定义的功能,它可以完全按照您的要求运行,但我不知道。你可以在没有太多麻烦的情况下建立自己的。

  • major-mode绑定到定义当前主模式的符号
  • (symbol-file major-mode)将返回定义该符号
  • 的文件的路径

然而,它有点复杂。最有可能的是,大多数主要模式都是从字节编译的elisp文件中加载的,因此您获取的路径将是您不想打开的.elc文件。您可以检测到并切断最终字符,但您还需要处理gzip压缩文件。幸运的是,Emacs可以透明地打开一个gzip压缩文件,所以下面这样的东西基本上可以工作。我输入并在一种或两种模式下检查它,但基本上认为它未经测试。

(defun load-major-mode-file ()
  (interactive)
  (let* ((loaded-file (symbol-file major-mode))
         (root-el-file (if (string-match "\\.elc$" loaded-file) (substring loaded-file 0 -1) loaded-file)))
    (if (file-exists-p root-el-file) 
      (find-file root-el-file)
      (if (file-exists-p (concat root-el-file ".gz")) 
        (find-file (concat root-el-file ".gz"))
        (message "couldn't open major-mode file.")))))