Mercurial > emacs
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, |