]> code.delx.au - gnu-emacs/blobdiff - lisp/mh-e/mh-alias.el
; Merge from origin/emacs-25
[gnu-emacs] / lisp / mh-e / mh-alias.el
index bb427ef889e73e744f0c78f8a36b1be66dc69303..1940234bc3b38b5befc343cbab717a72b7555323 100644 (file)
@@ -1,7 +1,6 @@
 ;;; 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
@@ -21,9 +20,7 @@
 ;; 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"
@@ -138,8 +133,7 @@ COMMA-SEPARATOR is non-nil."
   "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)
@@ -147,7 +141,7 @@ Exclude all aliases already in `mh-alias-alist' from \"ali\""
             (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
@@ -238,7 +232,7 @@ returns the string unchanged if not defined. The same is done here."
         (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))
@@ -278,7 +272,7 @@ Blind aliases or users from /etc/passwd are not expanded."
                       (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
@@ -292,7 +286,7 @@ Blind aliases or users from /etc/passwd are not expanded."
              (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))))))
@@ -302,16 +296,27 @@ Blind aliases or users from /etc/passwd are not expanded."
 (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
@@ -397,8 +402,7 @@ string is converted to lower case."
 
 (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
@@ -413,7 +417,7 @@ string is converted to lower case."
 
 (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."
@@ -494,8 +498,7 @@ alias. In the latter case, the alias serves as an additional
 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)
@@ -634,10 +637,10 @@ filing messages."
         (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)
@@ -676,5 +679,4 @@ show buffer, the message in the show buffer doesn't match."
 ;; sentence-end-double-space: nil
 ;; End:
 
-;; arch-tag: 49879e46-5aa3-4569-bece-e5a58731d690
 ;;; mh-alias.el ends here