[Mew-dist 17242] Re: C-c C-l で 未Save状態

Hideyuki SHIRAI ( 白井秀行 ) shirai at example.com
2001年 4月 26日 (木) 14:13:11 JST


From: SUGIMORI (杉森 隆行) <taro at example.com> さん曰く
Subject: [Mew-dist 17240] C-c C-l で 未Save状態
Message-ID: <20010426.134204.112063003.taro at example.com>
Date: Thu, 26 Apr 2001 13:42:17 +0900

杉森> ささいなことなのですが、Draftモードで、
杉森> メール編集中にC-cC-lを実行すると
杉森> Save済だったのに、未Save状態になってしまいます。(正確な用語を知らない。)

## (buffer-modified-p) が nil から t になる(ってこれじゃ用語じゃないよね)

杉森> になってしまいます。C-cC-lって色をつけ直すだけですよね?

色をつけるために、buffer をいじっていますから :-)

杉森> ちょっと気持ち悪い。。。。

(defun mew-draft-rehighlight ()
  "Highlight header and body again."
  (interactive)
  (let ((mod (buffer-modified-p)))
    (mew-highlight-header)
    (mew-draft-header-keymap)
    (save-excursion
      (let ((beg (progn (goto-char (mew-header-end)) (forward-line) (point)))
	    (end (or (mew-attach-begin) (point-max))))
	(mew-highlight-body-region beg end 'draft 'rehighlight)))
    (set-buffer-modified-p mod)))

こんな感じにすると、(きっと)大丈夫です。

# けど、気にしないだけでもいいと思うけど。

P.S.
私が原因なので、

00Changes> TODO:
00Changes>   - highlight header in Draft

がとっても気になっているのですが、解決策の方策の一つとして、今使っ
ている設定を出しておきます。

# ぼくの環境では問題なく動いているけど、今1000歩。


(defvar mew-draft-repaint-timer-id nil)
(defvar mew-draft-repaint-timer-interval 0.25)
(defvar mew-draft-repaint-use-tamago-check (locate-library "egg"))
(defvar mew-draft-repaint-use-body (> emacs-major-version 20))
;; Emacs-20 だとちょっと変。

(add-hook 'mew-draft-mode-hook 'mew-draft-repaint-on)

(defun mew-draft-repaint-on ()
  (unless mew-draft-repaint-timer-id
    (setq mew-draft-repaint-timer-id
	  (run-with-idle-timer mew-draft-repaint-timer-interval t 'mew-draft-repaint))))

(defmacro mew-draft-repaint-use-tamago ()
  (and mew-draft-repaint-use-tamago-check
       (boundp 'its-fence-mode) (fboundp 'egg-get-backend)))
  
(if (featurep 'xemacs)
    (defmacro mew-draft-repaint-region-p ()
      (and zmacs-regions (region-exists-p)))
  (defmacro mew-draft-repaint-region-p ()
    (and transient-mark-mode mark-active)))

(defun mew-draft-repaint ()
  (if (eq major-mode 'mew-draft-mode)
      ;; region が存在したり tamago 中は実行しない
      (unless (or (not (buffer-modified-p))
		  (mew-draft-repaint-region-p)
		  (and (mew-draft-repaint-use-tamago)
		       (or its-fence-mode (egg-get-backend (point)))))
	(let ((undo-list buffer-undo-list))
	  ;; repaint する
	  (cond
	   ((mew-in-header-p)
	    (mew-highlight-header)
	    (mew-draft-header-keymap))
	   ((and mew-draft-repaint-use-body
		 (not (mew-in-attach-p)))
	    (save-excursion
	      (let ((beg (progn (goto-char (mew-header-end))
				(forward-line) (point)))
		    (end (or (mew-attach-begin) (point-max))))
		(mew-highlight-body-region beg end 'draft 'rehighlight)))))
	  (setq buffer-undo-list undo-list)))
    ;; draft buffer が無くなっていたら timer を止める
    (when mew-draft-repaint-timer-id
      (let ((blst (buffer-list))
	    (draftregex (concat "^" (regexp-quote mew-draft-folder) "/[1-9][0-9]*$")))
	(unless
	    (catch 'det
	      (while blst
		(if (string-match draftregex (buffer-name (car blst)))
		    (throw 'det t)
		  (setq blst (cdr blst)))))
	  (cancel-timer mew-draft-repaint-timer-id)
	  (setq mew-draft-repaint-timer-id nil))))))



Mew-dist メーリングリストの案内