Function: mail-get-names

mail-get-names is a byte-compiled function defined in mailalias.el.gz.

Signature

(mail-get-names PREFIX)

Documentation

Fetch local users and global mail addresses for completion.

Consults /etc/passwd and a directory service if one is set up via mail-directory-function. PREFIX is the string we want to complete.

Source Code

;; Defined in /usr/src/emacs/lisp/mail/mailalias.el.gz
(defun mail-get-names (prefix)
  "Fetch local users and global mail addresses for completion.
Consults `/etc/passwd' and a directory service if one is set up via
`mail-directory-function'.
PREFIX is the string we want to complete."
  (if (eq mail-local-names t)
      (with-current-buffer (generate-new-buffer " passwd")
	(let ((files mail-passwd-files))
	  (while files
	    (insert-file-contents (car files) nil nil nil t)
	    (setq files (cdr files))))
	(if mail-passwd-command
	    (call-process shell-file-name nil t nil
			  shell-command-switch mail-passwd-command))
	(goto-char (point-min))
	(setq mail-local-names nil)
	(while (not (eobp))
	  ;;Recognize lines like
	  ;;  nobody:*:65534:65534::/:
	  ;;  +demo::::::/bin/csh
	  ;;  +ethanb
	  ;;while skipping
	  ;;  +@SOFTWARE
	  ;; The second \(...\) matches the user id.
	  (if (looking-at "\\+?\\([^:@\n+]+\\):[^:\n]*:\\([^\n:]*\\):")
	      (add-to-list 'mail-local-names
			   (cons (match-string 1)
				 (user-full-name
				  (string-to-number (match-string 2))))))
	  (beginning-of-line 2))
	(kill-buffer (current-buffer))))
  (if (or (eq mail-names t)
	  (eq mail-directory-names t))
      (let (directory)
	(and mail-directory-function
	     (eq mail-directory-names t)
	     (setq directory
		   (mail-directory (if mail-directory-requery prefix))))
	(or mail-directory-requery
	    (setq mail-directory-names directory))
	(if (or directory
		(eq mail-names t))
	    (setq mail-names
		  (sort (append (if (consp mail-aliases)
				    (mapcar
                                     (lambda (a) (list (car a)))
				     mail-aliases))
				(if (consp mail-local-names)
				    mail-local-names)
				(or directory
				    (when (consp mail-directory-names)
				      mail-directory-names)))
			(lambda (a b)
			  ;; Should cache downcased strings.
			  (string< (downcase (car a))
				   (downcase (car b)))))))))
  (mail-completion-expand mail-names))