gnus-eyecandy.el のアイコンを任意の位置に表示する

eyecandy のアイコン表示位置は `gnus-group-icon-at-end' で指定できる。これがデフォルトの non-nil なら行末に、nil ならば行頭に、という具合。

これだと見てくれツールとしてはちょっと自由度に欠けるし、なによりアイコンを行頭に表示するとグループ名のフェイスがおかしくなる。いやん。

そこでユーザ定義関数を使って任意の位置に表示できるようにしてみた。

(defun gnus-user-format-function-I (dummy)
    (let* ((group gnus-tmp-group)
	   (entry (gnus-group-entry group))
	   (unread (if (numberp (car entry)) (car entry) 0))
	   (active (gnus-active group))
	   (total (if active (1+ (- (cdr active) (car active))) 0))
	   (info (nth 2 entry))
	   (method (gnus-server-get-method group (gnus-info-method info)))
	   (marked (gnus-info-marks info))
	   (mailp (memq 'mail (assoc (symbol-name
				      (car (or method gnus-select-method)))
				     gnus-valid-select-methods)))
	   (level (or (gnus-info-level info) gnus-level-killed))
	   (score (or (gnus-info-score info) 0))
	   (ticked (gnus-range-length (cdr (assq 'tick marked))))
	   (group-age (gnus-group-timestamp-delta group))
	   (inhibit-read-only t)
	   (list gnus-group-icon-list)
	   (case-fold-search t))
      (while (and list
		  (not (eval (caar list))))
	(setq list (cdr list)))
      (if list
	  (let* ((file (cdar list))
		 (prop (gnus-group-icon-create-glyph " " file)))
	    (if prop
		(propertize " " 'display prop)
	      "  "))
	"  ")))

こうしといて `gnus-group-line-format' に "%uI" を加えるとその位置にアイコンがお出ましになる。これなら行頭に表示した場合でもフェイスがキチンと変わるしいいかんじ。