[Mew-dist 08085] Re: Goto next/prev message with same subject
根本 篤志 (Atsushi Nemoto)
nemoto at example.com
1999年 3月 15日 (月) 13:05:55 JST
>>>>> On Fri, 12 Mar 1999 20:42:11 +0900, 根本 篤志 (Atsushi Nemoto) <nemoto at example.com> said:
>>> 「カレントメッセージと同じサブジェクトを持つ前後のメッセージに移動」
>>> というコマンドがあると嬉しいです。
一応動くものができました。
(define-key mew-summary-mode-map "\M-p"
'mew-summary-same-subject-up)
(define-key mew-summary-mode-map "\M-n"
'mew-summary-same-subject-down)
として試してますが、それなりに使えるようです。ただし Form の %S 部分が
短いとまともに動かないかもしれません。
処理手順そのものがかなりインチキな上に見よう見まねのコーディングなので、
とても見苦しい代物だと思います。添削していただけると嬉しいです。
---
根本 篤志 (Atsushi Nemoto)
E-Mail: anemo at example.com (Home)
E-Mail: nemoto at example.com (Office) <= アドレスが変わりました
-------------- next part --------------
;; 同じサブジェクトのメッセージに移動
(defun mew-summary-same-subject-up ()
"Search this subject to above then display."
(interactive)
(mew-summary-same-subject 'up))
(defun mew-summary-same-subject-down ()
"Search this subject to below then display."
(interactive)
(mew-summary-same-subject 'down))
(defun mew-summary-same-subject (direction)
(mew-summary-msg-or-part
(let (subject)
(mew-summary-goto-message)
(mew-summary-display)
;; カレントメッセージのサブジェクトを取得
(save-excursion
(set-buffer (mew-buffer-message))
(setq subject (mew-header-get-value mew-subj:)))
(if (not subject)
(error "No searchable subject."))
;; サマリバッファのカレント行を見て検索文字列を切り詰め
(save-excursion
(end-of-line)
(let ((limit (point)))
(beginning-of-line)
(while (and (not (equal subject ""))
(not (search-forward subject limit t)))
(setq subject (substring subject 0 -1)))))
;; ML のラベル、"Re: " を削除
(while (or (string-match "\\[[a-zA-Z_0-9-]+[ :][0-9]+\\]\\s-*" subject)
(string-match (concat mew-reply-regex "\\s-*") subject))
(setq subject (replace-match "" nil nil subject)))
;; "Re: " が付く事を考えて短くする
(if (> (length subject) 24)
(setq subject (substring subject 0 -4)))
(if (equal subject "")
(error "No searchable subject."))
;; 同じサブジェクトをもつメッセージが見つかるまで
(let ((newsubject "")
(orgpoint (point)))
(while (not (string-match (regexp-quote subject) newsubject))
(if (eq direction 'down)
(end-of-line)
(beginning-of-line))
;; サマリバッファで検索
(if (not (let ((case-fold-search nil))
(if (eq direction 'down)
(search-forward subject nil t)
(search-backward subject nil t))))
(progn
(goto-char orgpoint)
(mew-summary-display)
(error (concat "Subject not found: " subject))))
(mew-summary-display)
;; 見つけたメッセージのサブジェクトを取得
(save-excursion
(set-buffer (mew-buffer-message))
(setq newsubject (mew-header-get-value mew-subj:))))))))
Mew-dist メーリングリストの案内