[Mew-dist 1933] mew-sort.el ver 0.09
Takashi P.KATOH
p-katoh at example.com
1997年 9月 9日 (火) 16:36:18 JST
かとぺ です。
mew-sort.el version 0.09 です。
さんざん苦労した割に追加されたコードはわずかですが。
# mew-summaru-refile のように、複数の field を読めるようにし
# ようと思って一生懸命書いてたら、imsort は一つの field しか
# 見ない (らしい) ことに後で気付いた... f(^^;
主な変更点は以下の通りです。
1. mew-summary-sort-fields の仕様変更
'(("date" . "date") ("subject") ("x-sequence" . "num"))
のように指定するようになりました。
すでに .emacs などでカスタマイズしている人は変更して下さい
(t の部分があればそれを "date" にすれば良いはずです)。
詳しくは (describe-variable 'mew-summary-sort-fields) して下
さい (いいかげんな英語ですけど)。
2. minibuffer で mode も completion できるようにした
minibuffer で subject:text のようにすると mode を明示的に指
定できます。completion も可能です。
一部の関数は mew-minibuf.el, mew-complete.el にすぐ移動でき
るように書いてはありますが、移動の必要がなければ変更します
(関数, 変数の位置の変更とコメントの削除くらいですが)。
--
東北大学大学院 情報科学研究科 白鳥研究室 加藤 貴司
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-1997 Takashi P.KATOH
;;;
;;; This emacs lisp library confirms
;;; GNU GENERAL PUBLIC LICENSE Version 2.
;;;
;;; Author: Takashi P.KATOH <p-katoh at example.com>
;;; Created: Feb 6, 1996
;;; Revised: Sep 9, 1997
;;;
(defconst mew-sort-version "mew-sort.el version 0.09")
(require 'mew)
(defvar mew-summary-sort-fields
'(("date" . "date") ("subject") ("from") ("to") ("newsgroups")
("posted" . "date") ("x-sequence" . "num"))
"*List of fields for `mew-summary-sort'.
Each element is (FIELD-NAME) or (FIELD-NAME . MODE).
MODE is one of \"date\" (sort by chronological order) or
\"num\" (sort by numerical order) or
\"text\" (sort by alphabetical order).
(nil means \"text\").")
(defvar mew-sort-modes '("date" "num" "text"))
(defvar mew-summary-sort-last-field "date")
(defun mew-summary-sort-subr (msgs &optional method)
(let* ((folder (buffer-name)) (field) (mode)
(msgs (if (listp msgs) msgs (list msgs)))
(completion-ignore-case t)
(colonpair
(read-from-minibuffer
(concat "Sort " method (if method " ") "by?"
(if mew-summary-sort-last-field
(concat " (default " mew-summary-sort-last-field "): ")
": "))
"" mew-mini-sort-field-map nil mew-input-sort-field-hist)))
(setq colonpair (downcase (if (string-equal colonpair "")
mew-summary-sort-last-field colonpair))
mew-summary-sort-last-field colonpair
field (car (mew-header-split colonpair ?:))
mode (or (car (cdr (mew-header-split colonpair ?:)))
(cdr (assoc field mew-summary-sort-fields))
"text"))
(if (not (mew-summary-exclusive-p))
()
(mew-mark-clean-up)
(setq mew-summary-buffer-process t)
(message "Sorting %s by %s (mode=%s) ... " folder field mode)
(apply 'call-process mew-prog-imsort nil nil nil
(append
(list (concat "--src=" folder)
(concat "--field=" field)
(concat "--mode=" mode))
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)
(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"))
;; --> mew-minibuf.el ?
(defvar mew-mini-sort-field-map nil)
(defvar mew-input-sort-field-hist nil)
(if mew-mini-sort-field-map
()
(setq mew-mini-sort-field-map (make-sparse-keymap))
(define-key mew-mini-sort-field-map " " 'mew-complete-sort-field)
(define-key mew-mini-sort-field-map "\t" 'mew-complete-sort-field)
(define-key mew-mini-sort-field-map "\r" 'exit-minibuffer)
(define-key mew-mini-sort-field-map "\n" 'exit-minibuffer)
(define-key mew-mini-sort-field-map "\C-g" 'abort-recursive-edit)
(define-key mew-mini-sort-field-map "\M-p" 'previous-history-element)
(define-key mew-mini-sort-field-map "\M-n" 'next-history-element)
)
;; --> mew-complete.el ?
(defun mew-complete-sort-field ()
(interactive)
(let* ((mew-address-separator ", \t\n")
(word (or (mew-delete-backward-char) ""))
(field) (alist))
(if (string-match ":" (or word ""))
(progn
;; If WORD contains `:', change alist for completion.
(setq field (car (mew-header-split word ?:)))
(setq alist
(mapcar (lambda (str) (list (concat field ":" str)))
mew-sort-modes)))
;; Otherwise, alist is mew-summary-sort-fields itself.
(setq alist mew-summary-sort-fields))
(mew-complete word alist "field" nil)))
(provide 'mew-sort)
Mew-dist メーリングリストの案内