;;; mh-alias.el --- MH-E mail alias completion and expansion
-;; Copyright (C) 1994, 1995, 1996, 1997,
-;; 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 1994-1997, 2001-2016 Free Software Foundation, Inc.
;; Author: Peter S. Galbraith <psg@debian.org>
;; Maintainer: Bill Wohler <wohler@newt.com>
;; This file is part of GNU Emacs.
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
"Alist of aliases extracted from passwd file and their expansions.")
(defvar mh-alias-tstamp nil
"Time aliases were last loaded.")
-(defvar mh-alias-read-address-map nil)
-(unless mh-alias-read-address-map
- (setq mh-alias-read-address-map
- (copy-keymap minibuffer-local-completion-map))
- (define-key mh-alias-read-address-map
- "," 'mh-alias-minibuffer-confirm-address)
- (define-key mh-alias-read-address-map " " 'self-insert-command))
+(defvar mh-alias-read-address-map
+ (let ((map (copy-keymap minibuffer-local-completion-map)))
+ (define-key map "," 'mh-alias-minibuffer-confirm-address)
+ (define-key map " " 'self-insert-command)
+ map))
(defvar mh-alias-system-aliases
'("/etc/nmh/MailAliases" "/etc/mh/MailAliases"
"Return an alist of local users from /etc/passwd.
Exclude all aliases already in `mh-alias-alist' from \"ali\""
(let (passwd-alist)
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(cond
((eq mh-alias-local-users t)
(insert-file-contents "/etc/passwd")))
((stringp mh-alias-local-users)
(insert mh-alias-local-users "\n")
- (shell-command-on-region (point-min) (point-max) mh-alias-local-users t)
+ (shell-command-on-region (point-min) (point-max) mh-alias-local-users t t)
(goto-char (point-min))))
(while (< (point) (point-max))
(cond
(let ((user-arg (if user "-user" "-nouser")))
(mh-exec-cmd-quiet t "ali" user-arg "-nolist" alias))
(goto-char (point-max))
- (if (looking-at "^$") (delete-backward-char 1))
+ (if (looking-at "^$") (delete-char -1))
(buffer-substring (point-min)(point-max)))
(error (progn
(message "%s" (error-message-string err))
(completing-read prompt mh-alias-alist nil nil) ",")))))
(if (not mh-alias-expand-aliases-flag)
(mapconcat 'identity the-answer ", ")
- ;; Loop over all elements, checking if in passwd aliast or blind first
+ ;; Loop over all elements, checking if in passwd alias or blind first
(mapconcat 'mh-alias-expand the-answer ",\n ")))))
;;;###mh-autoload
(the-name (buffer-substring-no-properties beg (point))))
(if (mh-assoc-string the-name mh-alias-alist t)
(message "%s -> %s" the-name (mh-alias-expand the-name))
- ;; Check if if was a single word likely to be an alias
+ ;; Check if it was a single word likely to be an alias
(if (and (equal mh-alias-flash-on-comma 1)
(not (string-match " " the-name)))
(message "No alias for %s" the-name))))))
(defun mh-alias-letter-expand-alias ()
"Expand mail alias before point."
(mh-alias-reload-maybe)
- (let* ((end (point))
- (begin (mh-beginning-of-word))
- (input (buffer-substring-no-properties begin end)))
- (mh-complete-word input mh-alias-alist begin end)
- (when mh-alias-expand-aliases-flag
- (let* ((end (point))
- (expansion (mh-alias-expand (buffer-substring begin end))))
- (delete-region begin end)
- (insert expansion)))))
-
+ (let* ((begin (mh-beginning-of-word))
+ (end (save-excursion
+ (goto-char begin)
+ (mh-beginning-of-word -1))))
+ (when (>= end (point))
+ (list
+ begin (if (fboundp 'completion-at-point) end (point))
+ (if (not mh-alias-expand-aliases-flag)
+ mh-alias-alist
+ (lambda (string pred action)
+ (case action
+ ((nil)
+ (let ((res (try-completion string mh-alias-alist pred)))
+ (if (or (eq res t)
+ (and (stringp res)
+ (eq t (try-completion res mh-alias-alist pred))))
+ (or (mh-alias-expand (if (stringp res) res string))
+ res)
+ res)))
+ ((t) (all-completions string mh-alias-alist pred))
+ ((lambda) (mh-test-completion string mh-alias-alist pred)))))))))
\f
;;; Alias File Updating
(defun mh-alias-which-file-has-alias (alias file-list)
"Return the name of writable file which defines ALIAS from list FILE-LIST."
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(let ((the-list file-list)
(found))
(while the-list
(defun mh-alias-insert-file (&optional alias)
"Return filename which should be used to add ALIAS.
-The value of the option `mh-alias-insert-file' is used if non-nil\;
+The value of the option `mh-alias-insert-file' is used if non-nil;
otherwise the value of the \"Aliasfile:\" profile component is used.
If the alias already exists, try to return the name of the file that
contains it."
folder name hint when filing messages."
(if (not file)
(setq file (mh-alias-insert-file alias)))
- (save-excursion
- (set-buffer (find-file-noselect file))
+ (with-current-buffer (find-file-noselect file)
(goto-char (point-min))
(let ((alias-search (concat alias ":"))
(letter)
(message "Making passwd aliases...")
(setq passwd-matches
(mapconcat
- '(lambda (elem)
- (if (or (string-match regexp (car elem))
- (string-match regexp (cadr elem)))
- (format "%s: %s\n" (car elem) (cadr elem))))
+ (lambda (elem)
+ (if (or (string-match regexp (car elem))
+ (string-match regexp (cadr elem)))
+ (format "%s: %s\n" (car elem) (cadr elem))))
mh-alias-passwd-alist ""))
(message "Making passwd aliases...done")))
(if (and (string-equal "" matches)
;; sentence-end-double-space: nil
;; End:
-;; arch-tag: 49879e46-5aa3-4569-bece-e5a58731d690
;;; mh-alias.el ends here