Initial Commit
[packages] / xemacs-packages / hyperbole / DEMO
1 * Overview
2
3 This file demonstrates simple usage of the basic Hyperbole button-action
4 types and shows how Hyperbole can support a style of self-documenting,
5 interactive files.  See the glossary in the Hyperbole Manual,
6 "(hyperbole.info)Glossary", if terms used here are unfamiliar to you.
7
8 * Smart Keys
9
10 Hyperbole provides two context-sensitive keys, the Action Key and the Assist
11 Key, jointly referred to as Smart Keys.  The Action Key is the shift-middle
12 mouse button on a 3-button mouse or shift-left button on a two button mouse
13 or {M-RET} on your keyboard.  The Assist Key is the shift-right mouse button
14 or {C-u M-RET}.  (InfoDock users may also use the middle mouse button as the
15 Action Key.)
16
17 See also the later section, <(Smart Mouse Keys)>.
18
19
20 ** Button Activation and Help
21
22 This button prints the <(factorial)> of 5 in the minibuffer when activated
23 with the Action Key.  (Once you have Hyperbole installed, just press the
24 Action Key on the word, <(factorial)>.)  If you instead press the Assist Key,
25 you get help for the preceding button.  The help provides a summary report of
26 the button.  You will see that it utilizes the 'eval-elisp' action type.  You
27 can also see who created it.  Try it.
28
29 Note that the create-time and mod-time are displayed using your own
30 timezone but they are stored as universal times.  So if you work with
31 people at other sites, you can mix their buttons with your own within
32 the same document and see one unified view of the modification times on
33 each button.  These times will also be useful for sorting buttons by
34 time when such features are provided in future Hyperbole releases.
35
36 ** Smart Scrolling
37
38 By default, the variable smart-scroll-proportional is set to t (TRUE).  This
39 makes a press of the Action Key at the end of a line scroll forward, so that
40 the current line is placed at the top of the window; the Assist Key does the
41 reverse when pressed at the end of line; it places the current line at the
42 bottom of the window.  This is called proportional scrolling because the
43 amount of scrolling is relative to the point's position in the window.  Try
44 it and then come back here.
45
46 Alternatively, if this variable is set to nil (FALSE), the Smart Keys scroll
47 forward or backward a windowful when at the end of a line, regardless of
48 which line point is on, just as {C-v} and {M-v} do.
49
50 Let's try windowful scrolling a bit.  Click this button and then practice
51 scrolling: <(toggle-scroll-proportional)>.  If you prefer the default
52 proportional scrolling, click on the previous button again to restore it.
53
54 If you always want windowful scrolling, you'll have to add a setting of
55 smart-scroll-proportional to your "~/.emacs" file after the point at which
56 you load Hyperbole or else set it as part of hyperb:init-hook, which executes
57 whenever Hyperbole is loaded, e.g.:
58
59    (setq hyperb:init-hook
60     (list (function (lambda () (setq smart-scroll-proportional nil)))))
61
62
63 ** Hyperbole Menus
64
65 To display the top-level Hyperbole menu, click the Action Key anywhere
66 within this paragraph or alternatively, use {C-h h}.  Clicking within the
67 paragraph, applies the default operation, given by action-key-default-function,
68 since the Action Key finds no more specialized context.  The default
69 operation happens to bring up the Hyperbole menu.
70
71 {q} or {C-g} will quit from the menu without invoking any commands if you
72 just want to take a look.  A menu item is selected by pressing the Action Key
73 over it or by typing its first letter in upper or lower case.
74
75 A click of the Assist Key on a menu item gives help on it.
76
77
78 ** Help Buffers
79
80 Context-sensitive Action Key help typically is bound to {C-h A}.  {C-u C-h A}
81 displays the same kind of help for the Assist Key.  Try it.
82
83 Any buffer whose name ends in `Help*' is presumed to be a temporary buffer
84 that one wants to inspect and then remove from view.  If you click either the
85 Action or Assist Key at the end of a help buffer, the buffer is buried from
86 view and your window configuration is restored to its state prior to
87 displaying the help.  If you have removed the Smart Key help buffer, bring it
88 back.  Then press one of the Smart Keys at its end to remove it.  Note how
89 your window configuration is restored.
90
91 Remember that this works for any help buffer, whether or not Hyperbole
92 generated it.
93
94 * Explicit Button Samples
95
96 Hyperbole is pretty forgiving about the format of explicit buttons.  For
97 example, all of the following represent the same button, as long as one
98 clicks on the *first* line of the button, within the button delimiters:
99
100   <(factorial button)>
101
102   <( factorial      button)>
103
104   Pam>  <(factorial
105   Pam>    button)>
106
107   ;; <(factorial
108   ;;   button)>
109
110   /* <( factorial      */
111   /*    button )> */
112
113
114 If your <(Info-directory-list)> or <(Info-directory)> variables include the
115 directory that contains the online GNU Emacs manual, activation of the
116 next button will tell you about <(keyboard macros)>.  Can't remember a
117 Hyperbole term?  Check out the Hyperbole Manual <(glossary)>.
118
119 Here is a <(keyboard macro)> button.  It displays documentation for the first
120 Emacs Lisp function that follows it, e.g. (hbut:report).  You can see that a
121 button label can consist of a number of words, up to a set <(maximum
122 length)>.
123
124 A <(shell command)> button can do many things, such as display the length of
125 this file.  While such commands are executing, you can perform other
126 operations.  If you create a button that runs a shell command which
127 displays its own window system window, i.e. a window outside of Emacs, use
128 'exec-window-cmd' rather than 'exec-shell-cmd' as its action type.
129
130 You can link to files such as your <(.login)> file.  Or directories,
131 like the <(tmp directory)>.  When creating file links, if the file you
132 are linking to is loaded in a buffer, you are prompted as to whether you
133 want the link to jump to the present point in that buffer.  If so, the
134 link will always jump there, so position point within the referent file
135 to take advantage of this feature.  Note how a separate window is used
136 when you activate file link buttons.  Most basic Hyperbole action types
137 display their results in this manner.
138
139 You can make a button an alias for another by using the 'link-to-ebut'
140 action type.  This <(factorial alias)> button does whatever the earlier
141 <(factorial)> button does.
142
143 The 'link-to-mail' action type allows you to reference mail messages
144 that you have stored away.  We can't demonstrate it here since we don't
145 have the mail messages that you do.
146
147 Hyperbole buttons may also be embedded within mail messages.  Even
148 buttons copied into mail replies can work:
149
150     Emile said:
151     >
152     > Hyperbole is better than home baked bread but not as filling.
153     > The following sample button displays a message, <(as long as 
154     > you click within its first line)>.
155
156
157 * Implicit Button Samples
158
159 ** Key Sequence Buttons
160
161 Any Emacs key sequence delimited with braces may be executed by
162 activating it as a button, for example {C-u C-p} should leave point four
163 lines above the button line.  A help request upon the key sequence
164 displays the documentation for its command binding, i.e. what it does.
165 If it does not represent a bound key sequence, it will not be
166 treated as a key sequence button.
167
168 ** Implicit Path Links
169
170 Any doubly quoted pathname acts as an implicit button that either displays the
171 referenced path within a buffer, passes it to an external viewer program, or
172 runs a function that operates upon the path.  These are 'pathname' implicit
173 buttons.  For example, activate "README".
174
175 Most pathnames simply link to the files that they name and so are simply
176 displayed for editing.  The variable 'hpath:suffixes' is a list of filename
177 suffix strings that are added to or removed from pathnames when searching for
178 a match.  "So if "README.gz" existed, the pathname button "README" would
179 display it.  If you use the Emacs "crypt.el" package, then compressed files
180 will be uncompressed before they are displayed.  Activate "README.gz" and
181 you'll see that the README file is displayed as desired.
182
183 The variable 'hpath:display-alist' contains pairs of pathname expressions and
184 edit functions.  When a pathname matches an expression, the associated edit
185 function is invoked upon the pathname.
186
187 The variable 'hpath:find-alist' determines the file suffixes which should be
188 viewed with external programs.  It also specifies the associated viewer
189 program for each different window system under which Hyperbole may be run.
190 See its documentation for more details.  Under the X window system, for
191 example, if you have the 'xv' program, all of the following file formats may
192 be displayed as images: gif, tiff, xbm, pm, pbm, and jpeg.
193
194 Several prefix characters may be attached to pathnames to indicate that
195 a different action should be taken when the button is activated.
196 An exclamation point prefix indicates that the full pathname should be run
197 as a non-windowed shell program.  For example, try "!/bin/date".
198 An ampersand prefix means run the full pathname as a windowed program, e.g.
199 "&/usr/bin/X11/xeyes".  Finally, a hyphen indicates that the filename should
200 be evaluated as an Emacs Lisp program, e.g. "-hibtypes.elc", rather than
201 displayed.
202
203 If you use the ange-ftp or efs add-on to GNU Emacs, such remote pathnames
204 will work as well.  (The latest version of ange-ftp may always be obtained
205 via anonymous ftp to:
206   "/anonymous@alpha.gnu.ai.mit.edu:ange-ftp/ange-ftp.tar.gz"). 
207
208 Once you have *loaded* the ange-ftp or the efs package (or you use a version
209 of Emacs 19 which autoloads ange-ftp), if you are on the Internet, you can
210 click on any of the following to browse the contents of the Hyperbole
211 distribution at the University of Illinois at Urbana (limit the amount
212 you do this so as not to deny others access to the archive):
213
214          "/anonymous@cs.uiuc.edu:pub/xemacs/infodock/"
215           /anonymous@128.174.252.1:/pub/xemacs/infodock/
216           /cs.uiuc.edu:pub/xemacs/infodock/
217
218 You can see that for ange-ftp/efs pathnames, Hyperbole recognizes them with
219 or without the double quote delimiters.  These same pathnames can be used
220 within explicit buttons which link to files or directories.  The HTML
221 (HyperText Markup Language) ftp pathname format used by World-Wide-Web
222 browsers is also recognized:
223
224          "ftp://cs.uiuc.edu/pub/xemacs/infodock/
225
226
227 GNU Info (filename)node references such as "(hyperbole.info)Glossary" or
228 "(emacs)Glossary", work similarly, thanks to the 'Info-node' button type.
229 Try one of the Glossary buttons above.
230
231 If you want to quickly learn how to create explicit buttons, see
232 "(hyperbole.info)Drags" and "(hyperbole.info)Menus".
233
234 So now when browsing the many documents that refer to filenames or Info
235 nodes in this way, you can just click on the name to see the contents.
236 (If a doubly quoted string references a local pathname that does not
237 exist within the file system, it will not be considered a pathname
238 button by Hyperbole.)  Pathname implicit buttons provide one example of
239 how Hyperbole can improve your working environment without you having to
240 do any work at all.
241
242
243 Hyperbole provides a history command which returns you to previous button
244 locations in the reverse order of the way you traverse them.  You access it
245 by selecting the Hist command from the top-level Hyperbole menu, {C-h h h}.
246 Remember this because you will want to use that command to return to this
247 DEMO later.
248
249 Now suppose you want to browse through a number of files within the
250 Hyperbole distribution.  You could use the Emacs dired subsystem,
251 "(emacs)Dired", but a faster way is to note that files named MANIFEST
252 and DIR are used to summarize the files in a directory, so we can use
253 each of their entries as an implicit button (of 'dir-summary' type) to
254 take us to the file.
255
256 Let's look at "MANIFEST".  Now click anywhere within a line in the MANIFEST
257 file and you see that it is displayed as expected.  (Remember to use the
258 Hyperbole history command to return here.)  You can get help on these buttons
259 just like any others.
260
261 Table of contents entries in "README" files act similarly.  Click on "README"
262 to view that file and then click on a table of contents entry to jump to the
263 associated section in the "README" file.
264
265 ** World-Wide-Web URL Buttons
266
267 If you use the w3 World-Wide-Web browser add-on to GNU Emacs, you can browse
268 URLs (universal resource locators) from within any buffer just as you would
269 any other implicit button, once you do some initial setup.
270
271 First you must ensure that you load the Hyperbole library that supports URL
272 viewing.  Either your "hsite.el" file should require hsys-w3 as part of
273 'hibtypes:begin-load-hook' or you should move point after the following line
274 and hit {C-x C-e} to evaluate it.
275
276          (progn (require 'w3) (require 'hsys-w3))
277
278 Now try using the Action Key on:
279
280          "http://www.ncsa.uiuc.edu"
281
282 ** Grep, Occurrence, Debugger and Compiler Error Buttons, and Cscope Analyzer
283    Lines
284
285 The output of 'grep -n', the UNIX line pattern matcher, can be
286 activated as buttons that jump to each matched line within its source
287 file; use {M-x grep RET}.
288
289 Compiler error messages also serve as implicit buttons that jump to
290 associated source lines; use {M-x compile RET}.  GDB, DBX or XDB stack frames
291 along with GDB breakpoint listing lines also link to source lines.
292
293 {M-x occur RET} (find matches in a single buffer) and {M-x moccur RET}
294 (find matches across multiple buffers and files) also produce implicit
295 button output that displays associated source lines.
296
297 If you have the Cscope C/C++ code analyzer from the AT&T Toolchest and have
298 loaded the cscope.el library add-on for GNU Emacs, then the output lines from
299 a cscope query serve as implicit buttons which jump to associated source
300 lines.  Cscope goes beyond the basic Emacs tags facility to allow you to see
301 the callers of a function and the functions called by a specific routine.
302
303 ** Annotated Bibliography Buttons
304
305 Here's a use of an annotated bibliography reference implicit button
306 which allows you to see a bibliography entry such as [Stallman 87] when
307 you activate the button between brackets.
308
309 ** Completion Buttons
310
311 Often when Emacs or Hyperbole prompts for an argument in the
312 minibuffer, a list of possible argument completions is available by
313 pressing {?}.  A single Action Key press on any of these completions
314 inserts it into the minibuffer for your inspection.  A second press on
315 the same completion causes it to be used as the argument value and any
316 succeeding argument prompt is then displayed.  Test this technique
317 with a {C-x C-f} (find-file) and then a {?}.
318
319 ** Hyperbole Source Buttons
320
321 If you ask for help on the [Stallman 87] button, the first line of the
322 help buffer will look like this:
323
324 @loc> "DEMO"
325
326 except it will contain the full pathname of the file.  If the button
327 were embedded within a buffer without an attached file, the first line
328 of the help buffer might look like:
329
330 @loc> #<buffer *scratch*>
331
332 If you click on the buffer name, the buffer will be displayed just as a
333 file buffer would.  This type of implicit button is called a
334 'hyp-source' button.
335
336 You can also activate any explicit buttons shown in a help buffer.
337
338 ** UNIX Man Apropos Buttons
339
340 Below are some lines output by the UNIX 'apropos' command (with a little
341 touchup for display purposes).  A button activation anywhere within such
342 a line recognizes the line as an apropos entry and tries to display the
343 man page for the entry.  Try it.  (If you happen to use the 'superman'
344 package which fetches man pages in the background, you'll have to wait
345 for the next version of superman which removes incompatibilities with
346 the standard man page fetch command before you can use these
347 'man-apropos' implicit buttons.)
348
349 grep, egrep, fgrep (1V) - search a file for a string or regular expression
350 rm, rmdir (1)           - remove (unlink) files or directories
351 touch (1V)              - update the access and modification times of a file
352 cat (1V)                - concatenate and display 
353
354 ** Internet Request For Comments (RFC) Document Browsing
355
356 If you are on the Internet and you have the ange-ftp or efs remote file
357 handling package for GNU Emacs, you can retrieve and browse RFC documents
358 used in Internet standard-making.  Simply use the Action Key on an RFC
359 document identifier, like RFC-822.  Rfc822 and rfc 822 work as well.  The
360 'rfc' implicit button type provides this service.  The 'hpath:rfc' variable
361 specifies the location from which to retrieve RFCs.
362
363 Once you have retrieved an RFC, an Action Key press most anywhere within a
364 line typically will produce a table of contents summary of the RFC (via the
365 'rfc-toc' implicit button type).  An Action Key press on any of the table of
366 contents lines then displays that section, for easy random access browsing.
367
368 ** Site-specific Online Library Document IDs
369
370 Hyperbole offers a powerful, yet easy to use facility for building online
371 libraries through the use of the 'doc-id' implicit button type.  A document id
372 is used just like a reference citation in traditional publications but
373 it actually links to the document that it references and the card catalog
374 (index) entry for the document.  One can easily pass around doc ids to point
375 people to appropriate documents.  For example, a mail message in response to
376 a question might say, "See [Emacs-001] for examples of what Emacs can do."
377
378 Since the format and handling of document identifiers and their index entries
379 is site-specific, document id handling is not completely configured in a
380 default Hyperbole configuration.  If you wish to setup this facility for
381 site or personal use, see the DESCRIPTION section in "hib-doc-id.el" for
382 installation and use information.
383
384
385 * Smart Mouse Keys
386
387 If you use Emacs with mouse support under the X window system, NeXTstep,
388 OpenWindows, SunView, or Apollo's DM window system, Hyperbole automatically
389 configures your mouse keys for use as Smart Keys and provides additional
390 display-oriented operations as demonstrated here.
391
392 See the Hyperbole menu item, Doc/SmartKy, for a summary of all Smart Key
393 operations.  For extensive details on Smart Key operation, see the Hyperbole
394 manual section, "(hyperbole.info)Smart Key Reference".
395
396 When Hyperbole is installed, a key may be bound which allows you to
397 switch between the Smart Key mouse bindings and your prior ones. `C-h w
398 hmouse-toggle-bindings RTN' should show you any key which performs this
399 command.  If no key binding has been established or if you prefer one of
400 your own, simply select a key and bind it within your "~/.emacs" file. 
401 For example, (global-set-key "\C-ct" 'hmouse-toggle-bindings).
402
403
404 ** Context-sensitive Help
405
406 Since the Smart Keys perform different operations in different contexts, it
407 is important to have context-sensitive help available.  The earlier section
408 on Help Buffers explained how to display such help from the keyboard.  The
409 same help can be displayed using the mouse by depressing the Smart Key for
410 which you want help, performing any action necessary to register a context,
411 such as a drag motion, and then pressing the other Smart Key.
412
413 Here is an example.  Depress the Action Key somewhere within this paragraph
414 and while holding it down, depress the Assist Key.  Then release the keys in
415 any order and the help display will pop up.  It explains that there was no
416 particular matching Smart Key context, so a default operation is performed
417 (the value of the variable 'action-key-default-function' determines the
418 operation performed).
419
420 ** Scrolling to the Beginning and End of Buffers
421
422 A left to right horizontal drag of the Action Key of 5 or more characters
423 scrolls the current buffer to its end (what {M->} does by default).  A right
424 to left drag of the Action Key does the opposite; it scrolls to the buffer's
425 beginning (what {M-<} does by default).  Try out these operations and then
426 use the Smart Key end of line scrolling capability to return here.
427
428 ** Creating and Deleting Windows
429
430 Horizontal and vertical drags of the Assist Key within a single window can be
431 used to create and delete Emacs windows.
432
433 A horizontal drag of five or more characters from left to right creates a new
434 window by splitting the current window into two windows, one on top of the
435 other.  A horizontal drag from right to left deletes the current window.  A
436 vertical drag in either direction splits the current window into two
437 side-by-side windows.
438
439 Let's try these.  Remember to use your Assist Key.  You need only move your
440 mouse pointer a few characters to register a drag.  First, split this window
441 with a left to right drag, then delete either one of the windows with a right
442 to left drag.
443
444 Now try a side-by-side window split.  Drag vertically in the up or down
445 direction three or more lines to split the window and then use a right to
446 left drag to delete either one of the side-by-side windows.
447
448 ** Resizing Windows
449
450 You can easily resize Emacs windows by dragging their window separators
451 (modelines or vertical side lines) within a frame.  Simply depress either
452 Smart Key on a modeline or near a window side, hold it down while you drag to
453 a new location and then release.  The window separator will then jump to the
454 location of release.  Basically, just drag the window separator to where you
455 want it.  If you want a single window to fill an entire frame, drag its
456 modeline, and if necessary its side, to the edge of the frame.
457
458 Did you follow all that?  Let's try it to be sure.  First, you need at least
459 two windows, so create a new one with the drag techniques you just learned.
460 Now drag with either Smart Key from the shared window edge to a new location.
461 See how both windows change size?
462
463 Try to drag the bottom modeline.  You see that you can't.
464
465 ** Swapping Buffers
466
467 Swapping buffer locations is quick and easy with Hyperbole.  Simply drag
468 from one window to another with the Assist Key.
469
470 Split the current window into two, one above the other.  Drag the upper
471 modeline so that one window is clearly bigger than the other.  Now try
472 dragging from inside one window to another with the Assist Key.
473
474 ** Modeline Clicks
475
476 Window modelines are treated specially be Hyperbole.  They are broken up into
477 three regions, each with their own Smart Key operations.  The regions are:
478 the left edge, the right edge, and the middle portion (the non-edge part of
479 the modeline).  The edge regions are the left or rightmost three characters
480 of the modeline, by default.
481
482 *** Switching to Another Buffer
483
484 An Action Key click in the left edge of a modeline buries the current buffer,
485 i.e. puts it on the bottom of the buffer list and removes it from view, if it
486 is not the only available buffer.  An Assist Key click in the left edge of a
487 modeline unburies the bottom buffer.  Repeated clicks of either key allow you
488 to cycle through buffers to get to the one you want.  Try this out.
489
490 *** Displaying Documentation
491
492 An Action Key click in the right edge of a modeline displays the Info manual
493 browsing system, see "(info)".  Once in Info, you can click with your Action
494 Key to follow menu items, cross references, or to jump to Info nodes
495 referenced within the top header line of a node.  Try browsing a bit and
496 while in Info display context-sensitive help for both the Action and Assist
497 Keys to see all that they can do.
498
499 If you click again with the Action Key on the right edge of the window
500 displaying Info, it will hide the Info buffer.  Thus, it works as a toggle to
501 display or to hide the Info buffer.  Try it.
502
503 A click of the Assist Key at the right edge of a modeline toggles between
504 display and removal of a Smart Key operation summary.  To remove the summary,
505 you must click on the modeline of the window displaying the summary.
506
507
508 *** Buffer Menu Display
509
510 An Action Key click in the center portion of a modeline displays a buffer
511 menu, a summary of available buffers.  An Action Key click on any buffer menu
512 line then displays that buffer.
513
514 This behavior is subject to change in the future if a more useful Action Key
515 operation is found for the middle of modelines.
516
517
518 ** Saving and Restoring Window Configurations
519
520 A window configuration consists of the set of windows within a single Emacs
521 frame.  This includes their locations, buffers, and scrolled positions of
522 their buffers.
523
524 Hyperbole allows you to save and restore window configurations with simple
525 diagonal mouse drags within a single window.  A diagonal drag in any
526 direction of the Action Key saves the current window configuration to a ring
527 of window configurations, just like the Emacs text kill ring.  (See
528 "(Emacs)Kill Ring".)  Each diagonal drag in any direction of the Assist Key
529 restores a prior saved window configuration from the ring.  Window
530 configurations are restored in reverse order of the way they were saved.
531 Since a ring is circular, after the oldest element is restored, the newest
532 element will again be restored and so on.
533
534 If these operations are unclear to you, just forget about them and move on.
535 They are not necessary to enjoy the rest of Hyperbole.  Otherwise, give them
536 a try by creating various window configurations and then saving and restoring
537 them.
538
539 * Outliner
540
541 The Hyperbole outliner only works under GNU Emacs version 19 or higher and
542 XEmacs version 19.9 or higher.  You can tell whether you are running a
543 version of Emacs which supports the outliner by hitting
544 @{@kbd{C-h h}@} to display the Hyperbole menu.  If you see an
545 @code{Otl/} entry in the menu, then the outliner is available.
546 Otherwise, the outliner does not work with your version of Emacs, so
547 this section of the DEMO will not be of interest to you.
548
549 The Hyperbole outliner produces structured, autonumbered documents
550 composed of hierarchies of cells.  Each cell has two identifiers, a
551 relative autonumber indicating its present position within the outline
552 and a permanent identifier suitable for use within hyperlink references
553 to the cell.
554
555 If the outliner works in your Emacs, see "kotl/EXAMPLE.kotl", an outline file
556 that explains how to operate the outliner.    Use the @code{Otl/Example} menu
557 entry to display this file.  Additional documentation can be found in
558 "(hyperbole.info)Outliner".  "(hyperbole.info)Outliner Keys"
559 summarizes in alphabetical order the outliner commands which are bound
560 to keys.
561
562
563 * References
564
565 [Stallman 87]  Stallman, Richard.  GNU Emacs Manual.  Free Software
566 Foundation, Cambridge: MA, March 1987.
567
568 * THE END