;;; hui-menu.el --- InfoDock/Emacs menubar menu of Hyperbole commands. ;; Copyright (C) 1994, 1995, 2007 Free Software Foundation, Inc. ;; Developed with support from Motorola Inc. ;; Author: Bob Weiner, Brown U. ;; Maintainer: Mats Lidell ;; Keywords: hypermedia, mouse ;; This file is part of GNU Hyperbole. ;; GNU Hyperbole is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 3, or (at ;; your option) any later version. ;; GNU Hyperbole is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;;; Code: ;;; ;;; Other required Elisp libraries ;;; (require 'wrolo-menu) (require 'easymenu) ;;; ;;; Public functions ;;; ;; Add Hyperbole menu to menubar. (defun hyperbole-menubar-menu () "Add the Hyperbole menu to the global menubar." (and hyperb:xemacs-p (add-menu nil (car hui-menu-global-menu) (cdr hui-menu-global-menu)))) (defun hui-menu-remove () "Remove Hyperbole menu from the global menubars." (if hyperb:xemacs-p (delete-menu-item (list (car hui-menu-global-menu))) (easy-menu-remove-item nil nil (car hui-menu-global-menu)))) ;;; ;;; Public variables ;;; (defconst hui-menu-global-menu (delq nil (list "Hyperbole" '["Activate-Button-at-Point" hui:hbut-act t] '["Back-to-Prior-Location" (hhist:remove current-prefix-arg) t] '("Button-File" ["Edit-Per-Directory-File" (find-file hbmap:filename) t] ["Edit-Personal-File" (find-file (expand-file-name hbmap:filename hbmap:dir-user)) t] "----" ["Manual" (id-info "(hyperbole.info)Button Files") t] ) '("Customize" ["Customize Hyperbole..." hyperb:customize t] "---" ["Display URLs in ..." (customize-variable 'browse-url-browser-function) t] ) '("Documentation" ["Manual" (id-info "(hyperbole.info)Top") t] "----" ["Copyright" (id-info "(hyperbole.info)Top") t] ["Demonstration" (find-file-read-only (expand-file-name "DEMO" hyperb:dir)) t] ["Manifest" (find-file-read-only (expand-file-name "MANIFEST" hyperb:dir)) t] ["Glossary" (id-info "(hyperbole.info)Glossary") t] ["Mail-Lists" (id-info "(hyperbole.info)Mail Lists") t] ["New-Features" (progn (hact 'link-to-regexp-match "\\*[ \t]+What's New" 2 (expand-file-name "README" hyperb:dir)) (setq buffer-read-only nil) (toggle-read-only)) t] ["Smart-Key-Summary" (id-browse-file (hypb:mouse-help-file)) t] ) '("Explicit-Button" ("Activate" :filter hui-menu-explicit-buttons-filter) "----" ["Activate-at-Point" hui:hbut-act t] ["Create" hui:ebut-create t] ["Delete" hui:ebut-delete t] ["Edit" hui:ebut-modify t] ("Help" ["Buffer-Buttons" (hui:hbut-report -1) t] ["Current-Button" (hui:hbut-report) t] ["Ordered-Buttons" (hui:hbut-report 1) t] "----" ["Manual" (id-info "(hyperbole.info)Location") t] ) ["Modify" hui:ebut-modify t] ["Rename" hui:ebut-rename t] ["Search" hui:ebut-search t] "----" ["Manual" (id-info "(hyperbole.info)Explicit Buttons") t] ) '("Global-Button" ("Activate" :filter hui-menu-global-buttons-filter) "----" ["Create" hui:gbut-create t] ["Edit" hui:gbut-modify t] ["Help" gbut:help t] ["Modify" hui:gbut-modify t] "----" ["Manual" (id-info "(hyperbole.info)Global Buttons") t] ) '("Implicit-Button" ["Activate-at-Point" hui:hbut-act t] ["Delete-Type" (hui:htype-delete 'ibtypes) t] ["Help" hui:hbut-help t] ["Types" (hui:htype-help 'ibtypes 'no-sort) t] "----" ["Manual" (id-info "(hyperbole.info)Implicit Buttons") t] ) '("Mail-Lists" "----" ["Mail To Hyperbole-Users ..." (hmail:compose "hyperbole-users@gnu.org" '(hact 'hyp-config)) t] ["Manage Hyperbole-Users Subscription" (browse-url "http://lists.gnu.org/mailman/listinfo/hyperbole-users") t] "----" ["Send Bug Report ..." (hmail:compose "bug-hyperbole@gnu.org" '(hact 'hyp-config)) t] ["Manage Bug-Hyperbole Subscription" (browse-url "http://lists.gnu.org/mailman/listinfo/bug-hyperbole") t] "----" ["Manual" (id-info "(hyperbole.info)Suggestion or Bug Reporting") t] ) (if hyperb:kotl-p '("Outline" ["Create-File" kfile:find t] ["View-File" kfile:view t] "----" ["Collapse-Tree" (progn (kotl-mode:is-p) (kotl-mode:hide-tree (kcell-view:label))) t] ["Create-Link" klink:create t] ["Expand-All-Trees" kotl-mode:show-all t] ["Expand-Tree" (progn (kotl-mode:is-p) (kotl-mode:show-tree (kcell-view:label))) t] ["Show-Top-Level-Only" kotl-mode:hide-body t] "----" ["Manual" (id-info "(hyperbole.info)Outliner") t] ["Example" (find-file-read-only (expand-file-name "EXAMPLE.kotl" (concat hyperb:dir "kotl/"))) t] )) infodock-wrolo-menu '("Types" ["Action-Types-Manual" (id-info "(hyperbole.info)Action Types") t] ["Implicit-Button-Types-Manual" (id-info "(hyperbole.info)Implicit Buttons") t] "----" ["Action-Types" (hui:htype-help 'actypes) t] ["Implicit-Button-Types" (hui:htype-help 'ibtypes 'no-sort) t] ) '("Window-Configuration" ["Name-Configuration" wconfig-add-by-name t] ["Delete-Name" wconfig-delete-by-name t] ["Restore-Name" wconfig-restore-by-name t] "----" ["Pop-from-Ring" wconfig-delete-pop t] ["Save-to-Ring" wconfig-ring-save t] ["Yank-from-Ring" wconfig-yank-pop t] "----" ["Manual" (id-info "(hyperbole.info)Window Configurations") t] ) "----" '["Browse-Manual" (id-info "(hyperbole.info)Top") t] "----" '["Quit" (progn ;; Delete Hyperbole menu item from all menubars. (mapcar (function (lambda (buf) (set-buffer buf) (hui-menu-remove))) (buffer-list)) ;; ;; Remove Hyperbole button comment from future ;; outgoing mail. (if (boundp 'smail:comment) (setq smail:comment ""))) t] ))) ;; Dynamic menus for Global and Explicit buttons. (defvar hui-menu-max-list-length 24 "Limits the length of a Hyperbole dynamic menu lists.") ;; List existing global buttons for menu activation. (defun hui-menu-global-buttons-filter (rest-of-menu) (append (let ((labels (delq nil (gbut:lbl-list))) (cutoff)) (if labels (progn ;; Cutoff list if too long. (if (setq cutoff (nthcdr (1- hui-menu-max-list-length) labels)) (setcdr cutoff nil)) (append (mapcar (function (lambda (label) (vector label `(gbut:act ,label) t))) (sort labels 'string-lessp)) (if cutoff '("...")) )))) rest-of-menu)) (defun hui-menu-explicit-but-act (label) "Activate explicit button with LABEL." (hbut:act (ebut:get (hbut:label-to-key label)))) ;; List existing explicit buttons for menu activation. (defun hui-menu-explicit-buttons-filter (rest-of-menu) (append (let ((labels (delq nil (ebut:list))) (cutoff)) (if labels (progn ;; Cutoff list if too long. (if (setq cutoff (nthcdr (1- hui-menu-max-list-length) labels)) (setcdr cutoff nil)) (append (mapcar (function (lambda (label) (vector label `(hui-menu-explicit-but-act ,label) t))) (sort labels 'string-lessp)) (if cutoff '("...")) )))) rest-of-menu)) ;; Create the menu (if hyperb:xemacs-p (easy-menu-define hui-menu-global-menu nil "Hyperbole" hui-menu-global-menu) (easy-menu-add-item nil nil (easy-menu-create-menu (car hui-menu-global-menu) (cdr hui-menu-global-menu)) 'props)) ;;; ;;; Private variables ;;; (provide 'hui-menu) ;;; hui-menu.el ends here