2012-03-04 11 views
2

現在のメジャーモードを記述するファイルを開くemacsコマンドはありますか?シンタックスハイライトとインデントをオンザフライで編集すると便利です。現在のemacsメジャーモードを編集する

+1

'C-h m'ですが、それはあなたがしたいことを全くしません。 – doublep

+1

個人用の独自のメジャーモードフックを作成する必要があります。 emacsに付属のelispファイルを編集することはお勧めできません。これは、emacsをアップグレードするときに変更が失われるためです。 – Tom

答えて

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

は、現在のメジャーモードを定義するファイルを開きます。それは文字通りあなたの質問に答えます。

ただし、このファイルを「オンザフライ」で編集しないでください。 Emacsでのカスタマイズは、ライブラリソースを直接編集することによっては行えません。代わりに、コードはメジャーモードフックまたはeval-after-loadブロックで実行されます。

+0

'M-:'は式 – kindahero

+0

@ N.Nの上のevalへのキーバインディングです。私は完全に同意する、彼らはそれの価値がある - だけでなく、無意味な 'lang - 'を含めるようにしてください、そうでなければすべてが無視されます。 :( – sarnold

2

あなたが望むものとまったく同じ機能を持つ他の人がいるかもしれませんが、私はそれを認識していません。あなたはもなく多くのトラブルなしであなた自身を構築することができます。

  • major-modeが現在のメジャーモードを定義するシンボルにバインドされている
  • (symbol-file major-mode)は、そのシンボルに

を定義するファイルへのパスを返します。しかし、それはそれよりも少し複雑です。ほとんどのメジャーモードは、バイトコンパイルされたelispファイルからロードされるので、実際に開くことはしたくない.elcファイルになります。それを検出して最終文字を切り落とすことができますが、gzippedファイルも処理する必要があります。幸いにも、Emacsはgzippedファイルを透過的に開くことができるので、次のようなものが基本的に動作するはずです。私はそれをタイプインし、それを1つか2つのモードでチェックしましたが、基本的にはテストされていないと考えます。

(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."))))) 
関連する問題