Mercurial > emacs
annotate lisp/mail/mailalias.el @ 72550:666bd542be19
(get_window_cursor_type): Replace BOX cursor on images
with a hollow box cursor if image is larger than 32x32 (or the default
frame font if that is bigger). Replace any other cursor on images
with hollow box cursor, as redisplay doesn't support bar and hbar
cursors on images.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Sun, 27 Aug 2006 22:23:07 +0000 |
parents | 067115a6e738 |
children | f7702c5f335d c5406394f567 |
rev | line source |
---|---|
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
1 ;;; mailalias.el --- expand and complete mailing address aliases |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
474
diff
changeset
|
2 |
64754
fafd692d1e40
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64085
diff
changeset
|
3 ;; Copyright (C) 1985, 1987, 1995, 1996, 1997, 2002, 2003, |
68648
067115a6e738
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
65117
diff
changeset
|
4 ;; 2004, 2005, 2006 Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
811
diff
changeset
|
5 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
6 ;; Maintainer: FSF |
811
e694e0879463
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
7 ;; Keywords: mail |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
8 |
53 | 9 ;; This file is part of GNU Emacs. |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; 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
|
13 ;; the Free Software Foundation; either version 2, or (at your option) |
53 | 14 ;; any later version. |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
14169 | 22 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
64085 | 23 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
24 ;; Boston, MA 02110-1301, USA. | |
53 | 25 |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
26 ;;; Commentary: |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
27 |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
28 ;; Basic functions for defining and expanding mail aliases. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
29 ;; These seal off the interface to the alias-definition parts of a |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
30 ;; .mailrc file formatted for BSD's Mail or USL's mailx. |
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1448
diff
changeset
|
31 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
659
diff
changeset
|
32 ;;; Code: |
53 | 33 |
8801
eee06aef6f56
Require sendmail. Delete redundant defvar.
Karl Heuer <kwzh@gnu.org>
parents:
8494
diff
changeset
|
34 (require 'sendmail) |
1448
99fb20ef1a17
(mail-aliases): Add definition here.
Richard M. Stallman <rms@gnu.org>
parents:
1434
diff
changeset
|
35 |
18161 | 36 (defgroup mailalias nil |
64036
f76eec5e4eee
(mailalias): Finish `defgroup' description with period.
Juanma Barranquero <lekktu@gmail.com>
parents:
62620
diff
changeset
|
37 "Expanding mail aliases." |
18161 | 38 :group 'mail) |
39 | |
40 (defcustom mail-passwd-files '("/etc/passwd") | |
41 "*List of files from which to determine valid user names." | |
42 :type '(repeat string) | |
43 :group 'mailalias) | |
44 | |
45 (defcustom mail-passwd-command nil | |
46 "*Shell command to retrieve text to add to `/etc/passwd', or nil." | |
47 :type '(choice string (const nil)) | |
48 :group 'mailalias) | |
49 | |
50 (defvar mail-directory-names t | |
51 "Alist of mail address directory entries. | |
52 When t this still needs to be initialized.") | |
53 | |
54 (defvar mail-address-field-regexp | |
55 "^\\(Resent-\\)?\\(To\\|From\\|CC\\|BCC\\|Reply-to\\):") | |
56 | |
57 (defcustom mail-complete-alist | |
18607
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
58 ;; Don't use backquote here; we don't want backquote to get loaded |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
59 ;; just because of loading this file. |
21752
122b15805e79
(mail-complete-alist): Don't refer to mail-address-field-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
20810
diff
changeset
|
60 ;; Don't refer to mail-address-field-regexp here; |
122b15805e79
(mail-complete-alist): Don't refer to mail-address-field-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
20810
diff
changeset
|
61 ;; that confuses some things such as cus-dep.el. |
122b15805e79
(mail-complete-alist): Don't refer to mail-address-field-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
20810
diff
changeset
|
62 (cons '("^\\(Resent-\\)?\\(To\\|From\\|CC\\|BCC\\|Reply-to\\):" |
122b15805e79
(mail-complete-alist): Don't refer to mail-address-field-regexp.
Richard M. Stallman <rms@gnu.org>
parents:
20810
diff
changeset
|
63 . (mail-get-names pattern)) |
18607
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
64 '(("Newsgroups:" . (if (boundp 'gnus-active-hashtb) |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
65 gnus-active-hashtb |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
66 (if (boundp news-group-article-assoc) |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
67 news-group-article-assoc))) |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
68 ("Followup-To:" . (mail-sentto-newsgroups)) |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
69 ;;("Distribution:" ???) |
a7dd2801b909
(mail-complete-alist): Don't use backquote.
Richard M. Stallman <rms@gnu.org>
parents:
18168
diff
changeset
|
70 )) |
18161 | 71 "*Alist of header field and expression to return alist for completion. |
72 The expression may reference the variable `pattern' | |
73 which will hold the string being completed. | |
74 If not on matching header, `mail-complete-function' gets called instead." | |
24172
0e451bef1fe0
(mail-complete-alist): Use alist as customize
Andreas Schwab <schwab@suse.de>
parents:
23356
diff
changeset
|
75 :type 'alist |
18161 | 76 :group 'mailalias) |
77 (put 'mail-complete-alist 'risky-local-variable t) | |
78 | |
79 ;;;###autoload | |
80 (defcustom mail-complete-style 'angles | |
81 "*Specifies how \\[mail-complete] formats the full name when it completes. | |
82 If `nil', they contain just the return address like: | |
83 king@grassland.com | |
84 If `parens', they look like: | |
85 king@grassland.com (Elvis Parsley) | |
86 If `angles', they look like: | |
87 Elvis Parsley <king@grassland.com>" | |
88 :type '(choice (const angles) (const parens) (const nil)) | |
89 :group 'mailalias) | |
90 | |
91 (defcustom mail-complete-function 'ispell-complete-word | |
92 "*Function to call when completing outside `mail-complete-alist'-header." | |
93 :type '(choice function (const nil)) | |
94 :group 'mailalias) | |
95 | |
96 (defcustom mail-directory-function nil | |
50865
c29829b8ca9c
(mail-directory-function, mail-directory-requery, mail-directory): Don't quote
Juanma Barranquero <lekktu@gmail.com>
parents:
49598
diff
changeset
|
97 "*Function to get completions from directory service or nil for none. |
18161 | 98 See `mail-directory-requery'." |
99 :type '(choice function (const nil)) | |
100 :group 'mailalias) | |
101 | |
102 ;; This is for when the directory is huge, or changes frequently. | |
103 (defcustom mail-directory-requery nil | |
50865
c29829b8ca9c
(mail-directory-function, mail-directory-requery, mail-directory): Don't quote
Juanma Barranquero <lekktu@gmail.com>
parents:
49598
diff
changeset
|
104 "*When non-nil call `mail-directory-function' for each completion. |
18161 | 105 In that case, one argument gets passed to the function, the partial string |
106 entered so far." | |
107 :type 'boolean | |
108 :group 'mailalias) | |
109 | |
110 (defcustom mail-directory-process nil | |
111 "*Shell command to get the list of names from a mail directory. | |
112 This value is used when the value of `mail-directory-function' | |
113 is `mail-directory-process'. The value should be a list | |
114 of the form (COMMAND ARG ...), where each of the list elements | |
60964
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
115 is evaluated. COMMAND should evaluate to a string. When |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
116 `mail-directory-requery' is non-nil, during evaluation of these |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
117 elements, the variable `pattern' contains the partial input being |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
118 completed. `pattern' is nil when `mail-directory-requery' is nil. |
18161 | 119 |
120 The value might look like this: | |
121 | |
122 '(remote-shell-program \"HOST\" \"-nl\" \"USER\" \"COMMAND\") | |
123 | |
124 or like this: | |
125 | |
126 '(remote-shell-program \"HOST\" \"-n\" \"COMMAND '^\" pattern \"'\")" | |
127 :type 'sexp | |
128 :group 'mailalias) | |
129 (put 'mail-directory-process 'risky-local-variable t) | |
130 | |
131 (defcustom mail-directory-stream nil | |
132 "*List of (HOST SERVICE) for stream connection to mail directory." | |
133 :type 'sexp | |
134 :group 'mailalias) | |
135 (put 'mail-directory-stream 'risky-local-variable t) | |
136 | |
137 (defcustom mail-directory-parser nil | |
138 "*How to interpret the output of `mail-directory-function'. | |
139 Three types of values are possible: | |
140 | |
141 - nil means to gather each line as one name | |
142 - regexp means first \\(grouping\\) in successive matches is name | |
143 - function called at beginning of buffer that returns an alist of names" | |
18168
0fa57e6872f0
(mail-directory-parser): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
18161
diff
changeset
|
144 :type '(choice (const nil) regexp function) |
18161 | 145 :group 'mailalias) |
146 (put 'mail-directory-parser 'risky-local-variable t) | |
147 | |
148 ;; Internal variables. | |
149 | |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
150 (defvar mail-names t |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
151 "Alist of local users, aliases and directory entries as available. |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
152 Elements have the form (MAILNAME) or (MAILNAME . FULLNAME). |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
153 If the value means t, it means the real value should be calculated |
60964
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
154 for the next use. This is used in `mail-complete'.") |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
155 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
156 (defvar mail-local-names t |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
157 "Alist of local users. |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
158 When t this still needs to be initialized.") |
18161 | 159 |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
160 |
53 | 161 ;; Called from sendmail-send-it, or similar functions, |
162 ;; only if some mail aliases are defined. | |
17797
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
163 ;;;###autoload |
53 | 164 (defun expand-mail-aliases (beg end &optional exclude) |
165 "Expand all mail aliases in suitable header fields found between BEG and END. | |
21867
ccda1e80b153
(expand-mail-aliases): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
21752
diff
changeset
|
166 If interactive, expand in header fields. |
11856
abf2dbc46f7d
(expand-mail-aliases): Expand aliases in
Karl Heuer <kwzh@gnu.org>
parents:
11639
diff
changeset
|
167 Suitable header fields are `To', `From', `CC' and `BCC', `Reply-to', and |
abf2dbc46f7d
(expand-mail-aliases): Expand aliases in
Karl Heuer <kwzh@gnu.org>
parents:
11639
diff
changeset
|
168 their `Resent-' variants. |
abf2dbc46f7d
(expand-mail-aliases): Expand aliases in
Karl Heuer <kwzh@gnu.org>
parents:
11639
diff
changeset
|
169 |
221
ce8e0192266e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
219
diff
changeset
|
170 Optional second arg EXCLUDE may be a regular expression defining text to be |
ce8e0192266e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
219
diff
changeset
|
171 removed from alias expansions." |
17797
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
172 (interactive |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
173 (save-excursion |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
174 (list (goto-char (point-min)) |
21867
ccda1e80b153
(expand-mail-aliases): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
21752
diff
changeset
|
175 (mail-header-end)))) |
14038
49642146f16c
(expand-mail-aliases, define-mail-alias): Fix calls to `sendmail-sync-aliases'
Karl Heuer <kwzh@gnu.org>
parents:
13653
diff
changeset
|
176 (sendmail-sync-aliases) |
17797
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
177 (when (eq mail-aliases t) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
178 (setq mail-aliases nil) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
179 (build-mail-aliases)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
180 (save-excursion |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
181 (goto-char beg) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
182 (setq end (set-marker (make-marker) end)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
183 (let ((case-fold-search nil)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
184 (while (let ((case-fold-search t)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
185 (re-search-forward mail-address-field-regexp end t)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
186 (skip-chars-forward " \t") |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
187 (let ((beg1 (point)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
188 end1 pos epos seplen |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
189 ;; DISABLED-ALIASES records aliases temporarily disabled |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
190 ;; while we scan text that resulted from expanding those aliases. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
191 ;; Each element is (ALIAS . TILL-WHEN), where TILL-WHEN |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
192 ;; is where to reenable the alias (expressed as number of chars |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
193 ;; counting from END1). |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
194 (disabled-aliases nil)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
195 (re-search-forward "^[^ \t]" end 'move) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
196 (beginning-of-line) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
197 (skip-chars-backward " \t\n") |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
198 (setq end1 (point-marker)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
199 (goto-char beg1) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
200 (while (< (point) end1) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
201 (setq pos (point)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
202 ;; Reenable any aliases which were disabled for ranges |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
203 ;; that we have passed out of. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
204 (while (and disabled-aliases |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
205 (> pos (- end1 (cdr (car disabled-aliases))))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
206 (setq disabled-aliases (cdr disabled-aliases))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
207 ;; EPOS gets position of end of next name; |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
208 ;; SEPLEN gets length of whitespace&separator that follows it. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
209 (if (re-search-forward "[ \t]*[\n,][ \t]*" end1 t) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
210 (setq epos (match-beginning 0) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
211 seplen (- (point) epos)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
212 (setq epos (marker-position end1) seplen 0)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
213 (let ((string (buffer-substring-no-properties pos epos)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
214 translation) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
215 (if (and (not (assoc string disabled-aliases)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
216 (setq translation (cdr (assoc string mail-aliases)))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
217 (progn |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
218 ;; This name is an alias. Disable it. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
219 (setq disabled-aliases (cons (cons string (- end1 epos)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
220 disabled-aliases)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
221 ;; Replace the alias with its expansion |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
222 ;; then rescan the expansion for more aliases. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
223 (goto-char pos) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
224 (insert translation) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
225 (when exclude |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
226 (let ((regexp (concat "\\b\\(" exclude "\\)\\b")) |
53 | 227 (end (point-marker))) |
228 (goto-char pos) | |
229 (while (re-search-forward regexp end t) | |
230 (replace-match "")) | |
231 (goto-char end))) | |
17797
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
232 (delete-region (point) (+ (point) (- epos pos))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
233 (goto-char pos)) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
234 ;; Name is not an alias. Skip to start of next name. |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
235 (goto-char epos) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
236 (forward-char seplen)))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
237 (set-marker end1 nil))) |
7faea977229c
make expand-mail-aliases interactive
Simon Marshall <simon@gnu.org>
parents:
17310
diff
changeset
|
238 (set-marker end nil)))) |
53 | 239 |
10327
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
240 ;; Called by mail-setup, or similar functions, only if the file specified |
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
241 ;; by mail-personal-alias-file (usually `~/.mailrc') exists. |
53 | 242 (defun build-mail-aliases (&optional file) |
10327
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
243 "Read mail aliases from personal aliases file and set `mail-aliases'. |
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
244 By default, this is the file specified by `mail-personal-alias-file'." |
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
245 (setq file (expand-file-name (or file mail-personal-alias-file))) |
20810
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
246 ;; In case mail-aliases is t, make sure define-mail-alias |
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
247 ;; does not recursively call build-mail-aliases. |
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
248 (setq mail-aliases nil) |
53 | 249 (let ((buffer nil) |
250 (obuf (current-buffer))) | |
251 (unwind-protect | |
252 (progn | |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
253 (setq buffer (generate-new-buffer " mailrc")) |
53 | 254 (set-buffer buffer) |
7732
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
255 (while file |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
256 (cond ((get-file-buffer file) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
257 (insert (save-excursion |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
258 (set-buffer (get-file-buffer file)) |
13653
acde2327c000
(build-mail-aliases): Use buffer-substring-no-properties not buffer-substring.
Richard M. Stallman <rms@gnu.org>
parents:
12516
diff
changeset
|
259 (buffer-substring-no-properties |
acde2327c000
(build-mail-aliases): Use buffer-substring-no-properties not buffer-substring.
Richard M. Stallman <rms@gnu.org>
parents:
12516
diff
changeset
|
260 (point-min) (point-max))))) |
7732
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
261 ((file-exists-p file) (insert-file-contents file)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
262 ((file-exists-p (setq file (concat "~/" file))) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
263 (insert-file-contents file)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
264 (t (setq file nil))) |
65117
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
265 (goto-char (point-min)) |
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
266 ;; Delete comments from the contents. |
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
267 (while (search-forward "# " nil t) |
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
268 (let ((p (- (point) 2))) |
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
269 (end-of-line) |
c491b27f2b26
(build-mail-aliases): Delete comments
Richard M. Stallman <rms@gnu.org>
parents:
64754
diff
changeset
|
270 (delete-region p (point)))) |
7732
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
271 ;; Don't lose if no final newline. |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
272 (goto-char (point-max)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
273 (or (eq (preceding-char) ?\n) (newline)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
274 (goto-char (point-min)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
275 ;; handle "\\\n" continuation lines |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
276 (while (not (eobp)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
277 (end-of-line) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
278 (if (= (preceding-char) ?\\) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
279 (progn (delete-char -1) (delete-char 1) (insert ?\ )) |
53 | 280 (forward-char 1))) |
7732
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
281 (goto-char (point-min)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
282 ;; handle `source' directives -- Eddy/1994/May/25 |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
283 (cond ((re-search-forward "^source[ \t]+" nil t) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
284 (re-search-forward "\\S-+") |
13653
acde2327c000
(build-mail-aliases): Use buffer-substring-no-properties not buffer-substring.
Richard M. Stallman <rms@gnu.org>
parents:
12516
diff
changeset
|
285 (setq file (buffer-substring-no-properties |
acde2327c000
(build-mail-aliases): Use buffer-substring-no-properties not buffer-substring.
Richard M. Stallman <rms@gnu.org>
parents:
12516
diff
changeset
|
286 (match-beginning 0) (match-end 0))) |
7732
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
287 (beginning-of-line) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
288 (insert "# ") ; to ensure we don't re-process this file |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
289 (beginning-of-line)) |
b99162ca5247
(build-mail-aliases): Handle source directives.
Richard M. Stallman <rms@gnu.org>
parents:
3743
diff
changeset
|
290 (t (setq file nil)))) |
53 | 291 (goto-char (point-min)) |
12516
254987dd395f
* mailalias.el (build-mail-aliases): Fixed the regexp for "^group".
Francesco Potortì <pot@gnu.org>
parents:
12448
diff
changeset
|
292 (while (re-search-forward |
23356
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
293 "^\\(a\\|alias\\|g\\|group\\)[ \t]+\\([^ \t\n]+\\)" nil t) |
12516
254987dd395f
* mailalias.el (build-mail-aliases): Fixed the regexp for "^group".
Francesco Potortì <pot@gnu.org>
parents:
12448
diff
changeset
|
294 (let* ((name (match-string 2)) |
23356
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
295 (start (progn (skip-chars-forward " \t") (point))) |
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
296 value) |
53 | 297 (end-of-line) |
23356
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
298 (setq value (buffer-substring-no-properties start (point))) |
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
299 (unless (equal value "") |
a05ab8915917
(build-mail-aliases): Don't allow
Karl Heuer <kwzh@gnu.org>
parents:
22621
diff
changeset
|
300 (define-mail-alias name value t)))) |
53 | 301 mail-aliases) |
302 (if buffer (kill-buffer buffer)) | |
303 (set-buffer obuf)))) | |
304 | |
305 ;; Always autoloadable in case the user wants to define aliases | |
306 ;; interactively or in .emacs. | |
256 | 307 ;;;###autoload |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
308 (defun define-mail-alias (name definition &optional from-mailrc-file) |
221
ce8e0192266e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
219
diff
changeset
|
309 "Define NAME as a mail alias that translates to DEFINITION. |
53 | 310 This means that sending a message to NAME will actually send to DEFINITION. |
12448
7291d1627d2c
(define-mail-alias): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11856
diff
changeset
|
311 |
7291d1627d2c
(define-mail-alias): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11856
diff
changeset
|
312 Normally, the addresses in DEFINITION must be separated by commas. |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
39866
diff
changeset
|
313 If FROM-MAILRC-FILE is non-nil, then addresses in DEFINITION |
12448
7291d1627d2c
(define-mail-alias): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11856
diff
changeset
|
314 can be separated by spaces; an address can contain spaces |
7291d1627d2c
(define-mail-alias): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11856
diff
changeset
|
315 if it is quoted with double-quotes." |
7291d1627d2c
(define-mail-alias): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
11856
diff
changeset
|
316 |
53 | 317 (interactive "sDefine mail alias: \nsDefine %s as mail alias for: ") |
318 ;; Read the defaults first, if we have not done so. | |
20810
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
319 ;; But not if we are doing that already right now. |
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
320 (unless from-mailrc-file |
55e8d6d2c3b1
(define-mail-alias): If FROM-MAILRC-FILE, don't call sendmail-sync-aliases.
Richard M. Stallman <rms@gnu.org>
parents:
20490
diff
changeset
|
321 (sendmail-sync-aliases)) |
53 | 322 (if (eq mail-aliases t) |
323 (progn | |
324 (setq mail-aliases nil) | |
10327
8822b968b11c
Use `mail-personal-alias-file' globally in place of hardwired "~/.mailrc".
Noah Friedman <friedman@splode.com>
parents:
9644
diff
changeset
|
325 (if (file-exists-p mail-personal-alias-file) |
53 | 326 (build-mail-aliases)))) |
3743
e67f922b73ed
(define-mail-alias): Remove excess whitespace better.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
327 ;; strip garbage from front and end |
e67f922b73ed
(define-mail-alias): Remove excess whitespace better.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
328 (if (string-match "\\`[ \t\n,]+" definition) |
474 | 329 (setq definition (substring definition (match-end 0)))) |
3743
e67f922b73ed
(define-mail-alias): Remove excess whitespace better.
Richard M. Stallman <rms@gnu.org>
parents:
2307
diff
changeset
|
330 (if (string-match "[ \t\n,]+\\'" definition) |
474 | 331 (setq definition (substring definition 0 (match-beginning 0)))) |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
332 (let ((result '()) |
8494
ae554ccf4fb5
(define-mail-alias): Avoid error if DEFINITION is "".
Richard M. Stallman <rms@gnu.org>
parents:
7971
diff
changeset
|
333 ;; If DEFINITION is null string, avoid looping even once. |
ae554ccf4fb5
(define-mail-alias): Avoid error if DEFINITION is "".
Richard M. Stallman <rms@gnu.org>
parents:
7971
diff
changeset
|
334 (start (and (not (equal definition "")) 0)) |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
335 (L (length definition)) |
20490
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
336 convert-backslash |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
337 end tem) |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
338 (while start |
20490
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
339 (setq convert-backslash nil) |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
340 ;; If we're reading from the mailrc file, then addresses are delimited |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
341 ;; by spaces, and addresses with embedded spaces must be surrounded by |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
342 ;; double-quotes. Otherwise, addresses are separated by commas. |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
343 (if from-mailrc-file |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
344 (if (eq ?\" (aref definition start)) |
22081
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
345 ;; The following test on `found' compensates for a bug |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
346 ;; in match-end, which does not return nil when match |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
347 ;; failed. |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
348 (let ((found (string-match "[^\\]\\(\\([\\][\\]\\)*\\)\"[ \t,]*" |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
349 definition start))) |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
350 (setq start (1+ start) |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
351 end (and found (match-end 1)) |
0f4e461dd691
(define-mail-alias): Compensate for not resetting the match data when
Richard M. Stallman <rms@gnu.org>
parents:
21867
diff
changeset
|
352 convert-backslash t)) |
8494
ae554ccf4fb5
(define-mail-alias): Avoid error if DEFINITION is "".
Richard M. Stallman <rms@gnu.org>
parents:
7971
diff
changeset
|
353 (setq end (string-match "[ \t,]+" definition start))) |
ae554ccf4fb5
(define-mail-alias): Avoid error if DEFINITION is "".
Richard M. Stallman <rms@gnu.org>
parents:
7971
diff
changeset
|
354 (setq end (string-match "[ \t\n,]*,[ \t\n,]*" definition start))) |
20490
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
355 (let ((temp (substring definition start end)) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
356 (pos 0)) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
357 (setq start (and end |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
358 (/= (match-end 0) L) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
359 (match-end 0))) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
360 (if convert-backslash |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
361 (while (string-match "[\\]" temp pos) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
362 (setq temp (replace-match "" t t temp)) |
49598
0d8b17d428b5
Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
39866
diff
changeset
|
363 (if start |
20490
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
364 (setq start (1- start))) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
365 (setq pos (match-end 0)))) |
c383d1397e12
(define-mail-alias): Handle backslash-quoting
Richard M. Stallman <rms@gnu.org>
parents:
18607
diff
changeset
|
366 (setq result (cons temp result)))) |
7971
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
367 (setq definition (mapconcat (function identity) |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
368 (nreverse result) |
e02c5d5d76cd
(define-mail-alias): Copy parsing code from mailabbrev.el.
Richard M. Stallman <rms@gnu.org>
parents:
7970
diff
changeset
|
369 ", ")) |
53 | 370 (setq tem (assoc name mail-aliases)) |
371 (if tem | |
372 (rplacd tem definition) | |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
373 (setq mail-aliases (cons (cons name definition) mail-aliases) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
374 mail-names t)))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
375 |
14678
f77d51b836d0
(mail-complete): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
14551
diff
changeset
|
376 ;;;###autoload |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
377 (defun mail-complete (arg) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
378 "Perform completion on header field or word preceding point. |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
379 Completable headers are according to `mail-complete-alist'. If none matches |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
380 current header, calls `mail-complete-function' and passes prefix arg if any." |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
381 (interactive "P") |
15501
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
382 ;; Read the defaults first, if we have not done so. |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
383 (sendmail-sync-aliases) |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
384 (if (eq mail-aliases t) |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
385 (progn |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
386 (setq mail-aliases nil) |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
387 (if (file-exists-p mail-personal-alias-file) |
3cc16244b779
Resync mail aliases if necessary.
Simon Marshall <simon@gnu.org>
parents:
14799
diff
changeset
|
388 (build-mail-aliases)))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
389 (let ((list mail-complete-alist)) |
22621
e017a2c05245
(mail-complete): Fix the test of (mail-heder-end).
Richard M. Stallman <rms@gnu.org>
parents:
22081
diff
changeset
|
390 (if (and (< 0 (mail-header-end)) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
391 (save-excursion |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
392 (if (re-search-backward "^[^\t]" nil t) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
393 (while list |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
394 (if (looking-at (car (car list))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
395 (setq arg (cdr (car list)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
396 list ()) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
397 (setq list (cdr list))))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
398 arg)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
399 (let* ((end (point)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
400 (beg (save-excursion |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
401 (skip-chars-backward "^ \t<,:") |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
402 (point))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
403 (pattern (buffer-substring beg end)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
404 completion) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
405 (setq list (eval arg) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
406 completion (try-completion pattern list)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
407 (cond ((eq completion t)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
408 ((null completion) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
409 (message "Can't find completion for \"%s\"" pattern) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
410 (ding)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
411 ((not (string= pattern completion)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
412 (delete-region beg end) |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
413 (let ((alist-elt (assoc completion mail-names))) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
414 (if (cdr alist-elt) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
415 (cond ((eq mail-complete-style 'parens) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
416 (insert completion " (" (cdr alist-elt) ")")) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
417 ((eq mail-complete-style 'angles) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
418 (insert (cdr alist-elt) " <" completion ">")) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
419 (t |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
420 (insert completion))) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
421 (insert completion)))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
422 (t |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
423 (message "Making completion list...") |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
424 (with-output-to-temp-buffer "*Completions*" |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
425 (display-completion-list |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
426 (all-completions pattern list))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
427 (message "Making completion list...%s" "done")))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
428 (funcall mail-complete-function arg)))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
429 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
430 (defun mail-get-names (pattern) |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
431 "Fetch local users and global mail addresses for completion. |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
432 Consults `/etc/passwd' and a directory service if one is set up via |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
433 `mail-directory-function'. |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
434 PATTERN is the string we want to complete." |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
435 (if (eq mail-local-names t) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
436 (save-excursion |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
437 (set-buffer (generate-new-buffer " passwd")) |
17210
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
438 (let ((files mail-passwd-files)) |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
439 (while files |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
440 (insert-file-contents (car files) nil nil nil t) |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
441 (setq files (cdr files)))) |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
442 (if mail-passwd-command |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
443 (call-process shell-file-name nil t nil |
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
444 shell-command-switch mail-passwd-command)) |
62620
564274a2eaa2
(mail-get-names): Avoid beginning-of-buffer.
Richard M. Stallman <rms@gnu.org>
parents:
62402
diff
changeset
|
445 (goto-char (point-min)) |
17210
5c7c572f57f8
(mail-passwd-command): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15501
diff
changeset
|
446 (setq mail-local-names nil) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
447 (while (not (eobp)) |
14799
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
448 ;;Recognize lines like |
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
449 ;; nobody:*:65534:65534::/: |
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
450 ;; +demo::::::/bin/csh |
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
451 ;; +ethanb |
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
452 ;;while skipping |
619266555aec
(mail-get-names): Understand "+username" format for /etc/passwd lines.
Richard M. Stallman <rms@gnu.org>
parents:
14678
diff
changeset
|
453 ;; +@SOFTWARE |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
454 ;; The second \(...\) matches the user id. |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
455 (if (looking-at "\\+?\\([^:@\n+]+\\):[^:\n]*:\\([^\n:]*\\):") |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
456 (add-to-list 'mail-local-names |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
457 (cons (match-string 1) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
458 (user-full-name |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
60964
diff
changeset
|
459 (string-to-number (match-string 2)))))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
460 (beginning-of-line 2)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
461 (kill-buffer (current-buffer)))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
462 (if (or (eq mail-names t) |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
463 (eq mail-directory-names t)) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
464 (let (directory) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
465 (and mail-directory-function |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
466 (eq mail-directory-names t) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
467 (setq directory |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
468 (mail-directory (if mail-directory-requery pattern)))) |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
469 (or mail-directory-requery |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
470 (setq mail-directory-names directory)) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
471 (if (or directory |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
472 (eq mail-names t)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
473 (setq mail-names |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
474 (sort (append (if (consp mail-aliases) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
475 (mapcar |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
476 (function (lambda (a) (list (car a)))) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
477 mail-aliases)) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
478 (if (consp mail-local-names) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
479 mail-local-names) |
60964
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
480 (or directory |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
481 (when (consp mail-directory-names) |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
482 mail-directory-names))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
483 (lambda (a b) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
484 ;; should cache downcased strings |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
485 (string< (downcase (car a)) |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
486 (downcase (car b))))))))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
487 mail-names) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
488 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
489 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
490 (defun mail-directory (pattern) |
60964
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
491 "Use mail-directory facility to get user names matching PATTERN. |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
492 If PATTERN is nil, get all the defined user names. |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
493 This function calls `mail-directory-function' to query the directory, |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
494 then uses `mail-directory-parser' to parse the output it returns." |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
495 (save-excursion |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
496 (message "Querying directory...") |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
497 (set-buffer (generate-new-buffer " *mail-directory*")) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
498 (funcall mail-directory-function pattern) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
499 (goto-char 1) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
500 (let (directory) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
501 (if (stringp mail-directory-parser) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
502 (while (re-search-forward mail-directory-parser nil t) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
503 (setq directory |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
504 (cons (match-string 1) directory))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
505 (if mail-directory-parser |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
506 (setq directory (funcall mail-directory-parser)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
507 (while (not (eobp)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
508 (setq directory |
17310
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
509 (cons (buffer-substring (point) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
510 (progn |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
511 (forward-line) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
512 (if (bolp) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
513 (1- (point)) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
514 (point)))) |
9c0ece61d60a
(mail-complete-style): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
17210
diff
changeset
|
515 directory))))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
516 (kill-buffer (current-buffer)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
517 (message "Querying directory...done") |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
518 directory))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
519 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
520 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
521 (defun mail-directory-process (pattern) |
18161 | 522 "Run a shell command to output names in directory. |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
523 See `mail-directory-process'." |
60964
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
524 (when (consp mail-directory-process) |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
525 (apply 'call-process (eval (car mail-directory-process)) nil t nil |
0b933f58d514
(mail-directory-process): Do nothing if mail-directory-process is an atom.
Richard M. Stallman <rms@gnu.org>
parents:
52401
diff
changeset
|
526 (mapcar 'eval (cdr mail-directory-process))))) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
527 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
528 ;; This should handle a dialog. Currently expects port to spit out names. |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
529 (defun mail-directory-stream (pattern) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
530 "Open a stream to retrieve names in directory. |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
531 See `mail-directory-stream'." |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
532 (let (mailalias-done) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
533 (set-process-sentinel |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
534 (apply 'open-network-stream "mailalias" (current-buffer) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
535 mail-directory-stream) |
39866
a4570786d40d
Do not double variables in the lambda-list.
Pavel Janík <Pavel@Janik.cz>
parents:
24172
diff
changeset
|
536 (lambda (x y) |
14551
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
537 (setq mailalias-done t))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
538 (while (not mailalias-done) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
539 (sit-for .1)))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
540 |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
541 (defun mail-sentto-newsgroups () |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
542 "Return all entries from Newsgroups: header as completion alist." |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
543 (save-excursion |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
544 (if (mail-position-on-field "newsgroups" t) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
545 (let ((point (point)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
546 list) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
547 (while (< (skip-chars-backward "^:, \t\n") 0) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
548 (setq list `((,(buffer-substring (point) point)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
549 ,@list)) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
550 (skip-chars-backward ", \t\n") |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
551 (setq point (point))) |
dc2881fa11ea
(mail-names, mail-local-names, mail-directory-names)
Richard M. Stallman <rms@gnu.org>
parents:
14169
diff
changeset
|
552 list)))) |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
474
diff
changeset
|
553 |
923 | 554 (provide 'mailalias) |
555 | |
52401 | 556 ;;; arch-tag: 1d6a0f87-eb34-4d45-8816-60c1b952cf46 |
659
505130d1ddf8
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
474
diff
changeset
|
557 ;;; mailalias.el ends here |