Mercurial > hg > xemacs-beta
diff lisp/hyperbole/DEMO @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 4103f0995bd7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/hyperbole/DEMO Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,568 @@ +* Overview + +This file demonstrates simple usage of the basic Hyperbole button-action +types and shows how Hyperbole can support a style of self-documenting, +interactive files. See the glossary in the Hyperbole Manual, +"(hyperbole.info)Glossary", if terms used here are unfamiliar to you. + +* Smart Keys + +Hyperbole provides two context-sensitive keys, the Action Key and the Assist +Key, jointly referred to as Smart Keys. The Action Key is the shift-middle +mouse button on a 3-button mouse or shift-left button on a two button mouse +or {M-RET} on your keyboard. The Assist Key is the shift-right mouse button +or {C-u M-RET}. (InfoDock users may also use the middle mouse button as the +Action Key.) + +See also the later section, <(Smart Mouse Keys)>. + + +** Button Activation and Help + +This button prints the <(factorial)> of 5 in the minibuffer when activated +with the Action Key. (Once you have Hyperbole installed, just press the +Action Key on the word, <(factorial)>.) If you instead press the Assist Key, +you get help for the preceding button. The help provides a summary report of +the button. You will see that it utilizes the 'eval-elisp' action type. You +can also see who created it. Try it. + +Note that the create-time and mod-time are displayed using your own +timezone but they are stored as universal times. So if you work with +people at other sites, you can mix their buttons with your own within +the same document and see one unified view of the modification times on +each button. These times will also be useful for sorting buttons by +time when such features are provided in future Hyperbole releases. + +** Smart Scrolling + +By default, the variable smart-scroll-proportional is set to t (TRUE). This +makes a press of the Action Key at the end of a line scroll forward, so that +the current line is placed at the top of the window; the Assist Key does the +reverse when pressed at the end of line; it places the current line at the +bottom of the window. This is called proportional scrolling because the +amount of scrolling is relative to the point's position in the window. Try +it and then come back here. + +Alternatively, if this variable is set to nil (FALSE), the Smart Keys scroll +forward or backward a windowful when at the end of a line, regardless of +which line point is on, just as {C-v} and {M-v} do. + +Let's try windowful scrolling a bit. Click this button and then practice +scrolling: <(toggle-scroll-proportional)>. If you prefer the default +proportional scrolling, click on the previous button again to restore it. + +If you always want windowful scrolling, you'll have to add a setting of +smart-scroll-proportional to your "~/.emacs" file after the point at which +you load Hyperbole or else set it as part of hyperb:init-hook, which executes +whenever Hyperbole is loaded, e.g.: + + (setq hyperb:init-hook + (list (function (lambda () (setq smart-scroll-proportional nil))))) + + +** Hyperbole Menus + +To display the top-level Hyperbole menu, click the Action Key anywhere +within this paragraph or alternatively, use {C-h h}. Clicking within the +paragraph, applies the default operation, given by action-key-default-function, +since the Action Key finds no more specialized context. The default +operation happens to bring up the Hyperbole menu. + +{q} or {C-g} will quit from the menu without invoking any commands if you +just want to take a look. A menu item is selected by pressing the Action Key +over it or by typing its first letter in upper or lower case. + +A click of the Assist Key on a menu item gives help on it. + + +** Help Buffers + +Context-sensitive Action Key help typically is bound to {C-h A}. {C-u C-h A} +displays the same kind of help for the Assist Key. Try it. + +Any buffer whose name ends in `Help*' is presumed to be a temporary buffer +that one wants to inspect and then remove from view. If you click either the +Action or Assist Key at the end of a help buffer, the buffer is buried from +view and your window configuration is restored to its state prior to +displaying the help. If you have removed the Smart Key help buffer, bring it +back. Then press one of the Smart Keys at its end to remove it. Note how +your window configuration is restored. + +Remember that this works for any help buffer, whether or not Hyperbole +generated it. + +* Explicit Button Samples + +Hyperbole is pretty forgiving about the format of explicit buttons. For +example, all of the following represent the same button, as long as one +clicks on the *first* line of the button, within the button delimiters: + + <(factorial button)> + + <( factorial button)> + + Pam> <(factorial + Pam> button)> + + ;; <(factorial + ;; button)> + + /* <( factorial */ + /* button )> */ + + +If your <(Info-directory-list)> or <(Info-directory)> variables include the +directory that contains the online GNU Emacs manual, activation of the +next button will tell you about <(keyboard macros)>. Can't remember a +Hyperbole term? Check out the Hyperbole Manual <(glossary)>. + +Here is a <(keyboard macro)> button. It displays documentation for the first +Emacs Lisp function that follows it, e.g. (hbut:report). You can see that a +button label can consist of a number of words, up to a set <(maximum +length)>. + +A <(shell command)> button can do many things, such as display the length of +this file. While such commands are executing, you can perform other +operations. If you create a button that runs a shell command which +displays its own window system window, i.e. a window outside of Emacs, use +'exec-window-cmd' rather than 'exec-shell-cmd' as its action type. + +You can link to files such as your <(.login)> file. Or directories, +like the <(tmp directory)>. When creating file links, if the file you +are linking to is loaded in a buffer, you are prompted as to whether you +want the link to jump to the present point in that buffer. If so, the +link will always jump there, so position point within the referent file +to take advantage of this feature. Note how a separate window is used +when you activate file link buttons. Most basic Hyperbole action types +display their results in this manner. + +You can make a button an alias for another by using the 'link-to-ebut' +action type. This <(factorial alias)> button does whatever the earlier +<(factorial)> button does. + +The 'link-to-mail' action type allows you to reference mail messages +that you have stored away. We can't demonstrate it here since we don't +have the mail messages that you do. + +Hyperbole buttons may also be embedded within mail messages. Even +buttons copied into mail replies can work: + + Emile said: + > + > Hyperbole is better than home baked bread but not as filling. + > The following sample button displays a message, <(as long as + > you click within its first line)>. + + +* Implicit Button Samples + +** Key Sequence Buttons + +Any Emacs key sequence delimited with braces may be executed by +activating it as a button, for example {C-u C-p} should leave point four +lines above the button line. A help request upon the key sequence +displays the documentation for its command binding, i.e. what it does. +If it does not represent a bound key sequence, it will not be +treated as a key sequence button. + +** Implicit Path Links + +Any doubly quoted pathname acts as an implicit button that either displays the +referenced path within a buffer, passes it to an external viewer program, or +runs a function that operates upon the path. These are 'pathname' implicit +buttons. For example, activate "README". + +Most pathnames simply link to the files that they name and so are simply +displayed for editing. The variable 'hpath:suffixes' is a list of filename +suffix strings that are added to or removed from pathnames when searching for +a match. "So if "README.gz" existed, the pathname button "README" would +display it. If you use the Emacs "crypt.el" package, then compressed files +will be uncompressed before they are displayed. Activate "README.gz" and +you'll see that the README file is displayed as desired. + +The variable 'hpath:display-alist' contains pairs of pathname expressions and +edit functions. When a pathname matches an expression, the associated edit +function is invoked upon the pathname. + +The variable 'hpath:find-alist' determines the file suffixes which should be +viewed with external programs. It also specifies the associated viewer +program for each different window system under which Hyperbole may be run. +See its documentation for more details. Under the X window system, for +example, if you have the 'xv' program, all of the following file formats may +be displayed as images: gif, tiff, xbm, pm, pbm, and jpeg. + +Several prefix characters may be attached to pathnames to indicate that +a different action should be taken when the button is activated. +An exclamation point prefix indicates that the full pathname should be run +as a non-windowed shell program. For example, try "!/bin/date". +An ampersand prefix means run the full pathname as a windowed program, e.g. +"&/usr/bin/X11/xeyes". Finally, a hyphen indicates that the filename should +be evaluated as an Emacs Lisp program, e.g. "-hibtypes.elc", rather than +displayed. + +If you use the ange-ftp or efs add-on to GNU Emacs, such remote pathnames +will work as well. (The latest version of ange-ftp may always be obtained +via anonymous ftp to: + "/anonymous@alpha.gnu.ai.mit.edu:ange-ftp/ange-ftp.tar.gz"). + +Once you have *loaded* the ange-ftp or the efs package (or you use a +version of Emacs 19 which autoloads ange-ftp), if you are on the +Internet, you can click on any of the following to browse the contents +of the Hyperbole distribution at the XEmacs Archive (limit the amount +you do this so as not to deny others access to the archive): + + "/anonymous@ftp.xemacs.org:pub/infodock/" + /anonymous@128.174.252.16:/pub/infodock/ + /ftp.xemacs.org:pub/infodock/ + +You can see that for ange-ftp/efs pathnames, Hyperbole recognizes them with +or without the double quote delimiters. These same pathnames can be used +within explicit buttons which link to files or directories. The HTML +(HyperText Markup Language) ftp pathname format used by World-Wide-Web +browsers is also recognized: + + "ftp://ftp.xemacs.org/pub/infodock/ + + +GNU Info (filename)node references such as "(hyperbole.info)Glossary" or +"(emacs)Glossary", work similarly, thanks to the 'Info-node' button type. +Try one of the Glossary buttons above. + +If you want to quickly learn how to create explicit buttons, see +"(hyperbole.info)Drags" and "(hyperbole.info)Menus". + +So now when browsing the many documents that refer to filenames or Info +nodes in this way, you can just click on the name to see the contents. +(If a doubly quoted string references a local pathname that does not +exist within the file system, it will not be considered a pathname +button by Hyperbole.) Pathname implicit buttons provide one example of +how Hyperbole can improve your working environment without you having to +do any work at all. + + +Hyperbole provides a history command which returns you to previous button +locations in the reverse order of the way you traverse them. You access it +by selecting the Hist command from the top-level Hyperbole menu, {C-h h h}. +Remember this because you will want to use that command to return to this +DEMO later. + +Now suppose you want to browse through a number of files within the +Hyperbole distribution. You could use the Emacs dired subsystem, +"(emacs)Dired", but a faster way is to note that files named MANIFEST +and DIR are used to summarize the files in a directory, so we can use +each of their entries as an implicit button (of 'dir-summary' type) to +take us to the file. + +Let's look at "MANIFEST". Now click anywhere within a line in the MANIFEST +file and you see that it is displayed as expected. (Remember to use the +Hyperbole history command to return here.) You can get help on these buttons +just like any others. + +Table of contents entries in "README" files act similarly. Click on "README" +to view that file and then click on a table of contents entry to jump to the +associated section in the "README" file. + +** World-Wide-Web URL Buttons + +If you use the w3 World-Wide-Web browser add-on to GNU Emacs, you can browse +URLs (universal resource locators) from within any buffer just as you would +any other implicit button, once you do some initial setup. + +First you must ensure that you load the Hyperbole library that supports URL +viewing. Either your "hsite.el" file should require hsys-w3 as part of +'hibtypes:begin-load-hook' or you should move point after the following line +and hit {C-x C-e} to evaluate it. + + (progn (require 'w3) (require 'hsys-w3)) + +Now try using the Action Key on: + + "http://www.ncsa.uiuc.edu" + +** Grep, Occurrence, Debugger and Compiler Error Buttons, and Cscope Analyzer + Lines + +The output of 'grep -n', the UNIX line pattern matcher, can be +activated as buttons that jump to each matched line within its source +file; use {M-x grep RET}. + +Compiler error messages also serve as implicit buttons that jump to +associated source lines; use {M-x compile RET}. GDB, DBX or XDB stack frames +along with GDB breakpoint listing lines also link to source lines. + +{M-x occur RET} (find matches in a single buffer) and {M-x moccur RET} +(find matches across multiple buffers and files) also produce implicit +button output that displays associated source lines. + +If you have the Cscope C/C++ code analyzer from the AT&T Toolchest and have +loaded the cscope.el library add-on for GNU Emacs, then the output lines from +a cscope query serve as implicit buttons which jump to associated source +lines. Cscope goes beyond the basic Emacs tags facility to allow you to see +the callers of a function and the functions called by a specific routine. + +** Annotated Bibliography Buttons + +Here's a use of an annotated bibliography reference implicit button +which allows you to see a bibliography entry such as [Stallman 87] when +you activate the button between brackets. + +** Completion Buttons + +Often when Emacs or Hyperbole prompts for an argument in the +minibuffer, a list of possible argument completions is available by +pressing {?}. A single Action Key press on any of these completions +inserts it into the minibuffer for your inspection. A second press on +the same completion causes it to be used as the argument value and any +succeeding argument prompt is then displayed. Test this technique +with a {C-x C-f} (find-file) and then a {?}. + +** Hyperbole Source Buttons + +If you ask for help on the [Stallman 87] button, the first line of the +help buffer will look like this: + +@loc> "DEMO" + +except it will contain the full pathname of the file. If the button +were embedded within a buffer without an attached file, the first line +of the help buffer might look like: + +@loc> #<buffer *scratch*> + +If you click on the buffer name, the buffer will be displayed just as a +file buffer would. This type of implicit button is called a +'hyp-source' button. + +You can also activate any explicit buttons shown in a help buffer. + +** UNIX Man Apropos Buttons + +Below are some lines output by the UNIX 'apropos' command (with a little +touchup for display purposes). A button activation anywhere within such +a line recognizes the line as an apropos entry and tries to display the +man page for the entry. Try it. (If you happen to use the 'superman' +package which fetches man pages in the background, you'll have to wait +for the next version of superman which removes incompatibilities with +the standard man page fetch command before you can use these +'man-apropos' implicit buttons.) + +grep, egrep, fgrep (1V) - search a file for a string or regular expression +rm, rmdir (1) - remove (unlink) files or directories +touch (1V) - update the access and modification times of a file +cat (1V) - concatenate and display + +** Internet Request For Comments (RFC) Document Browsing + +If you are on the Internet and you have the ange-ftp or efs remote file +handling package for GNU Emacs, you can retrieve and browse RFC documents +used in Internet standard-making. Simply use the Action Key on an RFC +document identifier, like RFC-822. Rfc822 and rfc 822 work as well. The +'rfc' implicit button type provides this service. The 'hpath:rfc' variable +specifies the location from which to retrieve RFCs. + +Once you have retrieved an RFC, an Action Key press most anywhere within a +line typically will produce a table of contents summary of the RFC (via the +'rfc-toc' implicit button type). An Action Key press on any of the table of +contents lines then displays that section, for easy random access browsing. + +** Site-specific Online Library Document IDs + +Hyperbole offers a powerful, yet easy to use facility for building online +libraries through the use of the 'doc-id' implicit button type. A document id +is used just like a reference citation in traditional publications but +it actually links to the document that it references and the card catalog +(index) entry for the document. One can easily pass around doc ids to point +people to appropriate documents. For example, a mail message in response to +a question might say, "See [Emacs-001] for examples of what Emacs can do." + +Since the format and handling of document identifiers and their index entries +is site-specific, document id handling is not completely configured in a +default Hyperbole configuration. If you wish to setup this facility for +site or personal use, see the DESCRIPTION section in "hib-doc-id.el" for +installation and use information. + + +* Smart Mouse Keys + +If you use Emacs with mouse support under the X window system, NeXTstep, +OpenWindows, SunView, or Apollo's DM window system, Hyperbole automatically +configures your mouse keys for use as Smart Keys and provides additional +display-oriented operations as demonstrated here. + +See the Hyperbole menu item, Doc/SmartKy, for a summary of all Smart Key +operations. For extensive details on Smart Key operation, see the Hyperbole +manual section, "(hyperbole.info)Smart Key Reference". + +When Hyperbole is installed, a key may be bound which allows you to +switch between the Smart Key mouse bindings and your prior ones. `C-h w +hmouse-toggle-bindings RTN' should show you any key which performs this +command. If no key binding has been established or if you prefer one of +your own, simply select a key and bind it within your "~/.emacs" file. +For example, (global-set-key "\C-ct" 'hmouse-toggle-bindings). + + +** Context-sensitive Help + +Since the Smart Keys perform different operations in different contexts, it +is important to have context-sensitive help available. The earlier section +on Help Buffers explained how to display such help from the keyboard. The +same help can be displayed using the mouse by depressing the Smart Key for +which you want help, performing any action necessary to register a context, +such as a drag motion, and then pressing the other Smart Key. + +Here is an example. Depress the Action Key somewhere within this paragraph +and while holding it down, depress the Assist Key. Then release the keys in +any order and the help display will pop up. It explains that there was no +particular matching Smart Key context, so a default operation is performed +(the value of the variable 'action-key-default-function' determines the +operation performed). + +** Scrolling to the Beginning and End of Buffers + +A left to right horizontal drag of the Action Key of 5 or more characters +scrolls the current buffer to its end (what {M->} does by default). A right +to left drag of the Action Key does the opposite; it scrolls to the buffer's +beginning (what {M-<} does by default). Try out these operations and then +use the Smart Key end of line scrolling capability to return here. + +** Creating and Deleting Windows + +Horizontal and vertical drags of the Assist Key within a single window can be +used to create and delete Emacs windows. + +A horizontal drag of five or more characters from left to right creates a new +window by splitting the current window into two windows, one on top of the +other. A horizontal drag from right to left deletes the current window. A +vertical drag in either direction splits the current window into two +side-by-side windows. + +Let's try these. Remember to use your Assist Key. You need only move your +mouse pointer a few characters to register a drag. First, split this window +with a left to right drag, then delete either one of the windows with a right +to left drag. + +Now try a side-by-side window split. Drag vertically in the up or down +direction three or more lines to split the window and then use a right to +left drag to delete either one of the side-by-side windows. + +** Resizing Windows + +You can easily resize Emacs windows by dragging their window separators +(modelines or vertical side lines) within a frame. Simply depress either +Smart Key on a modeline or near a window side, hold it down while you drag to +a new location and then release. The window separator will then jump to the +location of release. Basically, just drag the window separator to where you +want it. If you want a single window to fill an entire frame, drag its +modeline, and if necessary its side, to the edge of the frame. + +Did you follow all that? Let's try it to be sure. First, you need at least +two windows, so create a new one with the drag techniques you just learned. +Now drag with either Smart Key from the shared window edge to a new location. +See how both windows change size? + +Try to drag the bottom modeline. You see that you can't. + +** Swapping Buffers + +Swapping buffer locations is quick and easy with Hyperbole. Simply drag +from one window to another with the Assist Key. + +Split the current window into two, one above the other. Drag the upper +modeline so that one window is clearly bigger than the other. Now try +dragging from inside one window to another with the Assist Key. + +** Modeline Clicks + +Window modelines are treated specially be Hyperbole. They are broken up into +three regions, each with their own Smart Key operations. The regions are: +the left edge, the right edge, and the middle portion (the non-edge part of +the modeline). The edge regions are the left or rightmost three characters +of the modeline, by default. + +*** Switching to Another Buffer + +An Action Key click in the left edge of a modeline buries the current buffer, +i.e. puts it on the bottom of the buffer list and removes it from view, if it +is not the only available buffer. An Assist Key click in the left edge of a +modeline unburies the bottom buffer. Repeated clicks of either key allow you +to cycle through buffers to get to the one you want. Try this out. + +*** Displaying Documentation + +An Action Key click in the right edge of a modeline displays the Info manual +browsing system, see "(info)". Once in Info, you can click with your Action +Key to follow menu items, cross references, or to jump to Info nodes +referenced within the top header line of a node. Try browsing a bit and +while in Info display context-sensitive help for both the Action and Assist +Keys to see all that they can do. + +If you click again with the Action Key on the right edge of the window +displaying Info, it will hide the Info buffer. Thus, it works as a toggle to +display or to hide the Info buffer. Try it. + +A click of the Assist Key at the right edge of a modeline toggles between +display and removal of a Smart Key operation summary. To remove the summary, +you must click on the modeline of the window displaying the summary. + + +*** Buffer Menu Display + +An Action Key click in the center portion of a modeline displays a buffer +menu, a summary of available buffers. An Action Key click on any buffer menu +line then displays that buffer. + +This behavior is subject to change in the future if a more useful Action Key +operation is found for the middle of modelines. + + +** Saving and Restoring Window Configurations + +A window configuration consists of the set of windows within a single Emacs +frame. This includes their locations, buffers, and scrolled positions of +their buffers. + +Hyperbole allows you to save and restore window configurations with simple +diagonal mouse drags within a single window. A diagonal drag in any +direction of the Action Key saves the current window configuration to a ring +of window configurations, just like the Emacs text kill ring. (See +"(Emacs)Kill Ring".) Each diagonal drag in any direction of the Assist Key +restores a prior saved window configuration from the ring. Window +configurations are restored in reverse order of the way they were saved. +Since a ring is circular, after the oldest element is restored, the newest +element will again be restored and so on. + +If these operations are unclear to you, just forget about them and move on. +They are not necessary to enjoy the rest of Hyperbole. Otherwise, give them +a try by creating various window configurations and then saving and restoring +them. + +* Outliner + +The Hyperbole outliner only works under GNU Emacs version 19 or higher and +XEmacs version 19.9 or higher. You can tell whether you are running a +version of Emacs which supports the outliner by hitting +@{@kbd{C-h h}@} to display the Hyperbole menu. If you see an +@code{Otl/} entry in the menu, then the outliner is available. +Otherwise, the outliner does not work with your version of Emacs, so +this section of the DEMO will not be of interest to you. + +The Hyperbole outliner produces structured, autonumbered documents +composed of hierarchies of cells. Each cell has two identifiers, a +relative autonumber indicating its present position within the outline +and a permanent identifier suitable for use within hyperlink references +to the cell. + +If the outliner works in your Emacs, see "kotl/EXAMPLE.kotl", an outline file +that explains how to operate the outliner. Use the @code{Otl/Example} menu +entry to display this file. Additional documentation can be found in +"(hyperbole.info)Outliner". "(hyperbole.info)Outliner Keys" +summarizes in alphabetical order the outliner commands which are bound +to keys. + + +* References + +[Stallman 87] Stallman, Richard. GNU Emacs Manual. Free Software +Foundation, Cambridge: MA, March 1987. + +* THE END