2012-03-04 85 views
2

是否有emacs命令打開描述當前主模式的文件?即時編輯語法突出顯示和縮進會很有用。編輯當前的emacs主模式

+1

'C-h m',但這並不完全符合你的要求。 – doublep 2012-03-04 22:12:26

+1

您應該創建自己的主要模式掛鉤以進行個人定製。不建議編輯emacs附帶的elisp文件,因爲升級emacs時,您的更改將會丟失。 – Tom 2012-03-05 06:59:13

回答

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

將打開它定義了當前主要模式的文件。這從字面上回答你的問題。

但是,您不應該「即時」編輯此文件。 Emacs中的自定義不是通過直接編輯庫源來完成的。相反,代碼在主模式鉤子或eval-after-load塊中執行。

+0

M-:是與表達式 – kindahero 2012-03-05 04:32:48

+0

@ N.N的eval結合的關鍵。我完全同意,他們是非常值得的 - 只要確保包含無意義的'lang-',否則整個事情都會被忽略。 :( – sarnold 2012-03-05 12:16:36

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.")))))