annotate lisp/mail/mail-utils.el @ 45470:adebb58b0c5e

(x_write_glyphs): Clear phys_cursor_on_p if current phys_cursor's hpos is overwritten. This is still not completely correct, as it doesn't really make sense to use hpos at all to get the cursor glyph (as that is relative to the width of the characters on the line, which may have changed during the update).
author Kim F. Storm <storm@cua.dk>
date Wed, 22 May 2002 21:17:45 +0000
parents 588b5b177b8a
children 0d8b17d428b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; mail-utils.el --- utility functions used both by rmail and rnews
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
38597
16d2187c5524 (mail-strip-quoted-names): Replace text
Gerd Moellmann <gerd@gnu.org>
parents: 31880
diff changeset
3 ;; Copyright (C) 1985, 2001 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
5 ;; Maintainer: FSF
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
6 ;; Keywords: mail, news
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
13 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13590
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13590
diff changeset
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13590
diff changeset
23 ;; Boston, MA 02111-1307, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
24
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
25 ;;; Commentary:
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
26
5365
362f4c3bd99c Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 5289
diff changeset
27 ;; Utility functions for mail and netnews handling. These handle fine
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
28 ;; points of header parsing.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 845
diff changeset
29
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
30 ;;; Code:
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
31
285
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
32 ;;; We require lisp-mode to make sure that lisp-mode-syntax-table has
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
33 ;;; been initialized.
adb31fcccc2b *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 268
diff changeset
34 (require 'lisp-mode)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35
268
2dd411fe2f72 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 262
diff changeset
36 ;;;###autoload
21493
a22b10628409 Customize mail-use-rfc822.
Stephen Eglen <stephen@gnu.org>
parents: 20409
diff changeset
37 (defcustom mail-use-rfc822 nil "\
268
2dd411fe2f72 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 262
diff changeset
38 *If non-nil, use a full, hairy RFC822 parser on mail addresses.
2dd411fe2f72 *** empty log message ***
Brian Preble <rassilon@gnu.org>
parents: 262
diff changeset
39 Otherwise, (the default) use a smaller, somewhat faster, and
21493
a22b10628409 Customize mail-use-rfc822.
Stephen Eglen <stephen@gnu.org>
parents: 20409
diff changeset
40 often correct parser."
a22b10628409 Customize mail-use-rfc822.
Stephen Eglen <stephen@gnu.org>
parents: 20409
diff changeset
41 :type 'boolean
a22b10628409 Customize mail-use-rfc822.
Stephen Eglen <stephen@gnu.org>
parents: 20409
diff changeset
42 :group 'mail)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43
13055
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
44 ;; Returns t if file FILE is an Rmail file.
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
45 ;;;###autoload
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
46 (defun mail-file-babyl-p (file)
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
47 (let ((buf (generate-new-buffer " *rmail-file-p*")))
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
48 (unwind-protect
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
49 (save-excursion
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
50 (set-buffer buf)
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
51 (insert-file-contents file nil 0 100)
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
52 (looking-at "BABYL OPTIONS:"))
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
53 (kill-buffer buf))))
d94531fd96a4 (mail-file-babyl-p): Function moved from rmail.el and renamed.
Richard M. Stallman <rms@gnu.org>
parents: 12613
diff changeset
54
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55 (defun mail-string-delete (string start end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
56 "Returns a string containing all of STRING except the part
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
57 from START (inclusive) to END (exclusive)."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
58 (if (null end) (substring string 0 start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
59 (concat (substring string 0 start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
60 (substring string end nil))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
61
25271
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
62 ;;;###autoload
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
63 (defun mail-quote-printable (string &optional wrapper)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
64 "Convert a string to the \"quoted printable\" Q encoding.
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
65 If the optional argument WRAPPER is non-nil,
17506
3c0b3d55c1bc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17425
diff changeset
66 we add the wrapper characters =?ISO-8859-1?Q?....?=."
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
67 (let ((i 0) (result ""))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
68 (save-match-data
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
69 (while (string-match "[?=\"\200-\377]" string i)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
70 (setq result
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
71 (concat result (substring string i (match-beginning 0))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
72 (upcase (format "=%02x"
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
73 (aref string (match-beginning 0))))))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
74 (setq i (match-end 0)))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
75 (if wrapper
17506
3c0b3d55c1bc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17425
diff changeset
76 (concat "=?ISO-8859-1?Q?"
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
77 result (substring string i)
17506
3c0b3d55c1bc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17425
diff changeset
78 "?=")
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
79 (concat result (substring string i))))))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
80
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
81 (defun mail-unquote-printable-hexdigit (char)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
82 (if (>= char ?A)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
83 (+ (- char ?A) 10)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
84 (- char ?0)))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
85
25271
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
86 ;;;###autoload
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
87 (defun mail-unquote-printable (string &optional wrapper)
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
88 "Undo the \"quoted printable\" encoding.
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
89 If the optional argument WRAPPER is non-nil,
17506
3c0b3d55c1bc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17425
diff changeset
90 we expect to find and remove the wrapper characters =?ISO-8859-1?Q?....?=."
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
91 (save-match-data
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
92 (and wrapper
17506
3c0b3d55c1bc Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17425
diff changeset
93 (string-match "\\`=\\?ISO-8859-1\\?Q\\?\\([^?]*\\)\\?" string)
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
94 (setq string (match-string 1 string)))
25271
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
95 (let ((i 0) strings)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
96 (while (string-match "=\\(..\\|\n\\)" string i)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
97 (setq strings (cons (substring string i (match-beginning 0)) strings))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
98 (unless (= (aref string (match-beginning 1)) ?\n)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
99 (setq strings
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
100 (cons (make-string 1
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
101 (+ (* 16 (mail-unquote-printable-hexdigit
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
102 (aref string (match-beginning 1))))
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
103 (mail-unquote-printable-hexdigit
25271
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
104 (aref string (1+ (match-beginning 1))))))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
105 strings)))
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
106 (setq i (match-end 0)))
25271
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
107 (apply 'concat (nreverse (cons (substring string i) strings))))))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
108
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
109 ;;;###autoload
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
110 (defun mail-unquote-printable-region (beg end &optional wrapper)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
111 "Undo the \"quoted printable\" encoding in buffer from BEG to END.
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
112 If the optional argument WRAPPER is non-nil,
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
113 we expect to find and remove the wrapper characters =?ISO-8859-1?Q?....?=."
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
114 (interactive "r\nP")
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
115 (save-match-data
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
116 (save-excursion
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
117 (save-restriction
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
118 (narrow-to-region beg end)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
119 (goto-char (point-min))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
120 (when (and wrapper
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
121 (looking-at "\\`=\\?ISO-8859-1\\?Q\\?\\([^?]*\\)\\?"))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
122 (delete-region (match-end 1) end)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
123 (delete-region (point) (match-beginning 1)))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
124 (while (re-search-forward "=\\(..\\|\n\\)" nil t)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
125 (goto-char (match-end 0))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
126 (replace-match
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
127 (if (= (char-after (match-beginning 1)) ?\n)
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
128 ""
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
129 (make-string 1
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
130 (+ (* 16 (mail-unquote-printable-hexdigit
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
131 (char-after (match-beginning 1))))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
132 (mail-unquote-printable-hexdigit
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
133 (char-after (1+ (match-beginning 1)))))))
0d9fd0e4f7a3 (mail-unquote-printable): Make it autoload.
Karl Heuer <kwzh@gnu.org>
parents: 22949
diff changeset
134 t t))))))
17425
10076111abf2 (mail-quote-printable, mail-unquote-printable)
Richard M. Stallman <rms@gnu.org>
parents: 17258
diff changeset
135
44033
588b5b177b8a Eliminate compilation warnings due to `rfc822-addresses'.
Paul Reilly <pmr@pajato.com>
parents: 44026
diff changeset
136 (eval-when-compile (require 'rfc822))
588b5b177b8a Eliminate compilation warnings due to `rfc822-addresses'.
Paul Reilly <pmr@pajato.com>
parents: 44026
diff changeset
137
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 (defun mail-strip-quoted-names (address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 "Delete comments and quoted strings in an address list ADDRESS.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 Also delete leading/trailing whitespace and replace FOO <BAR> with just BAR.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 Return a modified address list."
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
142 (if (null address)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
143 nil
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
144 (if mail-use-rfc822
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
145 (progn (require 'rfc822)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
146 (mapconcat 'identity (rfc822-addresses address) ", "))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
147 (let (pos)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
149 ;; Detect nested comments.
15439
b549210f6989 (mail-strip-quoted-names): `"' is not special inside an RFC 822 comment.
Richard M. Stallman <rms@gnu.org>
parents: 14989
diff changeset
150 (if (string-match "[ \t]*(\\([^)\\]\\|\\\\.\\|\\\\\n\\)*(" address)
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
151 ;; Strip nested comments.
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
152 (with-current-buffer (get-buffer-create " *temp*")
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
153 (erase-buffer)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
154 (insert address)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
155 (set-syntax-table lisp-mode-syntax-table)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
156 (goto-char 1)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
157 (while (search-forward "(" nil t)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
158 (forward-char -1)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
159 (skip-chars-backward " \t")
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
160 (delete-region (point)
3118
e7dd24a618fb (mail-strip-quoted-names): Catch errors from forward-sexp.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
161 (save-excursion
e7dd24a618fb (mail-strip-quoted-names): Catch errors from forward-sexp.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
162 (condition-case ()
e7dd24a618fb (mail-strip-quoted-names): Catch errors from forward-sexp.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
163 (forward-sexp 1)
e7dd24a618fb (mail-strip-quoted-names): Catch errors from forward-sexp.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
164 (error (goto-char (point-max))))
e7dd24a618fb (mail-strip-quoted-names): Catch errors from forward-sexp.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
165 (point))))
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
166 (setq address (buffer-string))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
167 (erase-buffer))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
168 ;; Strip non-nested comments an easier way.
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
169 (while (setq pos (string-match
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
170 ;; This doesn't hack rfc822 nested comments
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
171 ;; `(xyzzy (foo) whinge)' properly. Big deal.
15439
b549210f6989 (mail-strip-quoted-names): `"' is not special inside an RFC 822 comment.
Richard M. Stallman <rms@gnu.org>
parents: 14989
diff changeset
172 "[ \t]*(\\([^)\\]\\|\\\\.\\|\\\\\n\\)*)"
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
173 address))
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
174 (setq address (replace-match "" nil nil address 0))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175
22002
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
176 ;; strip surrounding whitespace
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
177 (string-match "\\`[ \t\n]*" address)
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
178 (setq address (substring address
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
179 (match-end 0)
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
180 (string-match "[ \t\n]*\\'" address
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
181 (match-end 0))))
c40d3d44e6fd (mail-strip-quoted-names):
Richard M. Stallman <rms@gnu.org>
parents: 21907
diff changeset
182
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
183 ;; strip `quoted' names (This is supposed to hack `"Foo Bar" <bar@host>')
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
184 (setq pos 0)
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
185 (while (setq pos (string-match
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
186 "\\([ \t]?\\)\\([ \t]*\"\\([^\"\\]\\|\\\\.\\|\\\\\n\\)*\"[ \t\n]*\\)"
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
187 address pos))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
188 ;; If the next thing is "@", we have "foo bar"@host. Leave it.
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
189 (if (and (> (length address) (match-end 0))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
190 (= (aref address (match-end 0)) ?@))
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
191 (setq pos (match-end 0))
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
192 ;; Otherwise discard the "..." part.
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
193 (setq address (replace-match "" nil nil address 2))))
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
194 ;; If this address contains <...>, replace it with just
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
195 ;; the part between the <...>.
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
196 (while (setq pos (string-match "\\(,\\s-*\\|\\`\\)\\([^,]*<\\([^>,:]*\\)>[^,]*\\)\\(\\s-*,\\|\\'\\)"
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
197 address))
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
198 (setq address (replace-match (match-string 3 address)
38597
16d2187c5524 (mail-strip-quoted-names): Replace text
Gerd Moellmann <gerd@gnu.org>
parents: 31880
diff changeset
199 nil 'literal address 2)))
477
ab9a55b26bd4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 285
diff changeset
200 address))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201
44026
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
202 ;;; The following piece of ugliness is legacy code. The name was an
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
203 ;;; unfortunate choice --- a flagrant violation of the Emacs Lisp
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
204 ;;; coding conventions. `mail-dont-reply-to' would have been
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
205 ;;; infinitely better. Also, `rmail-dont-reply-to-names' might have
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
206 ;;; been better named `mail-dont-reply-to-names' and sourced from this
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
207 ;;; file instead of in rmail.el. Yuck. -pmr
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
208 (defun rmail-dont-reply-to (destinations)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
209 "Prune addresses from DESTINATIONS, a list of recipient addresses.
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
210 All addresses matching `rmail-dont-reply-to-names' are removed from
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
211 the comma-separated list. The pruned list is returned."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 (if (null rmail-dont-reply-to-names)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 (setq rmail-dont-reply-to-names
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214 (concat (if rmail-default-dont-reply-to-names
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 (concat rmail-default-dont-reply-to-names "\\|")
44026
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
216 "")
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
217 (if (and user-mail-address
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
218 (not (equal user-mail-address user-login-name)))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
219 (concat (regexp-quote user-mail-address) "\\|")
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
220 "")
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
221 (concat (regexp-quote user-login-name) "\\>"))))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
222 ;; Split up DESTINATIONS and match each element separately.
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
223 (let ((start-pos 0) (cur-pos 0)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
224 (case-fold-search t))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
225 (while start-pos
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
226 (setq cur-pos (string-match "[,\"]" destinations cur-pos))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
227 (if (and cur-pos (equal (match-string 0 destinations) "\""))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
228 ;; Search for matching quote.
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
229 (let ((next-pos (string-match "\"" destinations (1+ cur-pos))))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
230 (if next-pos
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
231 (setq cur-pos (1+ next-pos))
30333
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
232 ;; If the open-quote has no close-quote,
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
233 ;; delete the open-quote to get something well-defined.
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
234 ;; This case is not valid, but it can happen if things
6c60ac6cf8b6 (mail-strip-quoted-names): Handle case where <...> appears inside "...".
Richard M. Stallman <rms@gnu.org>
parents: 27682
diff changeset
235 ;; are weird elsewhere.
44026
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
236 (setq destinations (concat (substring destinations 0 cur-pos)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
237 (substring destinations (1+ cur-pos))))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
238 (setq cur-pos start-pos)))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
239 (let* ((address (substring destinations start-pos cur-pos))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
240 (naked-address (mail-strip-quoted-names address)))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
241 (if (string-match rmail-dont-reply-to-names naked-address)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
242 (setq destinations (concat (substring destinations 0 start-pos)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
243 (and cur-pos (substring destinations
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
244 (1+ cur-pos))))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
245 cur-pos start-pos)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
246 (setq cur-pos (and cur-pos (1+ cur-pos))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
247 start-pos cur-pos))))))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
248 ;; get rid of any trailing commas
44033
588b5b177b8a Eliminate compilation warnings due to `rfc822-addresses'.
Paul Reilly <pmr@pajato.com>
parents: 44026
diff changeset
249 (let ((pos (string-match "[ ,\t\n]*\\'" destinations)))
588b5b177b8a Eliminate compilation warnings due to `rfc822-addresses'.
Paul Reilly <pmr@pajato.com>
parents: 44026
diff changeset
250 (if pos
588b5b177b8a Eliminate compilation warnings due to `rfc822-addresses'.
Paul Reilly <pmr@pajato.com>
parents: 44026
diff changeset
251 (setq destinations (substring destinations 0 pos))))
44026
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
252 ;; remove leading spaces. they bother me.
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
253 (if (string-match "\\(\\s \\|,\\)*" destinations)
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
254 (substring destinations (match-end 0))
55bcbf42cf3f (rmail-dont-reply-to): Overhaul to correctly apply the regular
Paul Reilly <pmr@pajato.com>
parents: 38597
diff changeset
255 destinations))
27460
cccffb3304b3 (rmail-dont-reply-to): Replace matched
Gerd Moellmann <gerd@gnu.org>
parents: 25271
diff changeset
256
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257
5289
4e000b7b285a (mail-fetch-field): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 5095
diff changeset
258 ;;;###autoload
16952
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
259 (defun mail-fetch-field (field-name &optional last all list)
22949
3f75d6c8ef33 (mail-fetch-field): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 22710
diff changeset
260 "Return the value of the header field whose type is FIELD-NAME.
3f75d6c8ef33 (mail-fetch-field): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 22710
diff changeset
261 The buffer is expected to be narrowed to just the header of the message.
3f75d6c8ef33 (mail-fetch-field): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 22710
diff changeset
262 If second arg LAST is non-nil, use the last field of type FIELD-NAME.
16952
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
263 If third arg ALL is non-nil, concatenate all such fields with commas between.
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
264 If 4th arg LIST is non-nil, return a list of all such fields."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
265 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
266 (goto-char (point-min))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
267 (let ((case-fold-search t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
268 (name (concat "^" (regexp-quote field-name) "[ \t]*:[ \t]*")))
16952
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
269 (if (or all list)
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
270 (let ((value (if all "")))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
271 (while (re-search-forward name nil t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 (let ((opoint (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (while (progn (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
274 (looking-at "[ \t]")))
5095
976d7492e00e (mail-fetch-field): Exclude trailing whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 4022
diff changeset
275 ;; Back up over newline, then trailing spaces or tabs
976d7492e00e (mail-fetch-field): Exclude trailing whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 4022
diff changeset
276 (forward-char -1)
14989
7bba84af4b94 (mail-fetch-field): Use skip-chars-backward
Richard M. Stallman <rms@gnu.org>
parents: 14660
diff changeset
277 (skip-chars-backward " \t" opoint)
16952
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
278 (if list
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
279 (setq value (cons (buffer-substring-no-properties
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
280 opoint (point))
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
281 value))
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
282 (setq value (concat value
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
283 (if (string= value "") "" ", ")
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
284 (buffer-substring-no-properties
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
285 opoint (point)))))))
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
286 (if list
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
287 value
ba0d48943e13 (mail-fetch-field): New arg LIST.
Richard M. Stallman <rms@gnu.org>
parents: 16062
diff changeset
288 (and (not (string= value "")) value)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289 (if (re-search-forward name nil t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
290 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291 (if last (while (re-search-forward name nil t)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
292 (let ((opoint (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
293 (while (progn (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
294 (looking-at "[ \t]")))
5095
976d7492e00e (mail-fetch-field): Exclude trailing whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 4022
diff changeset
295 ;; Back up over newline, then trailing spaces or tabs
976d7492e00e (mail-fetch-field): Exclude trailing whitespace.
Richard M. Stallman <rms@gnu.org>
parents: 4022
diff changeset
296 (forward-char -1)
14989
7bba84af4b94 (mail-fetch-field): Use skip-chars-backward
Richard M. Stallman <rms@gnu.org>
parents: 14660
diff changeset
297 (skip-chars-backward " \t" opoint)
12613
1243b1f01079 (mail-fetch-field): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents: 5914
diff changeset
298 (buffer-substring-no-properties opoint (point)))))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
300 ;; Parse a list of tokens separated by commas.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 ;; It runs from point to the end of the visible part of the buffer.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 ;; Whitespace before or after tokens is ignored,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 ;; but whitespace within tokens is kept.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
304 (defun mail-parse-comma-list ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
305 (let (accumulated
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
306 beg)
20409
87d7cc50d029 (mail-parse-comma-list):
Karl Heuer <kwzh@gnu.org>
parents: 19563
diff changeset
307 (skip-chars-forward " \t\n")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
308 (while (not (eobp))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309 (setq beg (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
310 (skip-chars-forward "^,")
20409
87d7cc50d029 (mail-parse-comma-list):
Karl Heuer <kwzh@gnu.org>
parents: 19563
diff changeset
311 (skip-chars-backward " \t\n")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 (setq accumulated
18204
0634e43b52c8 (mail-parse-comma-list): Use buffer-substring-no-properties.
Richard M. Stallman <rms@gnu.org>
parents: 18082
diff changeset
313 (cons (buffer-substring-no-properties beg (point))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 accumulated))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
315 (skip-chars-forward "^,")
20409
87d7cc50d029 (mail-parse-comma-list):
Karl Heuer <kwzh@gnu.org>
parents: 19563
diff changeset
316 (skip-chars-forward ", \t\n"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317 accumulated))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
318
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 (defun mail-comma-list-regexp (labels)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
320 (let (pos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
321 (setq pos (or (string-match "[^ \t]" labels) 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
322 ;; Remove leading and trailing whitespace.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
323 (setq labels (substring labels pos (string-match "[ \t]*$" labels pos)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
324 ;; Change each comma to \|, and flush surrounding whitespace.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
325 (while (setq pos (string-match "[ \t]*,[ \t]*" labels))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
326 (setq labels
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
327 (concat (substring labels 0 pos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
328 "\\|"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
329 (substring labels (match-end 0))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
330 labels)
4022
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
331
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
332 (defun mail-rfc822-time-zone (time)
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
333 (let* ((sec (or (car (current-time-zone time)) 0))
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
334 (absmin (/ (abs sec) 60)))
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
335 (format "%c%02d%02d" (if (< sec 0) ?- ?+) (/ absmin 60) (% absmin 60))))
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
336
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
337 (defun mail-rfc822-date ()
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
338 (let* ((time (current-time))
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
339 (s (current-time-string time)))
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
340 (string-match "[^ ]+ +\\([^ ]+\\) +\\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)" s)
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
341 (concat (substring s (match-beginning 2) (match-end 2)) " "
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
342 (substring s (match-beginning 1) (match-end 1)) " "
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
343 (substring s (match-beginning 4) (match-end 4)) " "
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
344 (substring s (match-beginning 3) (match-end 3)) " "
a3d3d7eef5ce (mail-rfc822-time-zone, mail-rfc822-date): New fns.
Richard M. Stallman <rms@gnu.org>
parents: 3118
diff changeset
345 (mail-rfc822-time-zone time))))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 477
diff changeset
346
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 477
diff changeset
347 (provide 'mail-utils)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 477
diff changeset
348
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
349 ;;; mail-utils.el ends here