comparison lisp/mail/rmailkwd.el @ 37612:15fa3a1c6e88

(rmail-read-label): Be sure to work in the Rmail buffer. (rmail-set-label, rmail-next-labeled-message): Likewise.
author Gerd Moellmann <gerd@gnu.org>
date Tue, 08 May 2001 11:17:55 +0000
parents 22d0a2f6a374
children 253f761ad37b
comparison
equal deleted inserted replaced
37611:73f25c014d5c 37612:15fa3a1c6e88
1 ;;; rmailkwd.el --- part of the "RMAIL" mail reader for Emacs. 1 ;;; rmailkwd.el --- part of the "RMAIL" mail reader for Emacs.
2 2
3 ;; Copyright (C) 1985, 1988, 1994 Free Software Foundation, Inc. 3 ;; Copyright (C) 1985, 1988, 1994, 2001 Free Software Foundation, Inc.
4 4
5 ;; Maintainer: FSF 5 ;; Maintainer: FSF
6 ;; Keywords: mail 6 ;; Keywords: mail
7 7
8 ;; This file is part of GNU Emacs. 8 ;; This file is part of GNU Emacs.
58 (interactive (list (rmail-read-label "Remove label"))) 58 (interactive (list (rmail-read-label "Remove label")))
59 (rmail-set-label string nil)) 59 (rmail-set-label string nil))
60 60
61 ;;;###autoload 61 ;;;###autoload
62 (defun rmail-read-label (prompt) 62 (defun rmail-read-label (prompt)
63 (if (not rmail-keywords) (rmail-parse-file-keywords)) 63 (with-current-buffer rmail-buffer
64 (let ((result 64 (if (not rmail-keywords) (rmail-parse-file-keywords))
65 (completing-read (concat prompt 65 (let ((result
66 (if rmail-last-label 66 (completing-read (concat prompt
67 (concat " (default " 67 (if rmail-last-label
68 (symbol-name rmail-last-label) 68 (concat " (default "
69 "): ") 69 (symbol-name rmail-last-label)
70 ": ")) 70 "): ")
71 rmail-label-obarray 71 ": "))
72 nil 72 rmail-label-obarray
73 nil))) 73 nil
74 (if (string= result "") 74 nil)))
75 rmail-last-label 75 (if (string= result "")
76 (setq rmail-last-label (rmail-make-label result t))))) 76 rmail-last-label
77 (setq rmail-last-label (rmail-make-label result t))))))
77 78
78 (defun rmail-set-label (l state &optional n) 79 (defun rmail-set-label (l state &optional n)
79 (rmail-maybe-set-message-counters) 80 (with-current-buffer rmail-buffer
80 (if (not n) (setq n rmail-current-message)) 81 (rmail-maybe-set-message-counters)
81 (aset rmail-summary-vector (1- n) nil) 82 (if (not n) (setq n rmail-current-message))
82 (let* ((attribute (rmail-attribute-p l)) 83 (aset rmail-summary-vector (1- n) nil)
83 (keyword (and (not attribute) 84 (let* ((attribute (rmail-attribute-p l))
84 (or (rmail-keyword-p l) 85 (keyword (and (not attribute)
85 (rmail-install-keyword l)))) 86 (or (rmail-keyword-p l)
86 (label (or attribute keyword))) 87 (rmail-install-keyword l))))
87 (if label 88 (label (or attribute keyword)))
88 (let ((omax (- (buffer-size) (point-max))) 89 (if label
89 (omin (- (buffer-size) (point-min))) 90 (let ((omax (- (buffer-size) (point-max)))
90 (buffer-read-only nil) 91 (omin (- (buffer-size) (point-min)))
91 (case-fold-search t)) 92 (buffer-read-only nil)
92 (unwind-protect 93 (case-fold-search t))
93 (save-excursion 94 (unwind-protect
94 (widen) 95 (save-excursion
95 (goto-char (rmail-msgbeg n)) 96 (widen)
96 (forward-line 1) 97 (goto-char (rmail-msgbeg n))
97 (if (not (looking-at "[01],")) 98 (forward-line 1)
98 nil 99 (if (not (looking-at "[01],"))
99 (let ((start (1+ (point))) 100 nil
100 (bound)) 101 (let ((start (1+ (point)))
101 (narrow-to-region (point) (progn (end-of-line) (point))) 102 (bound))
102 (setq bound (point-max)) 103 (narrow-to-region (point) (progn (end-of-line) (point)))
103 (search-backward ",," nil t) 104 (setq bound (point-max))
104 (if attribute 105 (search-backward ",," nil t)
105 (setq bound (1+ (point))) 106 (if attribute
106 (setq start (1+ (point)))) 107 (setq bound (1+ (point)))
107 (goto-char start) 108 (setq start (1+ (point))))
108 ; (while (re-search-forward "[ \t]*,[ \t]*" nil t) 109 (goto-char start)
109 ; (replace-match ",")) 110 ; (while (re-search-forward "[ \t]*,[ \t]*" nil t)
110 ; (goto-char start) 111 ; (replace-match ","))
111 (if (re-search-forward 112 ; (goto-char start)
113 (if (re-search-forward
112 (concat ", " (rmail-quote-label-name label) ",") 114 (concat ", " (rmail-quote-label-name label) ",")
113 bound 115 bound
114 'move) 116 'move)
115 (if (not state) (replace-match ",")) 117 (if (not state) (replace-match ","))
116 (if state (insert " " (symbol-name label) ","))) 118 (if state (insert " " (symbol-name label) ",")))
117 (if (eq label rmail-deleted-label) 119 (if (eq label rmail-deleted-label)
118 (rmail-set-message-deleted-p n state))))) 120 (rmail-set-message-deleted-p n state)))))
119 (narrow-to-region (- (buffer-size) omin) (- (buffer-size) omax)) 121 (narrow-to-region (- (buffer-size) omin) (- (buffer-size) omax))
120 (if (= n rmail-current-message) (rmail-display-labels))))))) 122 (if (= n rmail-current-message) (rmail-display-labels))))))))
121 123
122 ;; Commented functions aren't used by RMAIL but might be nice for user 124 ;; Commented functions aren't used by RMAIL but might be nice for user
123 ;; packages that do stuff with RMAIL. Note that rmail-message-labels-p 125 ;; packages that do stuff with RMAIL. Note that rmail-message-labels-p
124 ;; is in rmail.el now. 126 ;; is in rmail.el now.
125 127
190 (interactive "p\nsMove to next msg with labels: ") 192 (interactive "p\nsMove to next msg with labels: ")
191 (if (string= labels "") 193 (if (string= labels "")
192 (setq labels rmail-last-multi-labels)) 194 (setq labels rmail-last-multi-labels))
193 (or labels 195 (or labels
194 (error "No labels to find have been specified previously")) 196 (error "No labels to find have been specified previously"))
197 (set-buffer rmail-buffer)
195 (setq rmail-last-multi-labels labels) 198 (setq rmail-last-multi-labels labels)
196 (rmail-maybe-set-message-counters) 199 (rmail-maybe-set-message-counters)
197 (let ((lastwin rmail-current-message) 200 (let ((lastwin rmail-current-message)
198 (current rmail-current-message) 201 (current rmail-current-message)
199 (regexp (concat ", ?\\(" 202 (regexp (concat ", ?\\("