コメント内に書き散らかすメモとか

いろんなことを wiki のような hatena のような書式で書いてるんだけど、全部コメント色で見辛いとか思ってたら regexp-keyword-list なんてもんがあった。正規表現で指定して色つけれた。とりあえず

  • 見出し: * で始まる行
  • 箇条書き: -, +, \d.で始まる行
  • 定義?: 行頭から :単語:
  • コード: >|hoge| と、そこから ||< の間
  • 引用: >>> と <<< の間
  • 強調: *hoge* とか とか "hoge" とか 'spam' とか
  • 目印: TODO: とか FIXME: とか MEMO: とか

の色を変えてみた。

(defvar *wiki-like-regexp-keyword-list* nil)
(setf *wiki-like-regexp-keyword-list*
	  (compile-regexp-keyword-list
	   '(
		 ;; heading
		 ("^[ \t]*\\(\\*\\{2,\\}.+\\)$" nil (:color 10 0 :bold) :comment 1 1)
		 ("^[ \t]*\\(\\*\\{1\\}[^/\n]+\\)$" nil (:color 10 10 :bold) :comment 1 1)
		 ;; list
		 ("^[ \t]*\\-.+$" nil (:color 11) :comment)
		 ("^[ \t]*\\+.+$" nil (:color 11) :comment)
		 ("^[ \t]*[0-9]\\..+$" nil (:color 11) :comment)
		 ;; definition
		 ("^\\(\\:.+\\:\\)" nil (:color 12 0 :bold) :comment 1 1)
		 ;; code
		 ("^>|\\([^|]+\\)*|$" nil (:color 13 0 :bold) :comment 1 1)
		 ("\\b|\n\\(\\(?:.\\|\n\\)*\\)+?||<" nil (:color 13) :comment 1 1)
		 ;; quote
		 ("^>>>\n\\(\\(?:.\\|\n\\)+\\)\n<<<\n" nil (:color 14) :comment 1 1)
		 ;; strong
		 ("\\*[^\\*\n]\\{,44\\}\\*" nil (:color 11 0 :bold) :comment)
		 ("<[^>\n]\\{,44\\}>" nil (:color 11 0 :bold) :comment)
		 ;; little strong
		 ("\"[^\"\n]\\{,44\\}\"" nil (:color 11) :comment)
		 ("\'[^\'\n]\\{,44\\}\'" nil (:color 11) :comment)
		 ;; marked comments
		 ("\\(\\s<+[ \t]*\\(?:TODO:\\|MEMO:\\|FIXME:\\)\\)" nil (:color 13 10 :bold) :comment 1 1)
		 ))) ;|#

(defun wiki-color-comment ()
  (unless (local-variable-p 'regexp-keyword-list)
	(make-local-variable 'regexp-keyword-list))
  (setf regexp-keyword-list (append regexp-keyword-list *wiki-like-regexp-keyword-list*)))

(add-hook '*lisp-mode-hook* 'wiki-color-comment)

を siteinit.l に。.xyzzy でもたぶん動く。

ダメなとこ

/**
 * blah, blah, blah,,,
 */

とか全部見出しになりやがる

  • ちっと重いやも


追記: 24/Apr/2007
;; code の正規表現が重かったみたい。↓にしたら多少マシに。

		 ;; code
		 ("^>|\\([a-z\\-]+\\)*|$" nil (:color 10 0 :bold) :comment 1 1)
		 ("\\b|\n\\(\\(?:.\\|\n\\)+\\)||<" nil (:color 10 0) :comment 1 1)

あとコメント開始文字(lisp なら ";" とか) をてきとーに無視したいのだが \\sc ってのの使い方がヨクワカラナイ。モードごとに設定した方がいいやも。