Build proper keymap for the "Input (menu)" and "Output (menu)" submenus:
(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'.
This commit is contained in:
parent
20b5d24c26
commit
8b7ef584f6
1 changed files with 62 additions and 30 deletions
|
@ -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))))
|
||||
|
||||
;;;; *** 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"
|
||||
|
|
Loading…
Add table
Reference in a new issue