comparison lisp/menu-bar.el @ 43246:c187056ac630

2002-02-11 Per Abrahamsen <abraham@dina.kvl.dk> * toolbar/tool-bar.el (tool-bar-mode): Removed standard value. * menu-bar.el (menu-bar-mode): Ditto. * cus-edit.el (customize-mark-to-save): Always save variables without a standard value. * menu-bar.el (menu-bar-make-toggle): Made it aware of customize. (menu-bar-options-save): Ditto. (menu-bar-showhide-menu): Ditto. (menu-bar-options-menu): Ditto. (menu-bar-scroll-bar-right, menu-bar-scroll-bar-left, menu-bar-scroll-bar-none): Removed. (menu-bar-showhide-scroll-bar-menu): Use customize aware lambda expressions instead. * cus-edit.el (customize-set-value): Return value. (customize-set-variable): Ditto. (customize-save-variable): Ditto. (customize-set-variable): Load dependencies before setting value. (custom-load-symbol): Autoload it. (customize-mark-as-set): New function.
author Per Abrahamsen <abraham@dina.kvl.dk>
date Mon, 11 Feb 2002 16:47:55 +0000
parents 40a928d7f124
children bccb026d40e4
comparison
equal deleted inserted replaced
43245:6a3915789e36 43246:c187056ac630
528 (defun ,name () 528 (defun ,name ()
529 ,(concat "Toggle whether to " (downcase (substring help 0 1)) 529 ,(concat "Toggle whether to " (downcase (substring help 0 1))
530 (substring help 1) ".") 530 (substring help 1) ".")
531 (interactive) 531 (interactive)
532 (if ,(if body `(progn . ,body) 532 (if ,(if body `(progn . ,body)
533 `(setq ,variable (not ,variable))) 533 `(progn
534 (message ,message "enabled") 534 (custom-load-symbol ',variable)
535 (let ((set (or (get ',variable 'custom-set) 'set-default))
536 (get (or (get ',variable 'custom-get) 'default-value)))
537 (funcall set ',variable (not (funcall get ',variable))))))
538 (message ,message "enabled")
535 (message ,message "disabled"))) 539 (message ,message "disabled")))
536 '(menu-item ,doc ,name 540 ;; The function `customize-mark-as-set' must only be called when
541 ;; a variable is set interactively, as the purpose is to mark it
542 ;; as a candidate for "Save Options", and we do not want to save
543 ;; options the user have already set explicitly in his init
544 ;; file. Unfortunately, he could very likely call the function
545 ;; defined above there. So we put `customize-mark-as-set' in a
546 ;; lambda expression.
547 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
548 '(menu-item ,doc (lambda ()
549 (interactive)
550 (,name)
551 (customize-mark-as-set ',variable))
537 :help ,help 552 :help ,help
538 :button (:toggle . (and (boundp ',variable) ,variable))))) 553 :button (:toggle . (and (default-boundp ',variable)
554 (default-value ',variable))))))
539 555
540 ;;; Assemble all the top-level items of the "Options" menu 556 ;;; Assemble all the top-level items of the "Options" menu
541 (define-key menu-bar-options-menu [customize] 557 (define-key menu-bar-options-menu [customize]
542 (list 'menu-item "Customize Emacs" menu-bar-custom-menu 558 (list 'menu-item "Customize Emacs" menu-bar-custom-menu
543 :help "Full customization of every Emacs feature")) 559 :help "Full customization of every Emacs feature"))
544 560
545 (defun menu-bar-options-save () 561 (defun menu-bar-options-save ()
546 "Save current values of Options menu items using Custom." 562 "Save current values of Options menu items using Custom."
547 (interactive) 563 (interactive)
548 (let ((need-save nil)) 564 (let ((need-save nil))
549 (dolist (elt '(debug-on-quit debug-on-error auto-compression-mode 565 ;; These are set with `customize-set-variable'.
566 (dolist (elt '(line-number-mode column-number-mode scroll-bar-mode
567 debug-on-quit debug-on-error menu-bar-mode tool-bar-mode
568 save-place uniquify-buffer-name-style
550 case-fold-search truncate-lines show-paren-mode 569 case-fold-search truncate-lines show-paren-mode
551 transient-mark-mode global-font-lock-mode 570 transient-mark-mode global-font-lock-mode
552 current-language-environment default-input-method 571 display-time-mode auto-compression-mode
553 default-frame-alist display-time-mode 572 ;; Saving `text-mode-hook' is somewhat questionable,
554 line-number-mode column-number-mode)) 573 ;; as we might get more than we bargain for, if
574 ;; other code may has added hooks as well.
575 ;; Nonetheless, not saving it would like be confuse
576 ;; more often.
577 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
578 text-mode-hook))
579 (and (get elt 'customized-value)
580 (customize-mark-to-save elt)
581 (setq need-save t)))
582 ;; These are set with other functions.
583 (dolist (elt '(current-language-environment default-input-method))
555 (when (customize-mark-to-save elt) 584 (when (customize-mark-to-save elt)
556 (setq need-save t))) 585 (setq need-save t)))
557 ;; We only want to save text-mode-hook after adding or removing auto fill.
558 (and (or (memq 'turn-on-auto-fill text-mode-hook) ;Added.
559 ;; If it is already saved, it is safe to save.
560 (get 'text-mode-hook 'saved-value)) ;Maybe removed.
561 (customize-mark-to-save 'text-mode-hook)
562 (setq need-save t))
563 ;; Avoid loading extra libraries.
564 (and (featurep 'saveplace)
565 (customize-mark-to-save 'save-place)
566 (setq need-save t))
567 (and (featurep 'uniquify)
568 (customize-mark-to-save 'uniquify-buffer-name-style)
569 (setq need-save t))
570 ;; Save if we changed anything. 586 ;; Save if we changed anything.
571 (when need-save 587 (when need-save
572 (custom-save-all)))) 588 (custom-save-all))))
573 589
574 (define-key menu-bar-options-menu [save] 590 (define-key menu-bar-options-menu [save]
601 (if (display-time-mode) 617 (if (display-time-mode)
602 (message "Display-time mode enabled.") 618 (message "Display-time mode enabled.")
603 (message "Display-time mode disabled."))) 619 (message "Display-time mode disabled.")))
604 620
605 (define-key menu-bar-showhide-menu [showhide-date-time] 621 (define-key menu-bar-showhide-menu [showhide-date-time]
606 '(menu-item "Date and time" showhide-date-time 622 '(menu-item "Date and time" (lambda ()
623 (interactive)
624 (showhide-date-time)
625 (customize-mark-as-set 'display-time-mode))
607 :help "Display date and time in the mode-line" 626 :help "Display date and time in the mode-line"
608 :button (:toggle . display-time-mode))) 627 :button (:toggle . display-time-mode)))
609 628
610 (define-key menu-bar-showhide-menu [datetime-separator] 629 (define-key menu-bar-showhide-menu [datetime-separator]
611 '("--")) 630 '("--"))
612 631
613 (defvar menu-bar-showhide-scroll-bar-menu (make-sparse-keymap "Scroll-bar")) 632 (defvar menu-bar-showhide-scroll-bar-menu (make-sparse-keymap "Scroll-bar"))
614 633
615 (defun menu-bar-scroll-bar-right ()
616 "Turn on the scroll-bar on the right side."
617 (interactive)
618 (set-scroll-bar-mode 'right))
619
620 (defun menu-bar-scroll-bar-left ()
621 "Turn on the scroll-bar on the left side."
622 (interactive)
623 (set-scroll-bar-mode 'left))
624
625 (defun menu-bar-scroll-bar-none ()
626 "Turn off the scroll-bar."
627 (interactive)
628 (set-scroll-bar-mode nil))
629
630 (define-key menu-bar-showhide-scroll-bar-menu [right] 634 (define-key menu-bar-showhide-scroll-bar-menu [right]
631 '(menu-item "On the Right" menu-bar-scroll-bar-right 635 '(menu-item "On the Right"
636 (lambda ()
637 (interactive)
638 (customize-set-variable 'scroll-bar-mode 'right))
632 :help "Scroll-bar on the right side" 639 :help "Scroll-bar on the right side"
633 :visible window-system 640 :visible window-system
634 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars (frame-parameters))) 'right)))) 641 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
642 (frame-parameters))) 'right))))
635 643
636 (define-key menu-bar-showhide-scroll-bar-menu [left] 644 (define-key menu-bar-showhide-scroll-bar-menu [left]
637 '(menu-item "On the Left" menu-bar-scroll-bar-left 645 '(menu-item "On the Left"
646 (lambda ()
647 (interactive)
648 (customize-set-variable 'scroll-bar-mode 'left))
638 :help "Scroll-bar on the left side" 649 :help "Scroll-bar on the left side"
639 :visible window-system 650 :visible window-system
640 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars (frame-parameters))) 'left)))) 651 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
652 (frame-parameters))) 'left))))
641 653
642 (define-key menu-bar-showhide-scroll-bar-menu [none] 654 (define-key menu-bar-showhide-scroll-bar-menu [none]
643 '(menu-item "None" menu-bar-scroll-bar-none 655 '(menu-item "None"
656 (lambda ()
657 (interactive)
658 (customize-set-variable 'scroll-bar-mode nil))
644 :help "Turn off scroll-bar" 659 :help "Turn off scroll-bar"
645 :visible window-system 660 :visible window-system
646 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars (frame-parameters))) nil)))) 661 :button (:radio . (eq (cdr (assq 'vertical-scroll-bars
662 (frame-parameters))) nil))))
647 663
648 (define-key menu-bar-showhide-menu [showhide-scroll-bar] 664 (define-key menu-bar-showhide-menu [showhide-scroll-bar]
649 (list 'menu-item "Scroll-Bar" menu-bar-showhide-scroll-bar-menu 665 (list 'menu-item "Scroll-Bar" menu-bar-showhide-scroll-bar-menu
650 :visible 'window-system 666 :visible 'window-system
651 :help "Select scroll-bar mode")) 667 :help "Select scroll-bar mode"))
657 (if menu-bar-mode 673 (if menu-bar-mode
658 (message "Menu-bar mode enabled.") 674 (message "Menu-bar mode enabled.")
659 (message "Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear."))) 675 (message "Menu-bar mode disabled. Use M-x menu-bar-mode to make the menu bar appear.")))
660 676
661 (define-key menu-bar-showhide-menu [showhide-menu-bar] 677 (define-key menu-bar-showhide-menu [showhide-menu-bar]
662 '(menu-item "Menu-bar" showhide-menu-bar 678 '(menu-item "Menu-bar"
679 (lambda ()
680 (interactive)
681 (showhide-menu-bar)
682 (customize-mark-as-set 'menu-bar-mode))
663 :help "Toggle menu-bar on/off" 683 :help "Toggle menu-bar on/off"
664 :button (:toggle . menu-bar-mode))) 684 :button (:toggle . menu-bar-mode)))
665 685
666 (defun showhide-tool-bar () 686 (defun showhide-tool-bar ()
667 "Toggle whether to turn tool-bar on/off." 687 "Toggle whether to turn tool-bar on/off."
669 (if (tool-bar-mode) 689 (if (tool-bar-mode)
670 (message "Tool-bar mode enabled.") 690 (message "Tool-bar mode enabled.")
671 (message "Tool-bar mode disabled."))) 691 (message "Tool-bar mode disabled.")))
672 692
673 (define-key menu-bar-showhide-menu [showhide-tool-bar] 693 (define-key menu-bar-showhide-menu [showhide-tool-bar]
674 '(menu-item "Tool-bar" showhide-tool-bar 694 '(menu-item "Tool-bar"
695 (lambda ()
696 (interactive)
697 (showhide-tool-bar)
698 (customize-mark-as-set 'tool-bar-mode))
675 :help "Turn tool-bar on/off" 699 :help "Turn tool-bar on/off"
676 :visible window-system 700 :visible window-system
677 :button (:toggle . tool-bar-mode))) 701 :button (:toggle . tool-bar-mode)))
678 702
679 (define-key menu-bar-options-menu [showhide] 703 (define-key menu-bar-options-menu [showhide]
710 "Enter Lisp debugger when an error is signaled")) 734 "Enter Lisp debugger when an error is signaled"))
711 (define-key menu-bar-options-menu [debugger-separator] 735 (define-key menu-bar-options-menu [debugger-separator]
712 '("--")) 736 '("--"))
713 (define-key menu-bar-options-menu [toggle-auto-compression] 737 (define-key menu-bar-options-menu [toggle-auto-compression]
714 '(menu-item "Automatic File De/compression" 738 '(menu-item "Automatic File De/compression"
715 auto-compression-mode 739 (lambda ()
716 :help "Transparently decompress compressed files" 740 (interactive)
717 :button (:toggle . (rassq 'jka-compr-handler 741 (auto-compression-mode)
718 file-name-handler-alist)))) 742 (customize-mark-as-set 'auto-compression-mode))
743 :help "Transparently decompress compressed files"
744 :button (:toggle . (rassq 'jka-compr-handler
745 file-name-handler-alist))))
719 (define-key menu-bar-options-menu [save-place] 746 (define-key menu-bar-options-menu [save-place]
720 (menu-bar-make-toggle toggle-save-place-globally save-place 747 (menu-bar-make-toggle toggle-save-place-globally save-place
721 "Save Place in Files between Sessions" 748 "Save Place in Files between Sessions"
722 "Saving place in files %s" 749 "Saving place in files %s"
723 "Save Emacs state for next session" 750 "Save Emacs state for next session"))
724 (require 'saveplace) 751
725 (setq-default save-place
726 (not (default-value save-place)))))
727 (define-key menu-bar-options-menu [uniquify] 752 (define-key menu-bar-options-menu [uniquify]
728 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style 753 (menu-bar-make-toggle toggle-uniquify-buffer-names uniquify-buffer-name-style
729 "Use Directory Names in Buffer Names" 754 "Use Directory Names in Buffer Names"
730 "Directory name in buffer names (uniquify) %s" 755 "Directory name in buffer names (uniquify) %s"
731 "Uniquify buffer names by adding parent directory names" 756 "Uniquify buffer names by adding parent directory names"
732 (require 'uniquify) 757 (require 'uniquify)
733 (setq uniquify-buffer-name-style 758 (setq uniquify-buffer-name-style
734 (if (not uniquify-buffer-name-style) 759 (if (not uniquify-buffer-name-style)
735 'forward)))) 760 'forward))))
761
736 (define-key menu-bar-options-menu [edit-options-separator] 762 (define-key menu-bar-options-menu [edit-options-separator]
737 '("--")) 763 '("--"))
738 (define-key menu-bar-options-menu [case-fold-search] 764 (define-key menu-bar-options-menu [case-fold-search]
739 (menu-bar-make-toggle toggle-case-fold-search case-fold-search 765 (menu-bar-make-toggle toggle-case-fold-search case-fold-search
740 "Case-Insensitive Search" 766 "Case-Insensitive Search"
741 "Case-Insensitive Search %s" 767 "Case-Insensitive Search %s"
742 "Ignore letter-case in search")) 768 "Ignore letter-case in search"))
743 (define-key menu-bar-options-menu [auto-fill-mode] 769 (define-key menu-bar-options-menu [auto-fill-mode]
744 '(menu-item "Word Wrap in Text Modes (Auto Fill)" 770 '(menu-item "Word Wrap in Text Modes (Auto Fill)"
745 toggle-text-mode-auto-fill 771 (lambda ()
772 (interactive)
773 (toggle-text-mode-auto-fill)
774 ;; This is somewhat questionable, as `text-mode-hook'
775 ;; might have changed outside customize.
776 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
777 (customize-mark-as-set 'text-mode-hook))
746 :help "Automatically fill text between left and right margins" 778 :help "Automatically fill text between left and right margins"
747 :button (:toggle . (member 'turn-on-auto-fill text-mode-hook)))) 779 :button (:toggle . (member 'turn-on-auto-fill text-mode-hook))))
748 (define-key menu-bar-options-menu [truncate-lines] 780 (define-key menu-bar-options-menu [truncate-lines]
749 (menu-bar-make-toggle 781 (menu-bar-make-toggle
750 toggle-truncate-lines truncate-lines 782 toggle-truncate-lines truncate-lines
751 "Truncate Long Lines in this Buffer" "Long Line Truncation %s" 783 "Truncate Long Lines in this Buffer" "Long Line Truncation %s"
752 "Truncate long lines on the screen" 784 "Truncate long lines on the screen"
753 (prog1 (setq truncate-lines (not truncate-lines)) 785 ;; FIXME: We should define a :set method for `truncate-lines' to do
786 ;; the `buffer-modified-p' stuff.
787 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
788 (prog1 (setq-default truncate-lines (not truncate-lines))
754 (set-buffer-modified-p (buffer-modified-p))))) 789 (set-buffer-modified-p (buffer-modified-p)))))
755 (define-key menu-bar-options-menu [highlight-separator] 790 (define-key menu-bar-options-menu [highlight-separator]
756 '("--")) 791 '("--"))
757 (define-key menu-bar-options-menu [highlight-paren-mode] 792 (define-key menu-bar-options-menu [highlight-paren-mode]
758 (menu-bar-make-toggle toggle-highlight-paren-mode show-paren-mode 793 (menu-bar-make-toggle toggle-highlight-paren-mode show-paren-mode
759 "Paren Match Highlighting (Show Paren mode)" 794 "Paren Match Highlighting (Show Paren mode)"
760 "Show Paren mode %s" 795 "Show Paren mode %s"
761 "Highlight matching/mismatched parentheses at cursor" 796 "Highlight matching/mismatched parentheses at cursor"))
762 (show-paren-mode)))
763 (define-key menu-bar-options-menu [transient-mark-mode] 797 (define-key menu-bar-options-menu [transient-mark-mode]
764 (menu-bar-make-toggle toggle-transient-mark-mode transient-mark-mode 798 (menu-bar-make-toggle toggle-transient-mark-mode transient-mark-mode
765 "Active Region Highlighting (Transient Mark mode)" 799 "Active Region Highlighting (Transient Mark mode)"
766 "Transient Mark mode %s" 800 "Transient Mark mode %s"
767 "Make text in active region stand out in color")) 801 "Make text in active region stand out in color"))
768 (define-key menu-bar-options-menu [toggle-global-lazy-font-lock-mode] 802 (define-key menu-bar-options-menu [toggle-global-lazy-font-lock-mode]
769 (menu-bar-make-toggle toggle-global-lazy-font-lock-mode global-font-lock-mode 803 (menu-bar-make-toggle toggle-global-lazy-font-lock-mode global-font-lock-mode
770 "Syntax Highlighting (Global Font Lock mode)" 804 "Syntax Highlighting (Global Font Lock mode)"
771 "Global Font Lock mode %s" 805 "Global Font Lock mode %s"
772 "Colorize text based on language syntax" 806 "Colorize text based on language syntax"))
773 (global-font-lock-mode)))
774 807
775 808
776 ;; The "Tools" menu items 809 ;; The "Tools" menu items
777 810
778 (defun send-mail-item-name () 811 (defun send-mail-item-name ()
1401 (menu-bar-mode (or value 0))) 1434 (menu-bar-mode (or value 0)))
1402 :initialize 'custom-initialize-default 1435 :initialize 'custom-initialize-default
1403 :type 'boolean 1436 :type 'boolean
1404 :group 'frames) 1437 :group 'frames)
1405 1438
1439 ;;; `menu-bar-mode' doesn't really have a standard value, as it depend
1440 ;;; on where and how Emacs was started. By removing the standard
1441 ;;; value, we ensure that customize will always save it.
1442 ;; -- Per Abrahamsen <abraham@dina.kvl.dk> 2002-02-11.
1443 (put 'menu-bar-mode 'standard-value nil)
1444
1406 (defun menu-bar-mode (&optional flag) 1445 (defun menu-bar-mode (&optional flag)
1407 "Toggle display of a menu bar on each frame. 1446 "Toggle display of a menu bar on each frame.
1408 This command applies to all frames that exist and frames to be 1447 This command applies to all frames that exist and frames to be
1409 created in the future. 1448 created in the future.
1410 With a numeric argument, if the argument is positive, 1449 With a numeric argument, if the argument is positive,