comparison lisp/vm/vm-menu.el @ 20:859a2309aef8 r19-15b93

Import from CVS: tag r19-15b93
author cvs
date Mon, 13 Aug 2007 08:50:05 +0200
parents 376386a54a3c
children 4103f0995bd7
comparison
equal deleted inserted replaced
19:ac1f612d5250 20:859a2309aef8
1 ;;; Menu related functions and commands 1 ;;; Menu related functions and commands
2 ;;; Copyright (C) 1995 Kyle E. Jones 2 ;;; Copyright (C) 1995, 1997 Kyle E. Jones
3 ;;; 3 ;;;
4 ;;; Folders menu derived from 4 ;;; Folders menu derived from
5 ;;; vm-folder-menu.el 5 ;;; vm-folder-menu.el
6 ;;; v1.10; 03-May-1994 6 ;;; v1.10; 03-May-1994
7 ;;; Copyright (C) 1994 Heiko Muenkel 7 ;;; Copyright (C) 1994 Heiko Muenkel
121 ["Edit" vm-edit-message vm-message-list] 121 ["Edit" vm-edit-message vm-message-list]
122 ["Print" vm-print-message vm-message-list] 122 ["Print" vm-print-message vm-message-list]
123 ["Pipe to Command" vm-pipe-message-to-command vm-message-list] 123 ["Pipe to Command" vm-pipe-message-to-command vm-message-list]
124 "---" 124 "---"
125 ["Burst Message as Digest" (vm-burst-digest "guess") vm-message-list] 125 ["Burst Message as Digest" (vm-burst-digest "guess") vm-message-list]
126 ["Decode MIME" vm-decode-mime-message (vm-menu-can-decode-mime-p)]
126 )))) 127 ))))
127 128
128 (defconst vm-menu-motion-menu 129 (defconst vm-menu-motion-menu
129 '("Motion" 130 '("Motion"
130 ["Page Up" vm-scroll-backward vm-message-list] 131 ["Page Up" vm-scroll-backward vm-message-list]
176 ["Forward Message" vm-forward-message vm-message-list] 177 ["Forward Message" vm-forward-message vm-message-list]
177 ["Resend Message" vm-resend-message vm-message-list] 178 ["Resend Message" vm-resend-message vm-message-list]
178 ["Retry Bounced Message" vm-resend-bounced-message vm-message-list] 179 ["Retry Bounced Message" vm-resend-bounced-message vm-message-list]
179 ["Send Digest (RFC934)" vm-send-rfc934-digest vm-message-list] 180 ["Send Digest (RFC934)" vm-send-rfc934-digest vm-message-list]
180 ["Send Digest (RFC1153)" vm-send-rfc1153-digest vm-message-list] 181 ["Send Digest (RFC1153)" vm-send-rfc1153-digest vm-message-list]
182 ["Send MIME Digest" vm-send-mime-digest vm-message-list]
181 )) 183 ))
182 184
183 (defconst vm-menu-mark-menu 185 (defconst vm-menu-mark-menu
184 '("Mark" 186 '("Mark"
185 ["Next Command Uses Marks..." vm-next-command-uses-marks 187 ["Next Command Uses Marks..." vm-next-command-uses-marks
279 ["Yank Original" vm-menu-yank-original vm-reply-list] 281 ["Yank Original" vm-menu-yank-original vm-reply-list]
280 ["Fill Yanked Message" mail-fill-yanked-message t] 282 ["Fill Yanked Message" mail-fill-yanked-message t]
281 ["Insert Signature" mail-signature t] 283 ["Insert Signature" mail-signature t]
282 ["Insert File..." insert-file t] 284 ["Insert File..." insert-file t]
283 ["Insert Buffer..." insert-buffer t] 285 ["Insert Buffer..." insert-buffer t]
286 "----"
287 "MIME:"
288 "----"
289 [" Attach File..." vm-mime-attach-file vm-send-using-mime]
290 [" Attach MIME File..." vm-mime-attach-mime-file vm-send-using-mime]
291 [" Encode MIME, But Don't Send" vm-mime-encode-composition
292 (and vm-send-using-mime
293 (null (vm-mail-mode-get-header-contents "MIME-Version:")))]
294 [" Preview MIME Before Sending" vm-mime-preview-composition
295 vm-send-using-mime]
284 )))) 296 ))))
297
298 (defconst vm-menu-mime-dispose-menu
299 (let ((title (if (vm-menu-fsfemacs-menus-p)
300 (list "Send MIME body to ..."
301 "Send MIME body to ..."
302 "---"
303 "---")
304 (list "Send MIME body to ..."))))
305 (append
306 title
307 (list ["File" (vm-mime-run-display-function-at-point
308 'vm-mime-send-body-to-file) t]
309 ["Shell Pipeline (display output)"
310 (vm-mime-run-display-function-at-point
311 'vm-mime-pipe-body-to-command) t]
312 ["Shell Pipeline (discard output)"
313 (vm-mime-run-display-function-at-point
314 'vm-mime-pipe-body-to-command-discard-output) t]))))
285 315
286 (defconst vm-menu-url-browser-menu 316 (defconst vm-menu-url-browser-menu
287 (let ((title (if (vm-menu-fsfemacs-menus-p) 317 (let ((title (if (vm-menu-fsfemacs-menus-p)
288 (list "Send URL to ..." 318 (list "Send URL to ..."
289 "Send URL to ..." 319 "Send URL to ..."
367 vm-menu-send-menu 397 vm-menu-send-menu
368 vm-menu-mark-menu 398 vm-menu-mark-menu
369 vm-menu-label-menu 399 vm-menu-label-menu
370 vm-menu-sort-menu 400 vm-menu-sort-menu
371 vm-menu-virtual-menu 401 vm-menu-virtual-menu
372 vm-menu-undo-menu 402 ;; vm-menu-undo-menu
373 vm-menu-dispose-menu 403 vm-menu-dispose-menu
374 "---" 404 "---"
375 "---" 405 "---"
376 vm-menu-help-menu)))) 406 vm-menu-help-menu))))
377 407
417 (defun vm-menu-can-undo-p () 447 (defun vm-menu-can-undo-p ()
418 (save-excursion 448 (save-excursion
419 (vm-check-for-killed-folder) 449 (vm-check-for-killed-folder)
420 (vm-select-folder-buffer) 450 (vm-select-folder-buffer)
421 vm-undo-record-list)) 451 vm-undo-record-list))
452
453 (defun vm-menu-can-decode-mime-p ()
454 (save-excursion
455 (vm-check-for-killed-folder)
456 (vm-select-folder-buffer)
457 (and vm-display-using-mime
458 vm-message-pointer
459 vm-presentation-buffer
460 (not vm-mime-decoded)
461 (not (vm-mime-plain-message-p (car vm-message-pointer))))))
422 462
423 (defun vm-menu-yank-original () 463 (defun vm-menu-yank-original ()
424 (interactive) 464 (interactive)
425 (save-excursion 465 (save-excursion
426 (let ((mlist vm-reply-list)) 466 (let ((mlist vm-reply-list))
506 (vm-easy-menu-define vm-menu-fsfemacs-author-menu (list dummy) nil 546 (vm-easy-menu-define vm-menu-fsfemacs-author-menu (list dummy) nil
507 vm-menu-author-menu) 547 vm-menu-author-menu)
508 ;; url browser menu 548 ;; url browser menu
509 (vm-easy-menu-define vm-menu-fsfemacs-url-browser-menu (list dummy) nil 549 (vm-easy-menu-define vm-menu-fsfemacs-url-browser-menu (list dummy) nil
510 vm-menu-url-browser-menu) 550 vm-menu-url-browser-menu)
551 ;; mime dispose menu
552 (vm-easy-menu-define vm-menu-fsfemacs-mime-dispose-menu
553 (list dummy) nil
554 vm-menu-mime-dispose-menu)
511 ;; block the global menubar entries in the map so that VM 555 ;; block the global menubar entries in the map so that VM
512 ;; can take over the menubar if necessary. 556 ;; can take over the menubar if necessary.
513 (define-key map [rootmenu] (make-sparse-keymap)) 557 (define-key map [rootmenu] (make-sparse-keymap))
514 (define-key map [rootmenu vm] (cons "VM" (make-sparse-keymap "VM"))) 558 (define-key map [rootmenu vm] (cons "VM" (make-sparse-keymap "VM")))
515 (define-key map [rootmenu vm file] 'undefined) 559 (define-key map [rootmenu vm file] 'undefined)
551 ;; menus appear in the opposite order that we 595 ;; menus appear in the opposite order that we
552 ;; define-key them. 596 ;; define-key them.
553 (menu-list 597 (menu-list
554 (if (consp vm-use-menus) 598 (if (consp vm-use-menus)
555 (reverse vm-use-menus) 599 (reverse vm-use-menus)
556 (list 'help nil 'dispose 'undo 'virtual 'sort 600 (list 'help nil 'dispose 'virtual 'sort
557 'label 'mark 'send 'motion 'folder)))) 601 'label 'mark 'send 'motion 'folder))))
558 (while menu-list 602 (while menu-list
559 (if (null (car menu-list)) 603 (if (null (car menu-list))
560 nil;; no flushright support in FSF Emacs 604 nil;; no flushright support in FSF Emacs
561 (aset vec 2 (intern (concat "vm-menubar-" 605 (aset vec 2 (intern (concat "vm-menubar-"
622 (cond ((overlay-get (car o-list) 'vm-url) 666 (cond ((overlay-get (car o-list) 'vm-url)
623 (setq found t) 667 (setq found t)
624 (vm-menu-popup-url-browser-menu event)) 668 (vm-menu-popup-url-browser-menu event))
625 ((setq menu (overlay-get (car o-list) 'vm-header)) 669 ((setq menu (overlay-get (car o-list) 'vm-header))
626 (setq found t) 670 (setq found t)
627 (vm-menu-popup-fsfemacs-menu event menu))) 671 (vm-menu-popup-fsfemacs-menu event menu))
672 ((overlay-get (car o-list) 'vm-mime-layout)
673 (setq found t)
674 (vm-menu-popup-mime-dispose-menu event)))
628 (setq o-list (cdr o-list))) 675 (setq o-list (cdr o-list)))
629 (and (not found) (vm-menu-popup-fsfemacs-menu event)))))) 676 (and (not found) (vm-menu-popup-fsfemacs-menu event))))))
630 677
631 ;; to quiet the byte-compiler 678 ;; to quiet the byte-compiler
632 (defvar vm-menu-fsfemacs-url-browser-menu) 679 (defvar vm-menu-fsfemacs-url-browser-menu)
680 (defvar vm-menu-fsfemacs-mime-dispose-menu)
633 681
634 (defun vm-menu-popup-url-browser-menu (event) 682 (defun vm-menu-popup-url-browser-menu (event)
635 (interactive "e") 683 (interactive "e")
636 (cond ((and (vm-menu-xemacs-menus-p) vm-use-menus) 684 (cond ((and (vm-menu-xemacs-menus-p) vm-use-menus)
637 ;; Must select window instead of just set-buffer because 685 ;; Must select window instead of just set-buffer because
644 ((and (vm-menu-fsfemacs-menus-p) vm-use-menus) 692 ((and (vm-menu-fsfemacs-menus-p) vm-use-menus)
645 (set-buffer (window-buffer (posn-window (event-start event)))) 693 (set-buffer (window-buffer (posn-window (event-start event))))
646 (goto-char (posn-point (event-start event))) 694 (goto-char (posn-point (event-start event)))
647 (vm-menu-popup-fsfemacs-menu 695 (vm-menu-popup-fsfemacs-menu
648 event vm-menu-fsfemacs-url-browser-menu)))) 696 event vm-menu-fsfemacs-url-browser-menu))))
697
698 (defun vm-menu-popup-mime-dispose-menu (event)
699 (interactive "e")
700 (cond ((and (vm-menu-xemacs-menus-p) vm-use-menus)
701 ;; Must select window instead of just set-buffer because
702 ;; popup-menu returns before the user has made a
703 ;; selection. This will cause the command loop to
704 ;; resume which might undo what set-buffer does.
705 (select-window (event-window event))
706 (and (event-point event) (goto-char (event-point event)))
707 (popup-menu vm-menu-mime-dispose-menu))
708 ((and (vm-menu-fsfemacs-menus-p) vm-use-menus)
709 (set-buffer (window-buffer (posn-window (event-start event))))
710 (goto-char (posn-point (event-start event)))
711 (vm-menu-popup-fsfemacs-menu
712 event vm-menu-fsfemacs-mime-dispose-menu))))
649 713
650 ;; to quiet the byte-compiler 714 ;; to quiet the byte-compiler
651 (defvar vm-menu-fsfemacs-mail-menu) 715 (defvar vm-menu-fsfemacs-mail-menu)
652 (defvar vm-menu-fsfemacs-dispose-popup-menu) 716 (defvar vm-menu-fsfemacs-dispose-popup-menu)
653 (defvar vm-menu-fsfemacs-vm-menu) 717 (defvar vm-menu-fsfemacs-vm-menu)
694 (set-buffer buffer) 758 (set-buffer buffer)
695 (vm-select-folder-buffer)) 759 (vm-select-folder-buffer))
696 (cond ((vm-menu-xemacs-menus-p) 760 (cond ((vm-menu-xemacs-menus-p)
697 (if (null (car (find-menu-item current-menubar '("XEmacs")))) 761 (if (null (car (find-menu-item current-menubar '("XEmacs"))))
698 (set-buffer-menubar vm-menu-vm-menubar) 762 (set-buffer-menubar vm-menu-vm-menubar)
763 ;; copy the current menubar in case it has been changed.
764 (make-local-variable 'vm-menu-vm-menubar)
765 (setq vm-menu-vm-menubar (copy-sequence current-menubar))
699 (set-buffer-menubar (copy-sequence (vm-menu-xemacs-global-menubar))) 766 (set-buffer-menubar (copy-sequence (vm-menu-xemacs-global-menubar)))
700 (condition-case nil 767 (condition-case nil
701 (add-menu-button nil vm-menu-vm-button nil) 768 (add-menu-button nil vm-menu-vm-button nil)
702 (void-function 769 (void-function
703 (add-menu-item nil "VM" 'vm-menu-toggle-menubar t)))) 770 (add-menu-item nil "VM" 'vm-menu-toggle-menubar t))))
704 (vm-menu-set-menubar-dirty-flag) 771 (vm-menu-set-menubar-dirty-flag)
705 (vm-check-for-killed-summary) 772 (vm-check-for-killed-summary)
706 (and vm-summary-buffer 773 (and vm-summary-buffer
707 (vm-menu-toggle-menubar vm-summary-buffer))) 774 (save-excursion
775 (vm-menu-toggle-menubar vm-summary-buffer)))
776 (vm-check-for-killed-presentation)
777 (and vm-presentation-buffer-handle
778 (save-excursion
779 (vm-menu-toggle-menubar vm-presentation-buffer-handle))))
708 ((vm-menu-fsfemacs-menus-p) 780 ((vm-menu-fsfemacs-menus-p)
709 (if (not (eq (lookup-key vm-mode-map [menu-bar]) 781 (if (not (eq (lookup-key vm-mode-map [menu-bar])
710 (lookup-key vm-mode-menu-map [rootmenu vm]))) 782 (lookup-key vm-mode-menu-map [rootmenu vm])))
711 (define-key vm-mode-map [menu-bar] 783 (define-key vm-mode-map [menu-bar]
712 (lookup-key vm-mode-menu-map [rootmenu vm])) 784 (lookup-key vm-mode-menu-map [rootmenu vm]))
717 (vm-menu-set-menubar-dirty-flag)))) 789 (vm-menu-set-menubar-dirty-flag))))
718 790
719 (defun vm-menu-install-menubar () 791 (defun vm-menu-install-menubar ()
720 (cond ((vm-menu-xemacs-menus-p) 792 (cond ((vm-menu-xemacs-menus-p)
721 (setq vm-menu-vm-menubar (vm-menu-make-xemacs-menubar)) 793 (setq vm-menu-vm-menubar (vm-menu-make-xemacs-menubar))
722 (set-buffer-menubar vm-menu-vm-menubar)) 794 (set-buffer-menubar vm-menu-vm-menubar)
795 (run-hooks 'vm-menu-setup-hook)
796 (setq vm-menu-vm-menubar current-menubar))
723 ((and (vm-menu-fsfemacs-menus-p) 797 ((and (vm-menu-fsfemacs-menus-p)
724 ;; menus only need to be installed once for FSF Emacs 798 ;; menus only need to be installed once for FSF Emacs
725 (not (fboundp 'vm-menu-undo-menu))) 799 (not (fboundp 'vm-menu-undo-menu)))
726 (vm-menu-initialize-vm-mode-menu-map) 800 (vm-menu-initialize-vm-mode-menu-map)
727 (define-key vm-mode-map [menu-bar] 801 (define-key vm-mode-map [menu-bar]
748 822
749 (defun vm-menu-install-mail-mode-menu () 823 (defun vm-menu-install-mail-mode-menu ()
750 (cond ((vm-menu-xemacs-menus-p) 824 (cond ((vm-menu-xemacs-menus-p)
751 ;; mail-mode doesn't have mode-popup-menu bound to 825 ;; mail-mode doesn't have mode-popup-menu bound to
752 ;; mouse-3 by default. fix that. 826 ;; mouse-3 by default. fix that.
753 (define-key vm-mail-mode-map 'button3 'popup-mode-menu) 827 (if vm-popup-menu-on-mouse-3
828 (define-key vm-mail-mode-map 'button3 'popup-mode-menu))
754 ;; put menu on menubar also. 829 ;; put menu on menubar also.
755 (if (vm-menu-xemacs-global-menubar) 830 (if (vm-menu-xemacs-global-menubar)
756 (progn 831 (progn
757 (set-buffer-menubar 832 (set-buffer-menubar
758 (copy-sequence (vm-menu-xemacs-global-menubar))) 833 (copy-sequence (vm-menu-xemacs-global-menubar)))
762 ;; I'd like to do this, but the result is a combination 837 ;; I'd like to do this, but the result is a combination
763 ;; of the Emacs and VM Mail menus glued together. 838 ;; of the Emacs and VM Mail menus glued together.
764 ;; Poorly. 839 ;; Poorly.
765 ;;(define-key vm-mail-mode-map [menu-bar mail] 840 ;;(define-key vm-mail-mode-map [menu-bar mail]
766 ;; (cons "Mail" vm-menu-fsfemacs-mail-menu)) 841 ;; (cons "Mail" vm-menu-fsfemacs-mail-menu))
767 (define-key vm-mail-mode-map [down-mouse-3] 842 (if vm-popup-menu-on-mouse-3
768 'vm-menu-popup-mode-menu)))) 843 (define-key vm-mail-mode-map [down-mouse-3]
844 'vm-menu-popup-mode-menu)))))
769 845
770 (defun vm-menu-install-menus () 846 (defun vm-menu-install-menus ()
771 (cond ((consp vm-use-menus) 847 (cond ((consp vm-use-menus)
772 (vm-menu-install-vm-mode-menu) 848 (vm-menu-install-vm-mode-menu)
773 (vm-menu-install-menubar) 849 (vm-menu-install-menubar)