複合語サーバが返した候補には色を付ける

先日の作業で skkserv2 と mecab-skkserv の検索結果にはアノテーションを付けて区別できるようにしてみたのだが、それだけでは自分には不足のようだ。

何度か SPC を押して候補一覧の状態になってしまえばアノテーションは候補の後ろに表示されるのですぐ気付くのだが、それ以前の段階だとアノテーションエコーエリアに表示されるだけ*1なのでうっかり見逃してしまうことがあるようなのだ*2

刺激が足りない。

そこで複合語アノテーションならば更に候補に色を付けてみることにした。`skk-treat-candidate-appearance-function' の雛形をちょっと変えただけだけど、この機能はこういう時に自由が効くのでとても重宝している。

(copy-face 'skk-henkan-face-default 'my-skk-compound-word-face)
(set-face-background 'my-skk-compound-word-face "misty rose")
(setq skk-treat-candidate-appearance-function
      (lambda (candidate listing-p)
	(let* ((value (skk-treat-strip-note-from-word candidate))
	       (cand (car value))
	       (note (cdr value))
	       (sep (if note
			(propertize (if (skk-annotation-display-p 'list)
					" ≒ "
				      " !")
				    'face 'skk-tut-do-it-face)
		      nil)))
	  (cond (note
		 (put-text-property
		  0 (length cand) 'face
		  (if (string-match "<\\(?:skkserv2\\|MeCab\\)>\\'" note)
		      'my-skk-compound-word-face
		    'skk-henkan-face-default)
		  cand)
		 (put-text-property 0 (length note)
				    'face 'skk-tut-hint-face note)
		 (cons cand (cons sep note)))
		(t
		 (put-text-property 0 (length cand)
				    'face 'skk-henkan-face-default cand)
		 cand)))))


さすがにここまでやっときゃ気付くだろう。

*1:そもそも、一覧になる前でもアノテーションをインラインに表示する選択肢があってもいいんじゃなかろうか

*2:念の為、個人辞書から "" と "" というアノテーションgrep して表示するスクリプトを cron に仕込んでたので気付いた