comparison lisp/mail/rmailsort.el @ 148:a099f0c77321

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Thu, 27 Dec 1990 20:45:59 +0000
parents d4c523560fe8
children 00792257e669
comparison
equal deleted inserted replaced
147:0f50f1badd75 148:a099f0c77321
27 (define-key rmail-mode-map "\C-c\C-s\C-d" 'rmail-sort-by-date) 27 (define-key rmail-mode-map "\C-c\C-s\C-d" 'rmail-sort-by-date)
28 (define-key rmail-mode-map "\C-c\C-s\C-s" 'rmail-sort-by-subject) 28 (define-key rmail-mode-map "\C-c\C-s\C-s" 'rmail-sort-by-subject)
29 (define-key rmail-mode-map "\C-c\C-s\C-a" 'rmail-sort-by-author) 29 (define-key rmail-mode-map "\C-c\C-s\C-a" 'rmail-sort-by-author)
30 (define-key rmail-mode-map "\C-c\C-s\C-r" 'rmail-sort-by-recipient) 30 (define-key rmail-mode-map "\C-c\C-s\C-r" 'rmail-sort-by-recipient)
31 (define-key rmail-mode-map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent) 31 (define-key rmail-mode-map "\C-c\C-s\C-c" 'rmail-sort-by-correspondent)
32 (define-key rmail-mode-map "\C-c\C-s\C-l" 'rmail-sort-by-size-lines)
32 33
33 (defun rmail-sort-by-date (reverse) 34 (defun rmail-sort-by-date (reverse)
34 "Sort messages of current Rmail file by date. 35 "Sort messages of current Rmail file by date.
35 If prefix argument REVERSE is non-nil, sort them in reverse order." 36 If prefix argument REVERSE is non-nil, sort them in reverse order."
36 (interactive "P") 37 (interactive "P")
94 (rmail-dont-reply-to 95 (rmail-dont-reply-to
95 (mail-strip-quoted-names 96 (mail-strip-quoted-names
96 (or (rmail-fetch-field msg (car fields)) "")))) 97 (or (rmail-fetch-field msg (car fields)) ""))))
97 (setq fields (cdr fields))) 98 (setq fields (cdr fields)))
98 ans)) 99 ans))
100
101 (defun rmail-sort-by-size-lines (reverse)
102 "Sort messages of current Rmail file by message size.
103 If prefix argument REVERSE is non-nil, sort them in reverse order."
104 (interactive "P")
105 (rmail-sort-messages reverse
106 (function
107 (lambda (msg)
108 (format "%9d"
109 (count-lines (rmail-msgbeg msgnum)
110 (rmail-msgend msgnum)))))))
99 111
100 112
101 (defun rmail-sort-messages (reverse keyfunc) 113 (defun rmail-sort-messages (reverse keyfunc)
102 "Sort messages of current Rmail file. 114 "Sort messages of current Rmail file.
103 1st argument REVERSE is non-nil, sort them in reverse order. 115 1st argument REVERSE is non-nil, sort them in reverse order.
111 (setq sort-lists 123 (setq sort-lists
112 (cons (cons (funcall keyfunc msgnum) ;A sort key. 124 (cons (cons (funcall keyfunc msgnum) ;A sort key.
113 (buffer-substring 125 (buffer-substring
114 (rmail-msgbeg msgnum) (rmail-msgend msgnum))) 126 (rmail-msgbeg msgnum) (rmail-msgend msgnum)))
115 sort-lists)) 127 sort-lists))
128 (if (zerop (% msgnum 10))
129 (message "Finding sort keys...%d" msgnum))
116 (setq msgnum (1+ msgnum)))) 130 (setq msgnum (1+ msgnum))))
117 (or reverse (setq sort-lists (nreverse sort-lists))) 131 (or reverse (setq sort-lists (nreverse sort-lists)))
118 (setq sort-lists 132 (setq sort-lists
119 (sort sort-lists 133 (sort sort-lists
120 (function 134 (function
121 (lambda (a b) 135 (lambda (a b)
122 (string-lessp (car a) (car b)))))) 136 (string-lessp (car a) (car b))))))
123 (if reverse (setq sort-lists (nreverse sort-lists))) 137 (if reverse (setq sort-lists (nreverse sort-lists)))
124 (message "Reordering buffer...") 138 (message "Reordering buffer...")
125 (delete-region (rmail-msgbeg 1) (rmail-msgend rmail-total-messages)) 139 (delete-region (rmail-msgbeg 1) (rmail-msgend rmail-total-messages))
126 (while sort-lists 140 (let ((msgnum 1))
127 (insert (cdr (car sort-lists))) 141 (while sort-lists
128 (setq sort-lists (cdr sort-lists))) 142 (insert (cdr (car sort-lists)))
143 (if (zerop (% msgnum 10))
144 (message "Reordering buffer...%d" msgnum))
145 (setq sort-lists (cdr sort-lists))
146 (setq msgnum (1+ msgnum))))
129 (rmail-set-message-counters) 147 (rmail-set-message-counters)
130 (rmail-show-message) 148 (rmail-show-message)))
131 ))
132 149
133 (defun rmail-fetch-field (msg field) 150 (defun rmail-fetch-field (msg field)
134 "Return the value of the header field FIELD of MSG. 151 "Return the value of the header field FIELD of MSG.
135 Arguments are MSG and FIELD." 152 Arguments are MSG and FIELD."
136 (let ((next (rmail-msgend msg))) 153 (let ((next (rmail-msgend msg)))
170 (substring date 187 (substring date
171 (match-beginning 1) (match-end 1)))) 188 (match-beginning 1) (match-end 1))))
172 ;; Time 189 ;; Time
173 (substring date (match-beginning 4) (match-end 4))) 190 (substring date (match-beginning 4) (match-end 4)))
174 ;; Cannot understand DATE string. 191 ;; Cannot understand DATE string.
175 date 192 date)))
176 )
177 ))
178 193
179 (defun rmail-date-full-year (year-string) 194 (defun rmail-date-full-year (year-string)
180 (if (<= (length year-string) 2) 195 (if (<= (length year-string) 2)
181 (concat "19" year-string) 196 (concat "19" year-string)
182 year-string)) 197 year-string))