1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(build-mail-aliases): Use with-temp-buffer,

expand-file-name and with-current-buffer.
(mail-get-names, mail-directory): Use with-current-buffer.
This commit is contained in:
Stefan Monnier 2009-08-27 18:32:37 +00:00
parent 17c15b81a5
commit 9421bdd19f
2 changed files with 55 additions and 61 deletions

View File

@ -1,5 +1,9 @@
2009-08-27 Stefan Monnier <monnier@iro.umontreal.ca>
* mail/mailalias.el (build-mail-aliases): Use with-temp-buffer,
expand-file-name and with-current-buffer.
(mail-get-names, mail-directory): Use with-current-buffer.
* vc.el (vc-read-revision): New function.
(vc-version-diff, vc-merge): Use it.

View File

@ -244,61 +244,53 @@ By default, this is the file specified by `mail-personal-alias-file'."
;; In case mail-aliases is t, make sure define-mail-alias
;; does not recursively call build-mail-aliases.
(setq mail-aliases nil)
(let ((buffer nil)
(obuf (current-buffer)))
(unwind-protect
(progn
(setq buffer (generate-new-buffer " mailrc"))
(set-buffer buffer)
(while file
(cond ((get-file-buffer file)
(insert (save-excursion
(set-buffer (get-file-buffer file))
(buffer-substring-no-properties
(point-min) (point-max)))))
((file-exists-p file) (insert-file-contents file))
((file-exists-p (setq file (concat "~/" file)))
(insert-file-contents file))
(t (setq file nil)))
(goto-char (point-min))
;; Delete comments from the contents.
(while (search-forward "# " nil t)
(let ((p (- (point) 2)))
(end-of-line)
(delete-region p (point))))
;; Don't lose if no final newline.
(goto-char (point-max))
(or (eq (preceding-char) ?\n) (newline))
(goto-char (point-min))
;; handle "\\\n" continuation lines
(while (not (eobp))
(end-of-line)
(if (= (preceding-char) ?\\)
(progn (delete-char -1) (delete-char 1) (insert ?\ ))
(forward-char 1)))
(goto-char (point-min))
;; handle `source' directives -- Eddy/1994/May/25
(cond ((re-search-forward "^source[ \t]+" nil t)
(re-search-forward "\\S-+")
(setq file (buffer-substring-no-properties
(match-beginning 0) (match-end 0)))
(beginning-of-line)
(insert "# ") ; to ensure we don't re-process this file
(beginning-of-line))
(t (setq file nil))))
(goto-char (point-min))
(while (re-search-forward
"^\\(a\\|alias\\|g\\|group\\)[ \t]+\\([^ \t\n]+\\)" nil t)
(let* ((name (match-string 2))
(start (progn (skip-chars-forward " \t") (point)))
value)
(end-of-line)
(setq value (buffer-substring-no-properties start (point)))
(unless (equal value "")
(define-mail-alias name value t))))
mail-aliases)
(if buffer (kill-buffer buffer))
(set-buffer obuf))))
(with-temp-buffer
(while file
(cond ((get-file-buffer file)
(insert (with-current-buffer (get-file-buffer file)
(buffer-substring-no-properties
(point-min) (point-max)))))
((file-exists-p file) (insert-file-contents file))
((file-exists-p (setq file (expand-file-name file "~/")))
(insert-file-contents file))
(t (setq file nil)))
(goto-char (point-min))
;; Delete comments from the contents.
(while (search-forward "# " nil t)
(let ((p (- (point) 2)))
(end-of-line)
(delete-region p (point))))
;; Don't lose if no final newline.
(goto-char (point-max))
(or (eq (preceding-char) ?\n) (newline))
(goto-char (point-min))
;; handle "\\\n" continuation lines
(while (not (eobp))
(end-of-line)
(if (= (preceding-char) ?\\)
(progn (delete-char -1) (delete-char 1) (insert ?\ ))
(forward-char 1)))
(goto-char (point-min))
;; handle `source' directives -- Eddy/1994/May/25
(cond ((re-search-forward "^source[ \t]+" nil t)
(re-search-forward "\\S-+")
(setq file (buffer-substring-no-properties
(match-beginning 0) (match-end 0)))
(beginning-of-line)
(insert "# ") ; to ensure we don't re-process this file
(beginning-of-line))
(t (setq file nil))))
(goto-char (point-min))
(while (re-search-forward
"^\\(a\\|alias\\|g\\|group\\)[ \t]+\\([^ \t\n]+\\)" nil t)
(let* ((name (match-string 2))
(start (progn (skip-chars-forward " \t") (point)))
value)
(end-of-line)
(setq value (buffer-substring-no-properties start (point)))
(unless (equal value "")
(define-mail-alias name value t))))
mail-aliases))
;; Always autoloadable in case the user wants to define aliases
;; interactively or in .emacs.
@ -452,8 +444,7 @@ Consults `/etc/passwd' and a directory service if one is set up via
`mail-directory-function'.
PATTERN is the string we want to complete."
(if (eq mail-local-names t)
(save-excursion
(set-buffer (generate-new-buffer " passwd"))
(with-current-buffer (generate-new-buffer " passwd")
(let ((files mail-passwd-files))
(while files
(insert-file-contents (car files) nil nil nil t)
@ -511,11 +502,10 @@ PATTERN is the string we want to complete."
If PATTERN is nil, get all the defined user names.
This function calls `mail-directory-function' to query the directory,
then uses `mail-directory-parser' to parse the output it returns."
(save-excursion
(message "Querying directory...")
(set-buffer (generate-new-buffer " *mail-directory*"))
(message "Querying directory...")
(with-current-buffer (generate-new-buffer " *mail-directory*")
(funcall mail-directory-function pattern)
(goto-char 1)
(goto-char (point-min))
(let (directory)
(if (stringp mail-directory-parser)
(while (re-search-forward mail-directory-parser nil t)