]> code.delx.au - gnu-emacs/commitdiff
Build proper keymap for the "Input (menu)" and "Output (menu)" submenus:
authorRichard M. Stallman <rms@gnu.org>
Mon, 19 Sep 1994 05:01:33 +0000 (05:01 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 19 Sep 1994 05:01:33 +0000 (05:01 +0000)
(rmail-find-all-files, rmail-list-to-menu, rmail-construct-io-menu):
New functions.
(rmail-input-menu): Function deleted.
(rmail). Call rmail-construct-io-menu.
(rmail-mode-map): 'Input Rmail file (menu)' renamed to
`Input Rmail File'.  `Output (Rmail Menu)' renamed to 'Output Rmail File'.

lisp/mail/rmail.el

index 617fc3da36b930e6e0e6c04c485d56fa98feadaf..782983c0033eb0ed53201720fb4792457279caf4 100644 (file)
@@ -280,7 +280,8 @@ If `rmail-display-summary' is non-nil, make a summary for this RMAIL file."
       ;; determine already unseen messages first, as rmail-get-new-mail
       ;; positions on the first new message, thus marking it as seen.
       (rmail-show-message existing-unseen))
-    (if rmail-display-summary (rmail-summary))))
+    (if rmail-display-summary (rmail-summary))
+    (rmail-construct-io-menu)))
 
 ;; Given the value of MAILPATH, return a list of inbox file names.
 ;; This is turned off because it is not clear that the user wants
@@ -414,10 +415,10 @@ Note:    it means the file has no messages in it.\n\^_")))
   (cons "Classify" (make-sparse-keymap "Classify")))
 
 (define-key rmail-mode-map [menu-bar classify input-menu]
-  '("Input Rmail file (menu)..." . rmail-input-menu))
+  nil)
 
 (define-key rmail-mode-map [menu-bar classify output-menu]
-  '("Output (Rmail menu)..." . rmail-output-menu))
+  nil)
 
 (define-key rmail-mode-map [menu-bar classify output-inbox]
   '("Output (inbox)..." . rmail-output))
@@ -691,31 +692,66 @@ Instead, these commands are available:
   (interactive "FRun rmail on RMAIL file: ")
   (rmail filename))
 
-;; Choose a .xmail file in dir rmail-secondary-file-directory.
-(defun rmail-secondary-file-menu (event)
-  (let ((files (directory-files rmail-secondary-file-directory nil
-                               rmail-secondary-file-regexp)))
-    (if files
-       (let* ((menu (list "Rmail Files"
-                          (cons "Rmail Files"
-                                (mapcar (function (lambda (f) (cons f f)))
-                                        files))))
-              (chosen (x-popup-menu event menu)))
-         (if chosen
-             (expand-file-name chosen rmail-secondary-file-directory)))
-      (message "No files matching %s%s found"
-              rmail-secondary-file-directory rmail-secondary-file-regexp)
-      nil)))
-
+(defun rmail-find-all-files (start)
+  (if (file-accessible-directory-p start)
+      (let ((files (directory-files start nil
+                                   rmail-secondary-file-regexp))
+           (ret nil))
+       (while files
+         (setq file (car files))
+         (setq files (cdr files))
+         (setq ret (cons
+                    (rmail-find-all-files (concat start "/" file))
+                    ret))) 
+       (cons (file-name-nondirectory start) ret))
+    (file-name-nondirectory start)))
+
+(defun rmail-list-to-menu (menu-name l action &optional full-name)
+  (let ((menu (make-sparse-keymap menu-name)))
+    (mapcar
+     (function (lambda (item)
+                (if (consp item)
+                    (progn
+                      (setq command
+                            (rmail-list-to-menu (car item) (cdr item) 
+                                                action 
+                                                (if full-name
+                                                    (concat full-name "/"
+                                                            (car item))
+                                                  (car item))))
+                      (setq name (car item)))
+                  (progn
+                    (setq name item)
+                    (setq command 
+                          (list 'lambda () '(interactive)
+                                (list action
+                                 (expand-file-name 
+                                  (if full-name
+                                      (concat full-name "/" item)
+                                    item)
+                                  rmail-secondary-file-directory))))))
+                (define-key menu (vector (intern name))
+                  (cons name command))))
+     l)
+    menu))
+(defun rmail-construct-io-menu ()
+  (let ((files (rmail-find-all-files rmail-secondary-file-directory)))
+    (if (listp files)
+       (progn
+         (define-key rmail-mode-map [menu-bar classify input-menu]
+           (cons "Input Rmail File" 
+                 (rmail-list-to-menu "Input Rmail File" 
+                                     (cdr files) 
+                                     'rmail-input)))
+         (define-key rmail-mode-map [menu-bar classify output-menu]
+           (cons "Output Rmail File" 
+                 (rmail-list-to-menu "Output Rmail File" 
+                                     (cdr files) 
+                                     'rmail-output-to-rmail-file)))))
+    (message "No files matching %s/%s found"
+            rmail-secondary-file-directory rmail-secondary-file-regexp)))
 
-(defun rmail-input-menu (event)
-  "Choose a new Rmail file to edit, with a menu.
-The variables `rmail-secondary-file-directory' and
-`rmail-secondary-file-regexp' control which files are offered in the menu."
-  (interactive "e")
-  (let ((file-name (rmail-secondary-file-menu event)))
-    (if file-name
-       (rmail-input file-name))))
 \f
 ;;;; *** Rmail input ***
 
@@ -2332,10 +2368,6 @@ buffer visiting that file."
   "Append this message to Unix mail file named FILE-NAME."
   t)
 
-(autoload 'rmail-output-menu "rmailout"
-  "Output current message to another Rmail file, chosen with a menu."
-  t)
-
 ;;;; *** Rmail undigestification ***
 
 (autoload 'undigestify-rmail-message "undigest"