[Mew-dist 774] mew-sort.el ver 0.04 and patch for 1.67

Takashi P.KATOH p-katoh at example.com
1997年 3月 28日 (金) 21:20:54 JST


かとぺ%ほどよく忙しい (^^;@東北大です。

やっと Mew の version を 1.67 に上げました。
ってことで new mew-sort.el と patch for 1.67 です。
mew-sort.el の主な変更点は以下の通りです。

1. 
- "Subject" を sortm の引数として与えると Re: をはずして 
  sort してくれない
- "date" とすると datefield として扱ってくれない (たぶん)

という問題を回避するため、mew-summary-sort-fields は全て強制
的に小文字にして扱うようにした。
なお、内部で downcase しているので、いままで通り "Subject" 
としてもおっけーです。
(see Subject: [Mew-dist 668] Re: new mew-sort.el
     From: Kazutaka SHIGENO <shigeno at example.com>)

2.
mew-summary-sort で prefix なしの時 sort の対象を
「folder 内の全ての message」から「summary buffer に表示され
ている全ての message」に変更。
(see Subject: [Mew-dist 540] Re: new mew-sort.el
     From: SAKAI Kiyotaka <ksakai at example.com>)

-- 
  東北大学大学院 情報科学研究科 白鳥研究室    加藤 貴司
  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: March    28, 1997
;;;

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

(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 (null (mew-summary-exclusive-p))
	()
      (if (mew-summary-mark-exist-p (list mew-mark-rmm mew-mark-refile))
	  (if (mew-y-or-n-p
	       "Marked messages exist. Process mark before scan? ")
	      (mew-summary-exec)))
      (setq mew-summary-buffer-process t)
      (message "Sorting %s by %s ... " folder field)
      (if (cdr (assoc field mew-summary-sort-fields))
	  (apply 'call-process mew-prog-sortm nil nil nil
		 (append (list folder) msgs (list "-datefield" field)))
	(apply 'call-process mew-prog-sortm nil nil nil
	       (append (list folder)
		       msgs
		       (list "-textfield" field "-limit" "0"))))
      (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 folder (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)
-------------- next part --------------
--- mew-summary.el,orig	Wed Mar 26 17:04:01 1997
+++ mew-summary.el	Fri Mar 28 20:48:17 1997
@@ -34,6 +34,7 @@
     ["Refile" mew-summary-refile (equal major-mode 'mew-summary-mode)]
     ["Mark mark" mew-summary-mark-mark t]
     ["Mark hop" mew-summary-mark-hop t]
+    ["Sort marked msgs" mew-summary-mark-sort t]
     ["Undo" mew-summary-undo t]
     ["Undo all" mew-summary-undo-all t]
     ["Execute" mew-summary-exec (equal major-mode 'mew-summary-mode)]
@@ -157,6 +158,7 @@
   (define-key mew-summary-mode-map "mr"   'mew-summary-mark-regexp)
   (define-key mew-summary-mode-map "ma"   'mew-summary-mark-all)
   (define-key mew-summary-mode-map "mu"   'mew-summary-mark-undo-all)
+  (define-key mew-summary-mode-map "mS"   'mew-summary-mark-sort)
   (define-key mew-summary-mode-map "\C-c\C-k" 'mew-summary-kill-subprocess)
   ;;
   (if mew-xemacs-p
@@ -284,6 +286,7 @@
 m*	Change mark \"@\" into mark \"*\".
 m@	Change mark \"*\" into mark \"@\".
 ms	Swap mark \"@\" and \"*\".
+mS	Sort messages whose marks are \"*\".
 
 C-cC-s	Incremental search forward on the message buffer.
 C-cC-r	Incremental search backward on the message buffer.
@@ -1522,27 +1525,27 @@
 ;;; Sorting and Packing
 ;;;
 
-(defun mew-summary-sort ()    
-  (interactive)
-  (let ((folder (buffer-name)))
-    (if (null (mew-summary-exclusive-p))
-	()
-      (if (mew-summary-mark-exist-p (list mew-mark-rmm mew-mark-refile))
-	  (if (mew-y-or-n-p
-	       "Marked messages exist. Process mark before scan? ")
-	      (mew-summary-exec)))
-      (if (null (mew-y-or-n-p (format "Sort %s ? " folder)))
-	  ()
-	(setq mew-summary-buffer-process t)
-	(message "Sorting %s ... " folder)
-	(call-process mew-prog-sortm nil nil nil folder)
-	(message "Sorting %s ... done" folder)
-	(setq mew-summary-buffer-process nil)
-	(let ((buffer-read-only nil)) (erase-buffer))  ;; for update
-	(mew-summary-scan-body folder (mew-input-range folder))
-	)
-      )
-    ))
+;(defun mew-summary-sort ()    
+;  (interactive)
+;  (let ((folder (buffer-name)))
+;    (if (null (mew-summary-exclusive-p))
+;	()
+;      (if (mew-summary-mark-exist-p (list mew-mark-rmm mew-mark-refile))
+;	  (if (mew-y-or-n-p
+;	       "Marked messages exist. Process mark before scan? ")
+;	      (mew-summary-exec)))
+;      (if (null (mew-y-or-n-p (format "Sort %s ? " folder)))
+;	  ()
+;	(setq mew-summary-buffer-process t)
+;	(message "Sorting %s ... " folder)
+;	(call-process mew-prog-sortm nil nil nil folder)
+;	(message "Sorting %s ... done" folder)
+;	(setq mew-summary-buffer-process nil)
+;	(let ((buffer-read-only nil)) (erase-buffer))  ;; for update
+;	(mew-summary-scan-body folder (mew-input-range folder))
+;	)
+;      )
+;    ))
 
 (defun mew-summary-pack ()    
   (interactive)
--- mew.el,orig	Tue Mar 25 23:28:21 1997
+++ mew.el	Fri Mar 28 20:48:54 1997
@@ -926,6 +926,7 @@
 (require 'mew-refile)
 (require 'mew-ext)
 (require 'mew-fib)
+(require 'mew-sort)
 ;;;
 ;;; End of Mew
 ;;;


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