[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 メーリングリストの案内