[Mew-dist 1304] mew-sort.el ver 0.07 (Re: mew-1.86 & im-46 beta release)

Takashi P.KATOH p-katoh at example.com
1997年 7月 23日 (水) 14:20:46 JST


かとぺ@東北大です。

From: Hironori Ikura/伊倉 広徳 <hikura at example.com>
Subject: [Mew-dist 1287] Re: mew-1.86 & im-46 beta release
> 伊倉です。
>> (1) mew-sort.el を im-46 に合わせて頂けないでしょうか? > 加藤さん

今論文 (+ 慣れない英語) でひどく苦労しているのと、唯一 perl
5.004 が入っていたマシンがふっとんで、perl のインストールを
したりしていたので遅くなりました (_o_)

> imsort が  --field=* と、--mode=* の指定に変わったので、
> 現状では、
>   今まで --datefield に渡していたもの
>     →  --mode=date
>   今まで --textfield に渡していたもの
>     →  --mode=text
> と、固定でやってます。

mew-sort.el については基本的には伊倉さんのもので良いのですが、
見た目はもう少し綺麗になります。

ということで最後に付けます。
まだ Mew-1.86 をインストールしてないのでそちらでの確認はして
いないのですが、たぶんこれ + 伊倉さんのパッチ (mew.el.patch,
mew-summary.el.patch) で大丈夫でしょう。

-----

> 現状でも、--mode=num がありますし、将来、
> Subject の特殊な取り扱いなどの拡張があったときの
> 為に、--mode を指定する方法があった方がいいと思うのですが、

「Subject の...」の意味が良く分かりませんが、--mode を指定す
る方法については私も考えていました。

>   * いつでも、mode も聞いてくる

これは欝陶しいので個人的には避けたいです。

>   * optional-argument で、mode も指定できる

C-u ですか? これはすでに使っているので...
# 具体的な仕様があれば根本的に書き直す or キーバインドを変更
# する、も可ですが。

>   * field名の後に、例えば、':' や、'/' で区切って、
>     modeも指定できる
>     (ex.)  subject/text
>            x-sequence:num
> 個人的には、最後の案(':'などで区切って続ける)が気にいってます。

これはいいかもしれませんね。考えてみます。
# completion がちょっと面倒かも。


> 勿論、オプショナルとしておいて、デフォルトでは、
>   date は --mode=date に
>   それ以外は、--mode=text に
> とかしておくのがベターだと思います。
> # assoc で 指定できると、もっとベター?

この辺は現在の、

(defvar mew-summary-sort-fields
  '(("date" . t) ("subject") ("from") ("to") ("newsgroups") ("posted" . t))
  "*List of fields for `mew-summary-sort'.
Each element is (FIELD-NAME) or (FIELD-NAME . DATE-P).
If DATE-P is non-nil, messages will be sorted by chronological order.")

を

(defvar mew-summary-sort-fields
  '(("date" . date)             ; --mode=date
    ("x-sequence" . num)        ; --mode=num
    ("subject" . text)          ; --mode=text
    ("from" . text)))           ; default は --mode=text

のような感じ (でいいのかな?) に拡張しようと思ってます。

-- 
  東北大学大学院 情報科学研究科 白鳥研究室    加藤 貴司
  p-katoh at example.com / Takashi P.KATOH
  http://www.shiratori.riec.tohoku.ac.jp/~p-katoh/MAIL/

-------------- next part --------------
;;;			     mew-sort.el
;;;
;;;	     Copyright (C) 1996 and 1997  Takashi P.KATOH
;;;
;;;		   This emacs lisp library confirms
;;;		GNU GENERAL PUBLIC LICENSE Version 2.
;;;
;;; Author:  Takashi P.KATOH <p-katoh at example.com>
;;;          Kazuhiko Yamamoto <kazu at example.com>
;;; Created: Febraury  6, 1996
;;; Revised: July     22, 1997
;;;

(defconst mew-sort-version "mew-sort.el version 0.07")

(require 'mew)

(defvar mew-summary-sort-fields
  '(("date" . t) ("subject") ("from") ("to") ("newsgroups") ("posted" . t))
  "*List of fields for `mew-summary-sort'.
Each element is (FIELD-NAME) or (FIELD-NAME . DATE-P).
If DATE-P is non-nil, messages will be sorted by chronological order.")

(defvar mew-summary-sort-last-field "date")

(defun mew-summary-sort-subr (msgs &optional method)
  (let* ((folder (buffer-name))
	 (msgs (if (listp msgs) msgs (list msgs)))
	 (completion-ignore-case t)
	 (field
	  (completing-read
	   (concat "Sort " method (if method " ") "by?"
		   (if mew-summary-sort-last-field
		       (concat " (default " mew-summary-sort-last-field "): ")
		     ": ")) mew-summary-sort-fields)))
    (setq field
	  (downcase
	   (if (string-equal field "") mew-summary-sort-last-field field))
	  mew-summary-sort-last-field field)
    (if (not (mew-summary-exclusive-p))
	(message "Try later")
      (mew-mark-clean-up)
      (setq mew-summary-buffer-process t)
      (message "Sorting %s by %s ... " folder field)
      (apply 'call-process mew-prog-imsort nil nil nil
	     (append
	      (list (concat "--src=" folder)
		    (concat "--field=" field)
		    (if (cdr (assoc field mew-summary-sort-fields))
			"--mode=date" "--mode=text"))
	      msgs))
      (message "Sorting %s by %s ... done" folder field)
      (setq mew-summary-buffer-process nil)
      (let ((buffer-read-only nil)) (erase-buffer));; for update
      (mew-summary-scan-body mew-prog-imls
			     'mew-summary-mode
			     folder
			     mew-cs-scan
			     (mew-input-range folder))
      )
    ))

(defun mew-summary-sort (&optional arg)
  (interactive "P")
  (if arg
      (mew-summary-sort-region (region-beginning) (region-end) "region")
    (mew-summary-sort-region (point-min) (point-max))))

(defun mew-summary-sort-region (r1 r2 &optional method)
  (interactive "r")
  (let (from to msgs)
    (save-excursion
      (goto-char r1)
      (setq from
	    (or (mew-summary-message-number)
		(progn
		  (re-search-backward mew-summary-message-regex nil t nil)
		  (mew-summary-message-number))))
      (goto-char r2)
      (setq to
	    (or (mew-summary-message-number)
		(progn
		  (re-search-backward mew-summary-message-regex nil t nil)
		  (mew-summary-message-number))))
      (if (< (string-to-int from) (string-to-int to))
	  (mew-summary-sort-subr (concat from "-" to) method)
	(mew-summary-sort-subr (concat to "-" from) method)))))

(defun mew-summary-mark-sort (&optional r1 r2)
  (interactive)
  (mew-summary-sort-subr
   (mew-summary-mark-collect
    mew-mark-hop (or r1 (point-min)) (or r2 (point-max)))
   "marked messages"))

(provide 'mew-sort)


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