2009-04-16 25 views
4

define-generic-modeを使って新しいemacsモードを書こうとしています。私はいくつかのチュートリアルを見つけました。このチュートリアルではキーワードを(文字列として)どのように追加して強調表示するかを示しています。 define-generic-modeに正規表現を与えることで、それをキーワードとして一致するものをハイライトすることは可能ですか?define-generic-modeの正規表現とキーワードを一致させる

15/01/09の形式の日付に一致するものはすべて別のフォント(下線が付いていますが、別の色を使用します)で表示されるモードが必要です。

アイデア?

ロビン

答えて

7

は、ここで設定しdefine-generic-modeの例です

(make-face 'my-date-face) 
(set-face-attribute 'my-date-face nil :underline t) 
(set-face-attribute 'my-date-face nil :family "times") 
(set-face-attribute 'my-date-face nil :slant 'normal) 
(set-face-attribute 'my-date-face nil :height '340) 

(define-generic-mode my-date-mode 
    nil 
    nil 
    '(("\\([0-9]+/[0-9]+/[0-9]+\\)" 
    (1 'my-date-face))) 
    nil 
    nil) 

ああ、明らかに、によってモードを設定します。すべての日付を持っている正規表現は、例として選ばれたいくつかの属性を持つカスタムの顔を使ってフォント表示化。これは、オートモードアリス(define-generic-modeの5番目の引数)を介して自動的に行うことができます。

+0

返信いただきありがとうございます。私はこれを動作させるように見えることはできません。私はコードをコピーして、eval-bufferは正常に動作しますが、右のビットは下線を引いていません。何が問題なのか? – robintw

+1

(奇妙な、私の最初のコメントは失われた)。私はちょうど正しく動作するようにコードを編集しました。私は前のフォームをテストしたと思ったが、何らかの未知の理由で失敗した。この変種は、正規表現で '(1 'my-date-face)'を必要とする)サブ式を使用します。私は前のことがうまくいかなかった理由を知らない。 –

+0

ありがとうございます - 今は問題なく動作します。 :) – robintw

5

例えばメジャーモードでの警告としてFIXME、TODOやXXXを強調するために、フォント・ロック・アドオンのキーワードを使用して:

(dolist (mode '(c-mode 
    java-mode 
    cperl-mode 
    html-mode-hook 
    css-mode-hook 
    emacs-lisp-mode)) 
      (font-lock-add-keywords mode 
      '(("\\(XXX\\|FIXME\\|TODO\\)" 
      1 font-lock-warning-face prepend)))) 
関連する問題