]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/mail/mspools.el: Use lexical-scoping. Autoload `mspools-show`.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 4 Sep 2020 02:03:46 +0000 (22:03 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 4 Sep 2020 02:03:46 +0000 (22:03 -0400)
(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.

etc/NEWS
lisp/mail/mspools.el

index 38cfeaee9b801e62e6e033d8e028f183024cee7a..1ae24d946ddaf6ca579b6853d2304d1a8c27478f 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -167,6 +167,9 @@ same for a button.
 \f
 * 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.
index 21aefa6c79c1f6d80a91acb4e82f188b332e2b70..ab2649feb4b43a5c2dbe885200714fa524c3f8b3 100644 (file)
@@ -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."