49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1 ;;; mh-alias.el --- MH-E mail alias completion and expansion
|
68465
|
2
|
62847
|
3 ;; Copyright (C) 1994, 1995, 1996, 1997,
|
100908
|
4 ;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
49598
|
5
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
6 ;; Author: Peter S. Galbraith <psg@debian.org>
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
7 ;; Maintainer: Bill Wohler <wohler@newt.com>
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
8 ;; Keywords: mail
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
9 ;; See: mh-e.el
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
10
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
11 ;; This file is part of GNU Emacs.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
12
|
94663
|
13 ;; GNU Emacs is free software: you can redistribute it and/or modify
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
14 ;; it under the terms of the GNU General Public License as published by
|
94663
|
15 ;; the Free Software Foundation, either version 3 of the License, or
|
|
16 ;; (at your option) any later version.
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
17
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
18 ;; GNU Emacs is distributed in the hope that it will be useful,
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
21 ;; GNU General Public License for more details.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
22
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
23 ;; You should have received a copy of the GNU General Public License
|
94663
|
24 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
25
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
26 ;;; Commentary:
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
27
|
49578
|
28 ;;; Change Log:
|
|
29
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
30 ;;; Code:
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
31
|
68465
|
32 (require 'mh-e)
|
|
33
|
56673
|
34 (mh-require-cl)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
35
|
69031
|
36 (require 'goto-addr)
|
|
37
|
50702
|
38 (defvar mh-alias-alist 'not-read
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
39 "Alist of MH aliases.")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
40 (defvar mh-alias-blind-alist nil
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
41 "Alist of MH aliases that are blind lists.")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
42 (defvar mh-alias-passwd-alist nil
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
43 "Alist of aliases extracted from passwd file and their expansions.")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
44 (defvar mh-alias-tstamp nil
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
45 "Time aliases were last loaded.")
|
95689
|
46 (defvar mh-alias-read-address-map
|
|
47 (let ((map (copy-keymap minibuffer-local-completion-map)))
|
|
48 (define-key map "," 'mh-alias-minibuffer-confirm-address)
|
|
49 (define-key map " " 'self-insert-command)
|
|
50 map))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
51
|
56673
|
52 (defvar mh-alias-system-aliases
|
|
53 '("/etc/nmh/MailAliases" "/etc/mh/MailAliases"
|
|
54 "/usr/lib/mh/MailAliases" "/usr/share/mailutils/mh/MailAliases"
|
|
55 "/etc/passwd")
|
|
56 "*A list of system files which are a source of aliases.
|
67758
|
57 If these files are modified, they are automatically reread. This list
|
|
58 need include only system aliases and the passwd file, since personal
|
67760
|
59 alias files listed in your \"Aliasfile:\" MH profile component are
|
67758
|
60 automatically included. You can update the alias list manually using
|
|
61 \\[mh-alias-reload].")
|
56673
|
62
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
63
|
67681
|
64
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
65 ;;; Alias Loading
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
66
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
67 (defun mh-alias-tstamp (arg)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
68 "Check whether alias files have been modified.
|
67758
|
69 Return t if any file listed in the Aliasfile MH profile component has
|
|
70 been modified since the timestamp.
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
71 If ARG is non-nil, set timestamp with the current time."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
72 (if arg
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
73 (let ((time (current-time)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
74 (setq mh-alias-tstamp (list (nth 0 time) (nth 1 time))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
75 (let ((stamp))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
76 (car (memq t (mapcar
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
77 (function
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
78 (lambda (file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
79 (when (and file (file-exists-p file))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
80 (setq stamp (nth 5 (file-attributes file)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
81 (or (> (car stamp) (car mh-alias-tstamp))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
82 (and (= (car stamp) (car mh-alias-tstamp))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
83 (> (cadr stamp) (cadr mh-alias-tstamp)))))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
84 (mh-alias-filenames t)))))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
85
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
86 (defun mh-alias-filenames (arg)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
87 "Return list of filenames that contain aliases.
|
67758
|
88 The filenames come from the Aliasfile profile component and are
|
|
89 expanded.
|
|
90 If ARG is non-nil, filenames listed in `mh-alias-system-aliases' are
|
|
91 appended."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
92 (or mh-progs (mh-find-path))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
93 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
94 (let* ((filename (mh-profile-component "Aliasfile"))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
95 (filelist (and filename (split-string filename "[ \t]+")))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
96 (userlist
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
97 (mapcar
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
98 (function
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
99 (lambda (file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
100 (if (and mh-user-path file
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
101 (file-exists-p (expand-file-name file mh-user-path)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
102 (expand-file-name file mh-user-path))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
103 filelist)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
104 (if arg
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
105 (if (stringp mh-alias-system-aliases)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
106 (append userlist (list mh-alias-system-aliases))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
107 (append userlist mh-alias-system-aliases))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
108 userlist))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
109
|
56406
|
110 (defun mh-alias-gecos-name (gecos-name username comma-separator)
|
|
111 "Return a usable address string from a GECOS-NAME and USERNAME.
|
67758
|
112 Use only part of the GECOS-NAME up to the first comma if
|
|
113 COMMA-SEPARATOR is non-nil."
|
56406
|
114 (let ((res gecos-name))
|
|
115 ;; Keep only string until first comma if COMMA-SEPARATOR is t.
|
|
116 (if (and comma-separator
|
|
117 (string-match "^\\([^,]+\\)," res))
|
|
118 (setq res (match-string 1 res)))
|
|
119 ;; Replace "&" with capitalized username
|
|
120 (if (string-match "&" res)
|
68529
7daec5f4a289
* mh-alias.el (mh-alias-gecos-name): Use mh-replace-regexp-in-string
Bill Wohler <wohler@newt.com>
diff
changeset
|
121 (setq res (mh-replace-regexp-in-string "&" (capitalize username) res)))
|
56406
|
122 ;; Remove " character
|
|
123 (if (string-match "\"" res)
|
68529
7daec5f4a289
* mh-alias.el (mh-alias-gecos-name): Use mh-replace-regexp-in-string
Bill Wohler <wohler@newt.com>
diff
changeset
|
124 (setq res (mh-replace-regexp-in-string "\"" "" res)))
|
56406
|
125 ;; If empty string, use username instead
|
|
126 (if (string-equal "" res)
|
|
127 (setq res username))
|
|
128 ;; Surround by quotes if doesn't consist of simple characters
|
|
129 (if (not (string-match "^[ a-zA-Z0-9-]+$" res))
|
|
130 (setq res (concat "\"" res "\"")))
|
|
131 res))
|
|
132
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
133 (defun mh-alias-local-users ()
|
56673
|
134 "Return an alist of local users from /etc/passwd.
|
67760
|
135 Exclude all aliases already in `mh-alias-alist' from \"ali\""
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
136 (let (passwd-alist)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
137 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
138 (set-buffer (get-buffer-create mh-temp-buffer))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
139 (erase-buffer)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
140 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
141 ((eq mh-alias-local-users t)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
142 (if (file-readable-p "/etc/passwd")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
143 (insert-file-contents "/etc/passwd")))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
144 ((stringp mh-alias-local-users)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
145 (insert mh-alias-local-users "\n")
|
50702
|
146 (shell-command-on-region (point-min) (point-max) mh-alias-local-users t)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
147 (goto-char (point-min))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
148 (while (< (point) (point-max))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
149 (cond
|
56406
|
150 ((looking-at "\\([^:]*\\):[^:]*:\\([^:]*\\):[^:]*:\\([^:]*\\):")
|
62847
|
151 (when (> (string-to-number (match-string 2)) 200)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
152 (let* ((username (match-string 1))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
153 (gecos-name (match-string 3))
|
56406
|
154 (realname (mh-alias-gecos-name
|
|
155 gecos-name username
|
56673
|
156 mh-alias-passwd-gecos-comma-separator-flag))
|
|
157 (alias-name (if mh-alias-local-users-prefix
|
62847
|
158 (concat mh-alias-local-users-prefix
|
|
159 (mh-alias-suggest-alias realname t))
|
|
160 username))
|
56673
|
161 (alias-translation
|
|
162 (if (string-equal username realname)
|
|
163 (concat "<" username ">")
|
|
164 (concat realname " <" username ">"))))
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
165 (when (not (mh-assoc-string alias-name mh-alias-alist t))
|
56673
|
166 (setq passwd-alist (cons (list alias-name alias-translation)
|
|
167 passwd-alist)))))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
168 (forward-line 1)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
169 passwd-alist))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
170
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
171 (defun mh-alias-reload ()
|
56673
|
172 "Reload MH aliases.
|
|
173
|
67758
|
174 Since aliases are updated frequently, MH-E reloads aliases
|
|
175 automatically whenever an alias lookup occurs if an alias source has
|
67760
|
176 changed. Sources include files listed in your \"Aliasfile:\" profile
|
67758
|
177 component and your password file if option `mh-alias-local-users' is
|
|
178 turned on. However, you can reload your aliases manually by calling
|
|
179 this command directly.
|
56673
|
180
|
67758
|
181 This function runs `mh-alias-reloaded-hook' after the aliases have
|
|
182 been loaded."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
183 (interactive)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
184 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
185 (message "Loading MH aliases...")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
186 (mh-alias-tstamp t)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
187 (mh-exec-cmd-quiet t "ali" "-nolist" "-nouser")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
188 (setq mh-alias-alist nil)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
189 (setq mh-alias-blind-alist nil)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
190 (while (< (point) (point-max))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
191 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
192 ((looking-at "^[ \t]")) ;Continuation line
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
193 ((looking-at "\\(.+\\): .+: .*$") ; A new -blind- MH alias
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
194 (when (not (mh-assoc-string (match-string 1) mh-alias-blind-alist t))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
195 (setq mh-alias-blind-alist
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
196 (cons (list (match-string 1)) mh-alias-blind-alist))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
197 (setq mh-alias-alist (cons (list (match-string 1)) mh-alias-alist))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
198 ((looking-at "\\(.+\\): .*$") ; A new MH alias
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
199 (when (not (mh-assoc-string (match-string 1) mh-alias-alist t))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
200 (setq mh-alias-alist
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
201 (cons (list (match-string 1)) mh-alias-alist)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
202 (forward-line 1)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
203 (when mh-alias-local-users
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
204 (setq mh-alias-passwd-alist (mh-alias-local-users))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
205 ;; Update aliases with local users, but leave existing aliases alone.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
206 (let ((local-users mh-alias-passwd-alist)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
207 user)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
208 (while local-users
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
209 (setq user (car local-users))
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
210 (if (not (mh-assoc-string (car user) mh-alias-alist t))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
211 (setq mh-alias-alist (append mh-alias-alist (list user))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
212 (setq local-users (cdr local-users)))))
|
56673
|
213 (run-hooks 'mh-alias-reloaded-hook)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
214 (message "Loading MH aliases...done"))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
215
|
56406
|
216 ;;;###mh-autoload
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
217 (defun mh-alias-reload-maybe ()
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
218 "Load new MH aliases."
|
56673
|
219 (if (or (eq mh-alias-alist 'not-read) ; Doesn't exist?
|
|
220 (mh-alias-tstamp nil)) ; Out of date?
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
221 (mh-alias-reload)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
222
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
223
|
67681
|
224
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
225 ;;; Alias Expansion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
226
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
227 (defun mh-alias-ali (alias &optional user)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
228 "Return ali expansion for ALIAS.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
229 ALIAS must be a string for a single alias.
|
67758
|
230 If USER is t, then assume ALIAS is an address and call ali -user. ali
|
|
231 returns the string unchanged if not defined. The same is done here."
|
50702
|
232 (condition-case err
|
|
233 (save-excursion
|
|
234 (let ((user-arg (if user "-user" "-nouser")))
|
|
235 (mh-exec-cmd-quiet t "ali" user-arg "-nolist" alias))
|
|
236 (goto-char (point-max))
|
|
237 (if (looking-at "^$") (delete-backward-char 1))
|
|
238 (buffer-substring (point-min)(point-max)))
|
|
239 (error (progn
|
65595
8e711c68e4ff
message format spec fixes, commit 14, this should be final commit
Deepak Goel <deego@gnufans.org>
diff
changeset
|
240 (message "%s" (error-message-string err))
|
50702
|
241 alias))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
242
|
82492
|
243 ;;;###mh-autoload
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
244 (defun mh-alias-expand (alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
245 "Return expansion for ALIAS.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
246 Blind aliases or users from /etc/passwd are not expanded."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
247 (cond
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
248 ((mh-assoc-string alias mh-alias-blind-alist t)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
249 alias) ; Don't expand a blind alias
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
250 ((mh-assoc-string alias mh-alias-passwd-alist t)
|
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
251 (cadr (mh-assoc-string alias mh-alias-passwd-alist t)))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
252 (t
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
253 (mh-alias-ali alias))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
254
|
68529
7daec5f4a289
* mh-alias.el (mh-alias-gecos-name): Use mh-replace-regexp-in-string
Bill Wohler <wohler@newt.com>
diff
changeset
|
255 (mh-require 'crm nil t) ; completing-read-multiple
|
7daec5f4a289
* mh-alias.el (mh-alias-gecos-name): Use mh-replace-regexp-in-string
Bill Wohler <wohler@newt.com>
diff
changeset
|
256 (mh-require 'multi-prompt nil t)
|
68465
|
257
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
258 ;;;###mh-autoload
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
259 (defun mh-read-address (prompt)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
260 "Read an address from the minibuffer with PROMPT."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
261 (mh-alias-reload-maybe)
|
68465
|
262 (if (not mh-alias-alist) ; If still no aliases, just prompt
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
263 (read-string prompt)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
264 (let* ((minibuffer-local-completion-map mh-alias-read-address-map)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
265 (completion-ignore-case mh-alias-completion-ignore-case-flag)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
266 (the-answer
|
50702
|
267 (cond ((fboundp 'completing-read-multiple)
|
|
268 (mh-funcall-if-exists
|
|
269 completing-read-multiple prompt mh-alias-alist nil nil))
|
|
270 ((featurep 'multi-prompt)
|
|
271 (mh-funcall-if-exists
|
|
272 multi-prompt "," nil prompt mh-alias-alist nil nil))
|
|
273 (t (split-string
|
|
274 (completing-read prompt mh-alias-alist nil nil) ",")))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
275 (if (not mh-alias-expand-aliases-flag)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
276 (mapconcat 'identity the-answer ", ")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
277 ;; Loop over all elements, checking if in passwd aliast or blind first
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
278 (mapconcat 'mh-alias-expand the-answer ",\n ")))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
279
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
280 ;;;###mh-autoload
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
281 (defun mh-alias-minibuffer-confirm-address ()
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
282 "Display the alias expansion if `mh-alias-flash-on-comma' is non-nil."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
283 (interactive)
|
56406
|
284 (when mh-alias-flash-on-comma
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
285 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
286 (let* ((case-fold-search t)
|
56406
|
287 (beg (mh-beginning-of-word))
|
|
288 (the-name (buffer-substring-no-properties beg (point))))
|
68520
6a7173abcf59
* mh-acros.el (mh-defun-compat, mh-defmacro-compat): Add name argument
Bill Wohler <wohler@newt.com>
diff
changeset
|
289 (if (mh-assoc-string the-name mh-alias-alist t)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
290 (message "%s -> %s" the-name (mh-alias-expand the-name))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
291 ;; Check if if was a single word likely to be an alias
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
292 (if (and (equal mh-alias-flash-on-comma 1)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
293 (not (string-match " " the-name)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
294 (message "No alias for %s" the-name))))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
295 (self-insert-command 1))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
296
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
297 ;;;###mh-autoload
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
298 (defun mh-alias-letter-expand-alias ()
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
299 "Expand mail alias before point."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
300 (mh-alias-reload-maybe)
|
56406
|
301 (let* ((end (point))
|
|
302 (begin (mh-beginning-of-word))
|
|
303 (input (buffer-substring-no-properties begin end)))
|
|
304 (mh-complete-word input mh-alias-alist begin end)
|
|
305 (when mh-alias-expand-aliases-flag
|
|
306 (let* ((end (point))
|
|
307 (expansion (mh-alias-expand (buffer-substring begin end))))
|
|
308 (delete-region begin end)
|
|
309 (insert expansion)))))
|
68465
|
310
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
311
|
67681
|
312
|
68465
|
313 ;;; Alias File Updating
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
314
|
56406
|
315 (defun mh-alias-suggest-alias (string &optional no-comma-swap)
|
|
316 "Suggest an alias for STRING.
|
67758
|
317 Don't reverse the order of strings separated by a comma if
|
|
318 NO-COMMA-SWAP is non-nil."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
319 (cond
|
50702
|
320 ((string-match "^<\\(.*\\)>$" string)
|
|
321 ;; <somename@foo.bar> -> recurse, stripping brackets.
|
56406
|
322 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
323 ((string-match "^\\sw+$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
324 ;; One word -> downcase it.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
325 (downcase string))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
326 ((string-match "^\\(\\sw+\\)\\s-+\\(\\sw+\\)$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
327 ;; Two words -> first.last
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
328 (downcase
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
329 (format "%s.%s" (match-string 1 string) (match-string 2 string))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
330 ((string-match "^\\([-a-zA-Z0-9._]+\\)@[-a-zA-z0-9_]+\\.+[a-zA-Z0-9]+$"
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
331 string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
332 ;; email only -> downcase username
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
333 (downcase (match-string 1 string)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
334 ((string-match "^\"\\(.*\\)\".*" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
335 ;; "Some name" <somename@foo.bar> -> recurse -> "Some name"
|
56406
|
336 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
337 ((string-match "^\\(.*\\) +<.*>$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
338 ;; Some name <somename@foo.bar> -> recurse -> Some name
|
56406
|
339 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
69031
|
340 ((string-match (concat goto-address-mail-regexp " +(\\(.*\\))$") string)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
341 ;; somename@foo.bar (Some name) -> recurse -> Some name
|
56406
|
342 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
343 ((string-match "^\\(Dr\\|Prof\\)\\.? +\\(.*\\)" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
344 ;; Strip out title
|
56406
|
345 (mh-alias-suggest-alias (match-string 2 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
346 ((string-match "^\\(.*\\), +\\(Jr\\.?\\|II+\\)$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
347 ;; Strip out tails with comma
|
56406
|
348 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
349 ((string-match "^\\(.*\\) +\\(Jr\\.?\\|II+\\)$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
350 ;; Strip out tails
|
56406
|
351 (mh-alias-suggest-alias (match-string 1 string) no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
352 ((string-match "^\\(\\sw+\\) +[A-Z]\\.? +\\(.*\\)$" string)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
353 ;; Strip out initials
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
354 (mh-alias-suggest-alias
|
56406
|
355 (format "%s %s" (match-string 1 string) (match-string 2 string))
|
|
356 no-comma-swap))
|
|
357 ((and (not no-comma-swap)
|
|
358 (string-match "^\\([^,]+\\), +\\(.*\\)$" string))
|
|
359 ;; Reverse order of comma-separated fields to handle:
|
|
360 ;; From: "Galbraith, Peter" <psg@debian.org>
|
|
361 ;; but don't this for a name string extracted from the passwd file
|
|
362 ;; with mh-alias-passwd-gecos-comma-separator-flag set to nil.
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
363 (mh-alias-suggest-alias
|
56406
|
364 (format "%s %s" (match-string 2 string) (match-string 1 string))
|
|
365 no-comma-swap))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
366 (t
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
367 ;; Output string, with spaces replaced by dots.
|
50702
|
368 (mh-alias-canonicalize-suggestion string))))
|
|
369
|
|
370 (defun mh-alias-canonicalize-suggestion (string)
|
56406
|
371 "Process STRING to replace spaces by periods.
|
|
372 First all spaces and commas are replaced by periods. Then every run of
|
67758
|
373 consecutive periods are replaced with a single period. Finally the
|
|
374 string is converted to lower case."
|
50702
|
375 (with-temp-buffer
|
|
376 (insert string)
|
|
377 ;; Replace spaces with periods
|
|
378 (goto-char (point-min))
|
56406
|
379 (while (re-search-forward " +" nil t)
|
|
380 (replace-match "." nil nil))
|
|
381 ;; Replace commas with periods
|
|
382 (goto-char (point-min))
|
|
383 (while (re-search-forward ",+" nil t)
|
|
384 (replace-match "." nil nil))
|
50702
|
385 ;; Replace consecutive periods with a single period
|
|
386 (goto-char (point-min))
|
56406
|
387 (while (re-search-forward "\\.\\.+" nil t)
|
|
388 (replace-match "." nil nil))
|
50702
|
389 ;; Convert to lower case
|
|
390 (downcase-region (point-min) (point-max))
|
|
391 ;; Whew! all done...
|
|
392 (buffer-string)))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
393
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
394 (defun mh-alias-which-file-has-alias (alias file-list)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
395 "Return the name of writable file which defines ALIAS from list FILE-LIST."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
396 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
397 (set-buffer (get-buffer-create mh-temp-buffer))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
398 (let ((the-list file-list)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
399 (found))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
400 (while the-list
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
401 (erase-buffer)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
402 (when (file-writable-p (car file-list))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
403 (insert-file-contents (car file-list))
|
50702
|
404 (if (re-search-forward (concat "^" (regexp-quote alias) ":") nil t)
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
405 (setq found (car file-list)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
406 the-list nil)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
407 (setq the-list (cdr the-list)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
408 found)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
409
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
410 (defun mh-alias-insert-file (&optional alias)
|
56673
|
411 "Return filename which should be used to add ALIAS.
|
67758
|
412 The value of the option `mh-alias-insert-file' is used if non-nil\;
|
67760
|
413 otherwise the value of the \"Aliasfile:\" profile component is used.
|
67758
|
414 If the alias already exists, try to return the name of the file that
|
|
415 contains it."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
416 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
417 ((and mh-alias-insert-file (listp mh-alias-insert-file))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
418 (if (not (elt mh-alias-insert-file 1)) ; Only one entry, use it
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
419 (car mh-alias-insert-file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
420 (if (or (not alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
421 (string-equal alias (mh-alias-ali alias))) ;alias doesn't exist
|
56673
|
422 (completing-read "Alias file: "
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
423 (mapcar 'list mh-alias-insert-file) nil t)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
424 (or (mh-alias-which-file-has-alias alias mh-alias-insert-file)
|
56673
|
425 (completing-read "Alias file: "
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
426 (mapcar 'list mh-alias-insert-file) nil t)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
427 ((and mh-alias-insert-file (stringp mh-alias-insert-file))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
428 mh-alias-insert-file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
429 (t
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
430 ;; writable ones returned from (mh-alias-filenames):
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
431 (let ((autolist (delq nil (mapcar (lambda (file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
432 (if (and (file-writable-p file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
433 (not (string-equal
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
434 file "/etc/passwd")))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
435 file))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
436 (mh-alias-filenames t)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
437 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
438 ((not autolist)
|
68465
|
439 (error "No writable alias file;
|
|
440 set `mh-alias-insert-file' or the \"Aliasfile:\" profile component"))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
441 ((not (elt autolist 1)) ; Only one entry, use it
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
442 (car autolist))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
443 ((or (not alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
444 (string-equal alias (mh-alias-ali alias))) ;alias doesn't exist
|
56673
|
445 (completing-read "Alias file: " (mapcar 'list autolist) nil t))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
446 (t
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
447 (or (mh-alias-which-file-has-alias alias autolist)
|
56673
|
448 (completing-read "Alias file: "
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
449 (mapcar 'list autolist) nil t))))))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
450
|
49578
|
451 ;;;###mh-autoload
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
452 (defun mh-alias-address-to-alias (address)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
453 "Return the ADDRESS alias if defined, or nil."
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
454 (let* ((aliases (mh-alias-ali address t)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
455 (if (string-equal aliases address)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
456 nil ; ali returned same string -> no.
|
49578
|
457 ;; Double-check that we have an individual alias. This means that the
|
|
458 ;; alias doesn't expand into a list (of which this address is part).
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
459 (car (delq nil (mapcar
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
460 (function
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
461 (lambda (alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
462 (let ((recurse (mh-alias-ali alias nil)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
463 (if (string-match ".*,.*" recurse)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
464 nil
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
465 alias))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
466 (split-string aliases ", +")))))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
467
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
468 ;;;###mh-autoload
|
56673
|
469 (defun mh-alias-for-from-p ()
|
|
470 "Return t if sender's address has a corresponding alias."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
471 (mh-alias-reload-maybe)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
472 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
473 (if (not (mh-folder-line-matches-show-buffer-p))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
474 nil ;No corresponding show buffer
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
475 (if (eq major-mode 'mh-folder-mode)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
476 (set-buffer mh-show-buffer))
|
50702
|
477 (let ((from-header (mh-extract-from-header-value)))
|
|
478 (and from-header
|
56673
|
479 (mh-alias-address-to-alias from-header))))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
480
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
481 (defun mh-alias-add-alias-to-file (alias address &optional file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
482 "Add ALIAS for ADDRESS in alias FILE without alias check or prompts.
|
67758
|
483 Prompt for alias file if not provided and there is more than one
|
|
484 candidate.
|
56673
|
485
|
67758
|
486 If the alias exists already, you will have the choice of
|
|
487 inserting the new alias before or after the old alias. In the
|
|
488 former case, this alias will be used when sending mail to this
|
|
489 alias. In the latter case, the alias serves as an additional
|
|
490 folder name hint when filing messages."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
491 (if (not file)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
492 (setq file (mh-alias-insert-file alias)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
493 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
494 (set-buffer (find-file-noselect file))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
495 (goto-char (point-min))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
496 (let ((alias-search (concat alias ":"))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
497 (letter)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
498 (case-fold-search t))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
499 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
500 ;; Search for exact match (if we had the same alias before)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
501 ((re-search-forward
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
502 (concat "^" (regexp-quote alias-search) " *\\(.*\\)") nil t)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
503 (let ((answer (read-string
|
56673
|
504 (format (concat "Alias %s exists; insert new address "
|
|
505 "[b]efore or [a]fter: ")
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
506 (match-string 1))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
507 (case-fold-search t))
|
56673
|
508 (cond ((string-match "^b" answer))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
509 ((string-match "^a" answer)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
510 (forward-line 1))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
511 (t
|
56673
|
512 (error "Unrecognized response")))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
513 ;; No, so sort-in at the right place
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
514 ;; search for "^alias", then "^alia", etc.
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
515 ((eq mh-alias-insertion-location 'sorted)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
516 (setq letter (substring alias-search -1)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
517 alias-search (substring alias-search 0 -1))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
518 (while (and (not (equal alias-search ""))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
519 (not (re-search-forward
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
520 (concat "^" (regexp-quote alias-search)) nil t)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
521 (setq letter (substring alias-search -1)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
522 alias-search (substring alias-search 0 -1)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
523 ;; Next, move forward to sort alphabetically for following letters
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
524 (beginning-of-line)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
525 (while (re-search-forward
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
526 (concat "^" (regexp-quote alias-search) "[a-" letter "]")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
527 nil t)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
528 (forward-line 1)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
529 ((eq mh-alias-insertion-location 'bottom)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
530 (goto-char (point-max)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
531 ((eq mh-alias-insertion-location 'top)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
532 (goto-char (point-min)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
533 (beginning-of-line)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
534 (insert (format "%s: %s\n" alias address))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
535 (save-buffer)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
536
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
537 (defun mh-alias-add-alias (alias address)
|
67999
|
538 "Add ALIAS for ADDRESS in personal alias file.
|
|
539
|
67758
|
540 This function prompts you for an alias and address. If the alias
|
|
541 exists already, you will have the choice of inserting the new
|
|
542 alias before or after the old alias. In the former case, this
|
|
543 alias will be used when sending mail to this alias. In the latter
|
|
544 case, the alias serves as an additional folder name hint when
|
|
545 filing messages."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
546 (interactive "P\nP")
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
547 (mh-alias-reload-maybe)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
548 (setq alias (completing-read "Alias: " mh-alias-alist nil nil alias))
|
50702
|
549 (if (and address (string-match "^<\\(.*\\)>$" address))
|
|
550 (setq address (match-string 1 address)))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
551 (setq address (read-string "Address: " address))
|
50702
|
552 (if (string-match "^<\\(.*\\)>$" address)
|
|
553 (setq address (match-string 1 address)))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
554 (let ((address-alias (mh-alias-address-to-alias address))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
555 (alias-address (mh-alias-expand alias)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
556 (if (string-equal alias-address alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
557 (setq alias-address nil))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
558 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
559 ((and (equal alias address-alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
560 (equal address alias-address))
|
68013
|
561 (message "Already defined as %s" alias-address))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
562 (address-alias
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
563 (if (y-or-n-p (format "Address has alias %s; set new one? "
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
564 address-alias))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
565 (mh-alias-add-alias-to-file alias address)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
566 (t
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
567 (mh-alias-add-alias-to-file alias address)))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
568
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
569 ;;;###mh-autoload
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
570 (defun mh-alias-grab-from-field ()
|
67988
|
571 "Add alias for the sender of the current message."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
572 (interactive)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
573 (mh-alias-reload-maybe)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
574 (save-excursion
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
575 (cond
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
576 ((mh-folder-line-matches-show-buffer-p)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
577 (set-buffer mh-show-buffer))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
578 ((and (eq major-mode 'mh-folder-mode)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
579 (mh-get-msg-num nil))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
580 (set-buffer (get-buffer-create mh-temp-buffer))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
581 (insert-file-contents (mh-msg-filename (mh-get-msg-num t))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
582 ((eq major-mode 'mh-folder-mode)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
583 (error "Cursor not pointing to a message")))
|
50702
|
584 (let* ((address (or (mh-extract-from-header-value)
|
|
585 (error "Message has no From: header")))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
586 (alias (mh-alias-suggest-alias address)))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
587 (mh-alias-add-alias alias address))))
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
588
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
589 (defun mh-alias-add-address-under-point ()
|
56673
|
590 "Insert an alias for address under point."
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
591 (interactive)
|
69031
|
592 (let ((address (goto-address-find-address-at-point)))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
593 (if address
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
594 (mh-alias-add-alias nil address)
|
56673
|
595 (message "No email address found under point"))))
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
596
|
56406
|
597 (defun mh-alias-apropos (regexp)
|
67988
|
598 "Show all aliases or addresses that match a regular expression REGEXP."
|
56406
|
599 (interactive "sAlias regexp: ")
|
|
600 (if mh-alias-local-users
|
|
601 (mh-alias-reload-maybe))
|
56673
|
602 (let ((matches "")
|
|
603 (group-matches "")
|
|
604 (passwd-matches))
|
56406
|
605 (save-excursion
|
|
606 (message "Reading MH aliases...")
|
|
607 (mh-exec-cmd-quiet t "ali" "-nolist" "-nouser")
|
56673
|
608 (message "Parsing MH aliases...")
|
56406
|
609 (while (re-search-forward regexp nil t)
|
|
610 (beginning-of-line)
|
|
611 (cond
|
|
612 ((looking-at "^[ \t]") ;Continuation line
|
|
613 (setq group-matches
|
|
614 (concat group-matches
|
|
615 (buffer-substring
|
|
616 (save-excursion
|
|
617 (or (re-search-backward "^[^ \t]" nil t)
|
|
618 (point)))
|
|
619 (progn
|
|
620 (if (re-search-forward "^[^ \t]" nil t)
|
|
621 (forward-char -1))
|
|
622 (point))))))
|
|
623 (t
|
|
624 (setq matches
|
|
625 (concat matches
|
|
626 (buffer-substring (point)(progn (end-of-line)(point)))
|
|
627 "\n")))))
|
56673
|
628 (message "Parsing MH aliases...done")
|
56406
|
629 (when mh-alias-local-users
|
56673
|
630 (message "Making passwd aliases...")
|
56406
|
631 (setq passwd-matches
|
|
632 (mapconcat
|
|
633 '(lambda (elem)
|
|
634 (if (or (string-match regexp (car elem))
|
|
635 (string-match regexp (cadr elem)))
|
|
636 (format "%s: %s\n" (car elem) (cadr elem))))
|
|
637 mh-alias-passwd-alist ""))
|
56673
|
638 (message "Making passwd aliases...done")))
|
56406
|
639 (if (and (string-equal "" matches)
|
|
640 (string-equal "" group-matches)
|
|
641 (string-equal "" passwd-matches))
|
|
642 (message "No matches")
|
56673
|
643 (with-output-to-temp-buffer mh-aliases-buffer
|
56406
|
644 (if (not (string-equal "" matches))
|
|
645 (princ matches))
|
|
646 (when (not (string-equal group-matches ""))
|
|
647 (princ "\nGroup Aliases:\n\n")
|
|
648 (princ group-matches))
|
|
649 (when (not (string-equal passwd-matches ""))
|
|
650 (princ "\nLocal User Aliases:\n\n")
|
|
651 (princ passwd-matches))))))
|
|
652
|
68465
|
653 (defun mh-folder-line-matches-show-buffer-p ()
|
|
654 "Return t if the message under point in folder-mode is in the show buffer.
|
|
655 Return nil in any other circumstance (no message under point, no
|
|
656 show buffer, the message in the show buffer doesn't match."
|
|
657 (and (eq major-mode 'mh-folder-mode)
|
|
658 (mh-get-msg-num nil)
|
|
659 mh-show-buffer
|
|
660 (get-buffer mh-show-buffer)
|
|
661 (buffer-file-name (get-buffer mh-show-buffer))
|
|
662 (string-match ".*/\\([0-9]+\\)$"
|
|
663 (buffer-file-name (get-buffer mh-show-buffer)))
|
|
664 (string-equal
|
|
665 (match-string 1 (buffer-file-name (get-buffer mh-show-buffer)))
|
|
666 (int-to-string (mh-get-msg-num nil)))))
|
|
667
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
668 (provide 'mh-alias)
|
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
669
|
67681
|
670 ;; Local Variables:
|
|
671 ;; indent-tabs-mode: nil
|
|
672 ;; sentence-end-double-space: nil
|
|
673 ;; End:
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
674
|
67681
|
675 ;; arch-tag: 49879e46-5aa3-4569-bece-e5a58731d690
|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
676 ;;; mh-alias.el ends here
|