+2009-11-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * mh-thread.el (mh-thread-set-tables):
+ * mh-speed.el (mh-folder-speedbar-menu-items, mh-speed-stealth-update):
+ (mh-speed-extract-folder-name, mh-speed-parse-flists-output):
+ (mh-speed-invalidate-map, mh-speed-add-folder):
+ * mh-show.el (mh-invalidate-show-buffer, mh-show-sequence-menu):
+ * mh-seq.el (mh-list-sequences):
+ * mh-search.el (mh-index-execute-commands, mh-index-add-to-sequence)
+ (mh-index-delete-from-sequence, mh-index-update-maps):
+ * mh-scan.el (mh-msg-num-width):
+ * mh-print.el (mh-ps-spool-buffer):
+ * mh-mime.el (mh-mime-save-parts, mh-handle-set-external-undisplayer)
+ (mh-file-mime-type):
+ * mh-letter.el (mh-yank-cur-msg):
+ * mh-funcs.el (mh-list-folders, mh-pipe-msg, mh-store-msg)
+ (mh-store-buffer):
+ * mh-folder.el (mh-modify, mh-visit-folder, mh-write-msg-to-file)
+ (mh-prompt-for-refile-folder):
+ * mh-e.el (mh-exec-cmd, mh-exec-cmd-error, mh-exec-cmd-daemon)
+ (mh-handle-process-error, mh-variant-info):
+ * mh-comp.el (mh-forward):
+ * mh-alias.el (mh-alias-local-users, mh-alias-which-file-has-alias):
+ (mh-alias-add-alias-to-file): Use with-current-buffer.
+
2009-11-04 Stefan Monnier <monnier@iro.umontreal.ca>
* mh-e.el: Load mh-loaddefs during compilation as well.
"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)
(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
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)
(mh-read-draft "" draft-name nil)))))
(let (orig-from
orig-subject)
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(insert-file-contents fwd-msg-file)
(setq orig-from (mh-get-header-field "From:"))
The side effects are what is desired. Any output is assumed to be
an error and is shown to the user. The output is not read or
parsed by MH-E."
- (save-excursion
- (set-buffer (get-buffer-create mh-log-buffer))
+ (with-current-buffer (get-buffer-create mh-log-buffer)
(let* ((initial-size (mh-truncate-log-buffer))
(start (point))
(args (mh-list-to-string args)))
"In environment ENV, execute mh-command COMMAND with ARGS.
ENV is nil or a string of space-separated \"var=value\" elements.
Signals an error if process does not complete successfully."
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(let ((process-environment process-environment))
;; XXX: We should purge the list that split-string returns of empty
`set-process-filter' for more details of FILTER.
ARGS are passed to COMMAND as command line arguments."
- (save-excursion
- (set-buffer (get-buffer-create mh-log-buffer))
+ (with-current-buffer (get-buffer-create mh-log-buffer)
(mh-truncate-log-buffer))
(let* ((process-connection-type nil)
(process (apply 'start-process
(insert (if (integerp status)
(format "%s: exit code %d\n" command status)
(format "%s: %s\n" command status)))
- (save-excursion
- (let ((error-message (buffer-substring (point-min) (point-max))))
- (set-buffer (get-buffer-create mh-log-buffer))
+ (let ((error-message (buffer-substring (point-min) (point-max))))
+ (with-current-buffer (get-buffer-create mh-log-buffer)
(mh-truncate-log-buffer)
(insert error-message)))
(error "%s failed, check buffer %s for error message"
(defun mh-variant-info (dir)
"Return MH variant found in DIR, or nil if none present."
- (save-excursion
- (let ((tmp-buffer (get-buffer-create mh-temp-buffer)))
- (set-buffer tmp-buffer)
+ (let ((tmp-buffer (get-buffer-create mh-temp-buffer)))
+ (with-current-buffer tmp-buffer
(cond
((mh-variant-mh-info dir))
((mh-variant-nmh-info dir))
;; Invalidate the show buffer if it is showing the same message that is
;; to be edited.
(when (and (buffer-live-p (get-buffer mh-show-buffer))
- (equal (save-excursion (set-buffer mh-show-buffer)
- buffer-file-name)
+ (equal (with-current-buffer mh-show-buffer
+ buffer-file-name)
msg-filename))
(mh-invalidate-show-buffer))
(current-buffer (current-buffer))
(threaded-view-flag mh-show-threads-flag))
(delete-other-windows)
- (save-excursion
- (when (get-buffer folder)
- (set-buffer folder)
+ (when (get-buffer folder)
+ (with-current-buffer folder
(setq threaded-view-flag (memq 'unthread mh-view-ops))))
(when index-data
(mh-make-folder folder)
(output-file (mh-expand-file-name file)))
(setq mh-last-destination (list 'write file (if no-header 'no-header))
mh-last-destination-write mh-last-destination)
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(insert-file-contents msg-file-to-output)
(goto-char (point-min))
"Destination"
(let ((refile-file (ignore-errors (mh-msg-filename (mh-get-msg-num t)))))
(if (null refile-file) ""
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(insert-file-contents refile-file)
(or (and mh-default-folder-for-message-function
(interactive)
(let ((temp-buffer mh-folders-buffer))
(with-output-to-temp-buffer temp-buffer
- (save-excursion
- (set-buffer temp-buffer)
+ (with-current-buffer temp-buffer
(erase-buffer)
(message "Listing folders...")
(mh-exec-cmd-output "folders" t (if mh-recursive-folders-flag
(list (read-string "Shell command on message: ") current-prefix-arg))
(let ((msg-file-to-pipe (mh-msg-filename (mh-get-msg-num t)))
(message-directory default-directory))
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(insert-file-contents msg-file-to-pipe)
(goto-char (point-min))
(read-file-name "Store message in directory: "
udir udir nil))))
(let ((msg-file-to-store (mh-msg-filename (mh-get-msg-num t))))
- (save-excursion
- (set-buffer (get-buffer-create mh-temp-buffer))
+ (with-current-buffer (get-buffer-create mh-temp-buffer)
(erase-buffer)
(insert-file-contents msg-file-to-store)
(mh-store-buffer directory))))
(setq uudecode-filename
(buffer-substring (point)
(progn (end-of-line) (point)))))))
- (save-excursion
- (set-buffer (get-buffer-create mh-log-buffer))
+ (with-current-buffer (get-buffer-create mh-log-buffer)
(setq log-begin (mh-truncate-log-buffer))
(if (not (file-directory-p store-directory))
(progn
(if (equal (call-process-region sh-start (point-max) command
nil mh-log-buffer t)
0)
- (save-excursion
- (set-buffer mh-log-buffer)
+ (with-current-buffer mh-log-buffer
(insert "\n(mh-store finished)\n"))
(error "Error occurred during execution of %s" command)))))
and `mh-ins-buf-prefix' is not inserted."
(interactive)
(if (and mh-sent-from-folder
- (save-excursion (set-buffer mh-sent-from-folder) mh-show-buffer)
- (save-excursion (set-buffer mh-sent-from-folder)
- (get-buffer mh-show-buffer))
+ (with-current-buffer mh-sent-from-folder mh-show-buffer)
+ (with-current-buffer mh-sent-from-folder
+ (get-buffer mh-show-buffer))
mh-sent-from-msg)
(let ((to-point (point))
(to-buffer (current-buffer)))
(message "No directory specified")
(if (equal nil mh-mime-save-parts-default-directory)
(setq mh-mime-save-parts-directory directory))
- (save-excursion
- (set-buffer (get-buffer-create mh-log-buffer))
+ (with-current-buffer (get-buffer-create mh-log-buffer)
(cd directory)
(setq mh-mime-save-parts-directory directory)
(let ((initial-size (mh-truncate-log-buffer)))
(let ((new-handle (copy-sequence handle)))
(mm-handle-set-undisplayer new-handle function)
(mm-handle-set-undisplayer handle nil)
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(push new-handle (mh-mime-handles (mh-buffer-data)))))
(mm-handle-set-undisplayer handle function)))
(file-readable-p filename)))
nil) ;no file or not readable, ditto
(t
- (save-excursion
- (let ((tmp-buffer (get-buffer-create mh-temp-buffer)))
- (set-buffer tmp-buffer)
+ (let ((tmp-buffer (get-buffer-create mh-temp-buffer)))
+ (with-current-buffer tmp-buffer
(unwind-protect
(progn
(call-process "file" nil '(t nil) nil "-b" "-i"
(defun mh-ps-spool-buffer (buffer)
"Spool BUFFER."
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(let ((ps-print-color-p mh-ps-print-color-option)
(ps-left-header
(list
(or mh-progs (mh-find-path))
(let ((tmp-buffer (get-buffer-create mh-temp-buffer))
(width 0))
- (save-excursion
- (set-buffer tmp-buffer)
+ (with-current-buffer tmp-buffer
(erase-buffer)
(apply 'call-process
(expand-file-name mh-scan-prog mh-progs) nil '(t nil) nil
;; If source folder not open, just delete the messages...
(apply #'mh-exec-cmd "rmm" folder (mh-coalesce-msg-list msgs))
;; Otherwise delete the messages in the source buffer...
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(let ((old-refile-list mh-refile-list)
(old-delete-list mh-delete-list))
(setq mh-refile-list nil
(mh-coalesce-msg-list msgs)))
;; Update source folder buffer if we have it open...
(when (get-buffer folder)
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(mh-put-msg-in-seq msgs seq))))
(mh-index-matching-source-msgs msgs))
folders))))
(mh-coalesce-msg-list msgs)))
;; Update source folder buffer if we have it open...
(when (get-buffer folder)
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(mh-delete-msg-from-seq msgs seq t))))
(mh-index-matching-source-msgs msgs))
folders))))
was copied. If present the checksum -> (origin-folder,
origin-index) map is updated too."
(clrhash mh-index-msg-checksum-map)
- (save-excursion
- ;; Clear temp buffer
- (set-buffer (get-buffer-create mh-temp-checksum-buffer))
+ ;; Clear temp buffer
+ (with-current-buffer (get-buffer-create mh-temp-checksum-buffer)
(erase-buffer)
;; Run scan to check if any messages needs MD5 annotations at all
(with-temp-buffer
(mh-exec-cmd "anno" folder msg "-component" "X-MHE-Checksum"
"-nodate" "-text" checksum "-inplace")
;; update maps
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(mh-index-update-single-msg msg checksum origin-map)))
(forward-line)))))
(mh-index-write-data))
(seq-list mh-seq-list)
(max-len 0))
(with-output-to-temp-buffer temp-buffer
- (save-excursion
- (set-buffer temp-buffer)
+ (with-current-buffer temp-buffer
(erase-buffer)
(message "Listing sequences ...")
(insert "Sequences in folder " folder ":\n")
(defun mh-invalidate-show-buffer ()
"Invalidate the show buffer so we must update it to use it."
(if (get-buffer mh-show-buffer)
- (save-excursion
- (set-buffer mh-show-buffer)
+ (with-current-buffer mh-show-buffer
(mh-unvisit-file))))
(defun mh-unvisit-file ()
"--"
["Narrow to Subject Sequence" mh-show-narrow-to-subject t]
["Narrow to Tick Sequence" mh-show-narrow-to-tick
- (save-excursion
- (set-buffer mh-show-folder-buffer)
+ (with-current-buffer mh-show-folder-buffer
(and mh-tick-seq (mh-seq-msgs (mh-find-seq mh-tick-seq))))]
["Delete Rest of Same Subject" mh-show-delete-subject t]
["Toggle Tick Mark" mh-show-toggle-tick t]
(defvar mh-folder-speedbar-menu-items
'("--"
["Visit Folder" mh-speed-view
- (save-excursion
- (set-buffer speedbar-buffer)
+ (with-current-buffer speedbar-buffer
(get-text-property (mh-line-beginning-position) 'mh-folder))]
["Expand Nested Folders" mh-speed-expand-folder
(and (get-text-property (mh-line-beginning-position) 'mh-children-p)
(defun mh-speed-stealth-update (&optional force)
"Do stealth update.
With non-nil FORCE, the update is always carried out."
- (cond ((save-excursion (set-buffer speedbar-buffer)
- (get-text-property (point-min) 'mh-level))
+ (cond ((with-current-buffer speedbar-buffer
+ (get-text-property (point-min) 'mh-level))
;; Execute this hook and *don't* run anything else
(mh-speed-update-current-folder force)
nil)
"Given an MH-E BUFFER find the folder that should be highlighted.
Do the right thing for the different kinds of buffers that MH-E
uses."
- (save-excursion
- (set-buffer buffer)
+ (with-current-buffer buffer
(cond ((eq major-mode 'mh-folder-mode)
mh-current-folder)
((eq major-mode 'mh-show-mode)
(or (not (equal (car old-pair) unseen))
(not (equal (cdr old-pair) total)))))
(setf (gethash folder mh-speed-flists-cache) (cons unseen total))
- (save-excursion
- (when (buffer-live-p (get-buffer speedbar-buffer))
- (set-buffer speedbar-buffer)
+ (when (buffer-live-p (get-buffer speedbar-buffer))
+ (with-current-buffer speedbar-buffer
(speedbar-with-writable
(when (get-text-property (point-min) 'mh-level)
(let ((pos (gethash folder mh-speed-folder-map))
(defun mh-speed-invalidate-map (folder)
"Remove FOLDER from various optimization caches."
(interactive (list ""))
- (save-excursion
- (set-buffer speedbar-buffer)
+ (with-current-buffer speedbar-buffer
(let* ((speedbar-update-flag nil)
(last-slash (mh-search-from-end ?/ folder))
(parent (if last-slash (substring folder 0 last-slash) nil))
(defun mh-speed-add-folder (folder)
"Add FOLDER since it is being created.
The function invalidates the latest ancestor that is present."
- (save-excursion
- (set-buffer speedbar-buffer)
+ (with-current-buffer speedbar-buffer
(let ((speedbar-update-flag nil)
(last-slash (mh-search-from-end ?/ folder))
(ancestor folder)
(defun mh-thread-set-tables (folder)
"Use the tables of FOLDER in current buffer."
(flet ((mh-get-table (symbol)
- (save-excursion
- (set-buffer folder)
+ (with-current-buffer folder
(symbol-value symbol))))
(setq mh-thread-id-hash (mh-get-table 'mh-thread-id-hash))
(setq mh-thread-subject-hash (mh-get-table 'mh-thread-subject-hash))