summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2020-09-03 22:03:46 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2020-09-03 22:03:46 -0400
commit6f88247a6c44e8ca6c36f7db36f9bc2a878c8cf6 (patch)
tree53b3ed2c35f6cd7ed9a98feccb6759d2e448d78d
parentae6daa680a5f5f5fb9c6a15296e5e88c97cd770a (diff)
downloademacs-6f88247a6c44e8ca6c36f7db36f9bc2a878c8cf6.tar.gz
* lisp/mail/mspools.el: Use lexical-scoping. Autoload `mspools-show`.
(mspools-mode-map): Remove bindings made redundant by `special-mode-map`. (mspools-show): Autoload. Use `erase-buffer`. (mspools-visit-spool): Use `inhibit-read-only`; simplify a bit. (mspools-get-spool-files): Avoid `setq`. Use `pcase-dolist`. (mspools-revert-buffer): Make (unused) args optional. (mspools-help, mspools-show-again, mspools-quit): Declare obsolete.
-rw-r--r--etc/NEWS3
-rw-r--r--lisp/mail/mspools.el93
2 files changed, 48 insertions, 48 deletions
diff --git a/etc/NEWS b/etc/NEWS
index 38cfeaee9b8..1ae24d946dd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -167,6 +167,9 @@ same for a button.
* Changes in Specialized Modes and Packages in Emacs 28.1
+** mspool.el
+---
+*** Autoload the main entry point 'mspool-show'
** Windows
*** The key prefix 'C-x 4 1' displays next command buffer in the same window.
diff --git a/lisp/mail/mspools.el b/lisp/mail/mspools.el
index 21aefa6c79c..ab2649feb4b 100644
--- a/lisp/mail/mspools.el
+++ b/lisp/mail/mspools.el
@@ -1,4 +1,4 @@
-;;; mspools.el --- show mail spools waiting to be read
+;;; mspools.el --- show mail spools waiting to be read -*- lexical-binding: t; -*-
;; Copyright (C) 1997, 2001-2020 Free Software Foundation, Inc.
@@ -170,11 +170,8 @@ your primary spool is. If this fails, set it to something like
(define-key map "\C-c\C-c" 'mspools-visit-spool)
(define-key map "\C-m" 'mspools-visit-spool)
(define-key map " " 'mspools-visit-spool)
- (define-key map "?" 'mspools-help)
- (define-key map "q" 'mspools-quit)
(define-key map "n" 'next-line)
(define-key map "p" 'previous-line)
- (define-key map "g" 'revert-buffer)
map)
"Keymap for the *spools* buffer.")
@@ -216,14 +213,15 @@ your primary spool is. If this fails, set it to something like
(concat mspools-folder-directory s "." mspools-suffix)
(concat mspools-folder-directory s ".crash")))
;; So I create a vm-spool-files entry for each of those mail drops
- (mapcar 'file-name-sans-extension
+ (mapcar #'file-name-sans-extension
(directory-files mspools-folder-directory nil
(format "\\`[^.]+\\.%s" mspools-suffix)))
))
))
;;; MSPOOLS-SHOW -- the main function
-(defun mspools-show ( &optional noshow)
+;;;###autoload
+(defun mspools-show (&optional noshow)
"Show the list of non-empty spool files in the *spools* buffer.
Buffer is not displayed if SHOW is non-nil."
(interactive)
@@ -232,7 +230,7 @@ Buffer is not displayed if SHOW is non-nil."
(progn
(set-buffer mspools-buffer)
(setq buffer-read-only nil)
- (delete-region (point-min) (point-max)))
+ (erase-buffer))
;; else buffer doesn't exist so create it
(get-buffer-create mspools-buffer))
@@ -255,8 +253,8 @@ Buffer is not displayed if SHOW is non-nil."
(defun mspools-visit-spool ()
"Visit the folder on the current line of the *spools* buffer."
(interactive)
- (let ( spool-name folder-name)
- (setq spool-name (mspools-get-spool-name))
+ (let ((spool-name (mspools-get-spool-name))
+ folder-name)
(if (null spool-name)
(message "No spool on current line")
@@ -265,19 +263,20 @@ Buffer is not displayed if SHOW is non-nil."
;; put in a little "*" to indicate spool file has been read.
(if (not mspools-update)
(save-excursion
- (setq buffer-read-only nil)
(beginning-of-line)
- (insert "*")
- (delete-char 1)
- (setq buffer-read-only t)
- ))
+ (let ((inhibit-read-only t))
+ (insert "*")
+ (delete-char 1))))
(message "folder %s spool %s" folder-name spool-name)
- (if (eq (count-lines (point-min) (point-at-eol))
- mspools-files-len)
- (forward-line (- 1 mspools-files-len)) ;back to top of list
- ;; else just on to next line
- (forward-line 1))
+ (forward-line (if (eq (count-lines (point-min) (point-at-eol))
+ mspools-files-len)
+ ;; FIXME: Why use `mspools-files-len' instead
+ ;; of looking if we're on the last line and
+ ;; jumping to the first one if so?
+ (- 1 mspools-files-len) ;back to top of list
+ ;; else just on to next line
+ 1))
;; Choose whether to use VM or RMAIL for reading folder.
(if mspools-using-vm
@@ -291,8 +290,8 @@ Buffer is not displayed if SHOW is non-nil."
(if mspools-update
;; generate new list of spools.
- (save-excursion
- (mspools-show-again 'noshow))))))
+ (save-excursion ;;FIXME: Why?
+ (mspools-revert-buffer))))))
(defun mspools-get-folder-from-spool (name)
"Return folder name corresponding to the spool file NAME."
@@ -314,27 +313,31 @@ Buffer is not displayed if SHOW is non-nil."
(defun mspools-get-spool-name ()
"Return the name of the spool on the current line."
(let ((line-num (1- (count-lines (point-min) (point-at-eol)))))
+ ;; FIXME: Why not extract the name directly from the current line's text?
(car (nth line-num mspools-files))))
;;; Spools mode functions
-(defun mspools-revert-buffer (ignore noconfirm)
- "Re-run mspools-show to revert the *spools* buffer."
+(defun mspools-revert-buffer (&optional _ignore _noconfirm)
+ "Re-run `mspools-show' to revert the *spools* buffer."
(mspools-show 'noshow))
(defun mspools-show-again (&optional noshow)
- "Update the *spools* buffer. This is useful if mspools-update is
-nil."
+ "Update the *spools* buffer.
+This is useful if `mspools-update' is nil."
+ (declare (obsolete revert-buffer "28.1"))
(interactive)
(mspools-show noshow))
(defun mspools-help ()
"Show help for `mspools-mode'."
+ (declare (obsolete describe-mode "28.1"))
(interactive)
(describe-function 'mspools-mode))
(defun mspools-quit ()
"Quit the *spools* buffer."
+ (declare (obsolete quit-window "28.1"))
(interactive)
(kill-buffer mspools-buffer))
@@ -348,32 +351,26 @@ nil."
(defun mspools-get-spool-files ()
"Find the list of spool files and display them in *spools* buffer."
- (let (folders head spool len beg end any)
- (if (null mspools-folder-directory)
- (error "Set `mspools-folder-directory' to where the spool files are"))
- (setq folders (directory-files mspools-folder-directory nil
+ (if (null mspools-folder-directory)
+ (error "Set `mspools-folder-directory' to where the spool files are"))
+ (let* ((folders (directory-files mspools-folder-directory nil
(format "\\`[^.]+\\.%s\\'" mspools-suffix)))
- (setq folders (mapcar 'mspools-size-folder folders))
- (setq folders (delq nil folders))
+ (folders (delq nil (mapcar #'mspools-size-folder folders)))
+ ;; beg end
+ )
(setq mspools-files folders)
(setq mspools-files-len (length mspools-files))
- (set-buffer mspools-buffer)
- (while folders
- (setq any t)
- (setq head (car folders))
- (setq spool (car head))
- (setq len (cdr head))
- (setq folders (cdr folders))
- (setq beg (point))
- (insert (format " %10d %s" len spool))
- (setq end (point))
- (insert "\n")
- ;;(put-text-property beg end 'mouse-face 'highlight)
- )
- (if any
- (delete-char -1)) ;delete last RET
- (goto-char (point-min))
- ))
+ (with-current-buffer mspools-buffer
+ (pcase-dolist (`(,spool . ,len) folders)
+ ;; (setq beg (point))
+ (insert (format " %10d %s" len spool))
+ ;; (setq end (point))
+ (insert "\n")
+ ;;(put-text-property beg end 'mouse-face 'highlight)
+ )
+ (if (not (bolp))
+ (delete-char -1)) ;delete last RET
+ (goto-char (point-min)))))
(defun mspools-size-folder (spool)
"Return (SPOOL . SIZE ), if SIZE of spool file is non-zero."