[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:02737] またまた den8viewer の小ネタ



den8viewer 愛好者の皆様こんにちは。山本です。

ヘッダを Mew のように表示する物を作って見ました。
(表示だけで、ファイルは変更しません)
使い方は、den8view をロードした後で評価されるように .xyzzy などに
書いておくだけです。

;----------------------------------------------------------------
;;;
;;; 表示するヘッダのリスト(お好みで編集してください)
;;;
;;  ( 識別する文字列 文字色 背景色 識別する文字の色 同じく背景色 )
;; 色は後ろから好きなだけ省略可能

(defvar *den8-display-headers*
  '(("Subject" 1 nil 4)
    ("From" 13 nil 4)
    ("To" 9 nil 4)
    ("Cc" 9 nil 4)
    ("Date" 15 nil 10)
    ("Reply-To" 15 nil 10)
    ("X-Mailer" 15 nil 10)
    ("X-Yzzy-Version" 15 nil 10)
   ))


;; Overwrite Original Function

(defun den8-parse-header ()
  (goto-char (point-min))
  (if (scan-buffer "\n--------\n")
      (let ((buffer-read-only nil))
	(declare (special buffer-read-only))
	(save-restriction
	  (narrow-to-region (point-min) (point))
	  (mapc #'(lambda (header)
		    (let ((headstr (concat "\n\\("
					   (car header)
					   ":\\) \\(.*\\(\n[ \t]+.*\\)*\\)"))
			  old-beg old-end)
		      (goto-char (point-min))
		      (when (or (scan-buffer (concat headstr "\n[^ \t]+")
					     :regexp t :case-fold t)
				(scan-buffer (concat headstr "$")
					     :regexp t :case-fold t))
			(setq old-beg (match-beginning 0)
			      old-end (match-end 2))
			(insert (prog1 (buffer-substring old-beg old-end)
				  (goto-char (point-max))))
			(delete-region old-beg old-end)
			(when (scan-buffer headstr
					   :regexp t :case-fold t)
			  (set-text-color (match-beginning 1) (match-end 1)
					  (nth 3 header) (nth 4 header))
			  (set-text-color (match-beginning 2) (point-max)
					  (nth 1 header) (nth 2 header))))))
		*den8-display-headers*))
	(set-buffer-modified-p nil)
	(goto-char (point-min))
	(scan-buffer (concat "^" (caar *den8-display-headers*)) :regexp t)
	(recenter 0)
	(setq den8-point-min (point)))
    (setq den8-point-min (point-min))))


-- 
山本真二   sinj@xxxxxxxxxxxx

Index Home