Mercurial > hg > xemacs-beta
comparison man/hyperbole.texi @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:376386a54a3c |
---|---|
1 \input texinfo | |
2 @c | |
3 @c FILE: hypb.texi | |
4 @c SUMMARY: The Hyperbole User Manual for V3 | |
5 @c USAGE: Hardcopy man from TeX; Info man from 'texinfo-format-buffer'. | |
6 @c | |
7 @c AUTHOR: Bob Weiner | |
8 @c ORG: Brown U. | |
9 @c | |
10 @c ORIG-DATE: 6-Nov-91 at 11:18:03 | |
11 @c LAST-MOD: 3-Nov-95 at 23:55:27 by Bob Weiner | |
12 | |
13 @c %**start of header (This is for running Texinfo on a region.) | |
14 @setfilename ../info/hyperbole.info | |
15 @settitle Hyperbole User Manual | |
16 @c %**end of header (This is for running Texinfo on a region.) | |
17 @synindex vr fn | |
18 | |
19 @iftex | |
20 @finalout | |
21 @end iftex | |
22 | |
23 @titlepage | |
24 @sp 4 | |
25 @center @titlefont{Hyperbole Manual} | |
26 @sp 1 | |
27 @center Everyday Information Management | |
28 @sp 5 | |
29 @center Bob Weiner | |
30 @sp 1 | |
31 @center E-mail: <hyperbole@@hub.ucsb.edu> (This is a mail list.) | |
32 @sp 2 | |
33 @center Edition 4.01 | |
34 @sp 2 | |
35 @center November 3, 1995 | |
36 | |
37 @page | |
38 @vskip 0pt plus 1filll | |
39 Copyright @copyright{} 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. | |
40 | |
41 All trademarks referenced herein are trademarks of their respective | |
42 holders. | |
43 @setchapternewpage odd | |
44 @end titlepage | |
45 @page | |
46 | |
47 @node Top, Introduction, (dir), (dir) | |
48 @c node-name, next, previous, up | |
49 @unnumbered Preface | |
50 | |
51 @ifinfo | |
52 @noindent | |
53 Copyright @copyright{} 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. | |
54 | |
55 All trademarks referenced herein are trademarks of their respective holders. | |
56 | |
57 @end ifinfo | |
58 This edition of the Hyperbole User Manual is for use with any version | |
59 4.01 or greater of Hyperbole. | |
60 | |
61 Hyperbole is free software; you can use it, redistribute it and/or modify it | |
62 without fee under the terms of the GNU General Public License as published by | |
63 the Free Software Foundation; either version 2, or (at your option) any later | |
64 version. | |
65 | |
66 Hyperbole is distributed in the hope that it will be useful, but WITHOUT ANY | |
67 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR | |
68 A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |
69 | |
70 You should have received a copy of the GNU General Public License | |
71 along with GNU Emacs or XEmacs; see the file COPYING. If not, write to | |
72 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
73 | |
74 @cindex credits | |
75 @cindex InfoDock, obtaining | |
76 @cindex Hyperbole, obtaining | |
77 @cindex anonymous ftp | |
78 Hyperbole was designed and written by Bob Weiner. Motorola, | |
79 Inc@. funded and donated this work for free redistribution as part of | |
80 the InfoDock integrated software engineering and productivity toolset. | |
81 For information on how to obtain Hyperbole, @ref{Obtaining}. InfoDock | |
82 can be found at the same location. | |
83 | |
84 This manual explains user operation and summarizes basic developer | |
85 facilities of Hyperbole. This major release of Hyperbole concentrates | |
86 on providing convenient access to information and control over its | |
87 display. The Hyperbole outliner emphasizes flexible views and structure | |
88 manipulation within bodies of information. | |
89 | |
90 @cindex Hyperbole | |
91 @cindex hypertext | |
92 @cindex Emacs Lisp | |
93 @cindex Emacs 19 | |
94 @cindex Epoch | |
95 @cindex XEmacs | |
96 @cindex Lucid Emacs | |
97 Hyperbole (pronounced Hi-purr-boe-lee) is an open, efficient, | |
98 programmable information management and hypertext system. It is | |
99 intended for everyday work on any UNIX platform supported by GNU Emacs. | |
100 It works well with the versions of Emacs that support multiple X or | |
101 NEXTSTEP windows: Emacs 19, XEmacs (formerly called Lucid Emacs) and | |
102 Epoch. Hyperbole allows hypertext buttons to be embedded within | |
103 unstructured and structured files, mail messages and news articles. It | |
104 offers intuitive mouse-based control of information display within | |
105 multiple windows. It also provides point-and-click access to Info | |
106 manuals, ftp archives, Wide-Area Information Servers (WAIS), and the | |
107 World-Wide Web (WWW) hypertext system through encapsulations of software | |
108 that support these protocols. | |
109 | |
110 @noindent | |
111 Hyperbole consists of four parts: | |
112 | |
113 @table @bullet | |
114 @item Info Management | |
115 an interactive information management interface, including a powerful | |
116 rolodex, which anyone can use. It is easy to pick up and use since it | |
117 introduces only a few new mechanisms and provides user-level facilities | |
118 through a menu interface, which you control from the keyboard or the | |
119 mouse; | |
120 | |
121 @item Hypertext Outliner | |
122 an outliner with multi-level autonumbering and permanent ids attached to | |
123 each outline node for use as hypertext link anchors, plus flexible view | |
124 specifications that can be embedded within links or used interactively; | |
125 | |
126 @item Button Types | |
127 a set of hyper-button types that provides core hypertext and other | |
128 behaviors. Users can make simple changes to button types and those | |
129 familiar with Emacs Lisp can quickly prototype and deliver new types; | |
130 | |
131 @item Programming Library | |
132 a set of programming library classes for system developers who want to | |
133 integrate Hyperbole with another user interface or as a back-end to a | |
134 distinct system. (All of Hyperbole is written in Emacs Lisp for ease of | |
135 modification. Although Hyperbole was initially designed as a prototype, | |
136 it has been engineered for real-world usage and is well structured.) | |
137 @end table | |
138 | |
139 @cindex GNU Emacs | |
140 @kindex C-h t | |
141 @vindex file, DEMO | |
142 @cindex demonstration | |
143 @cindex button demo | |
144 Hyperbole may be used simply for browsing through documents | |
145 pre-configured with Hyperbole buttons, in which case, one can safely | |
146 ignore most of the information in this manual. The @file{DEMO} file | |
147 included in the Hyperbole distribution demonstrates many of Hyperbole's | |
148 standard facilities. It offers a much less technical introduction for | |
149 Hyperbole users by providing good examples of how buttons may be | |
150 used and an introduction to the outliner. | |
151 | |
152 So if this manual is too detailed for your taste, you can skip it | |
153 entirely and just jump right into the demonstration, normally by typing | |
154 @{@kbd{C-h h d d}@}, assuming Hyperbole has already been installed at | |
155 your site. Otherwise, @ref{Installation}, for Hyperbole installation | |
156 and configuration information. | |
157 | |
158 Many users, however, will want to do more than browse with Hyperbole, | |
159 e.g@. create their own buttons. The standard Hyperbole button editing | |
160 user interface is GNU Emacs-based, so a basic familiarity with the Emacs | |
161 editing model is useful. The material covered in the GNU Emacs | |
162 tutorial, normally bound to @{@kbd{C-h t}@} within Emacs, is more than | |
163 sufficient as background. If some GNU Emacs terms are unfamiliar to | |
164 you, @ref{Glossary, Emacs Glossary,, emacs, the GNU Emacs Manual}. | |
165 | |
166 Before we delve into Hyperbole, a number of acknowledgments are in | |
167 order. Peter Wegner has encouraged the growth in this work. Morris | |
168 Moore has helped me pursue my own research visions and kept me striving | |
169 for excellence. Doug Engelbart has shown me the bigger picture and | |
170 continues to be an inspiration. His work provides a model from which I | |
171 am beginning to draw. Kellie Clark and I jointly designed the Hyperbole | |
172 outliner while sharing a life together. Chris Nuzum, as a user of | |
173 Hyperbole, has helped demonstrate its power since its inception; he | |
174 knows how to work with Hyperbole far better than I. | |
175 | |
176 @menu | |
177 * Introduction:: | |
178 * Installation:: | |
179 * Buttons:: | |
180 * Smart Keys:: | |
181 * Menus:: | |
182 * Entering Arguments:: | |
183 * Outliner:: | |
184 * Rolodex:: | |
185 * Window Configurations:: | |
186 * Developing with Hyperbole:: | |
187 * Glossary:: | |
188 * Smart Key Reference:: | |
189 * Outliner Keys:: | |
190 * Suggestion or Bug Reporting:: | |
191 * Questions and Answers:: | |
192 * Future Work:: | |
193 * References:: | |
194 * Key Binding Index:: | |
195 * Code and File Index:: | |
196 * Concept Index:: | |
197 | |
198 --- The Detailed Node Listing --- | |
199 | |
200 Introduction | |
201 | |
202 * Hyperbole Overview:: | |
203 * Mail Lists:: | |
204 * Manual Overview:: | |
205 | |
206 Installation | |
207 | |
208 * Obtaining:: | |
209 * Building:: | |
210 * Installing:: | |
211 * Configuring:: | |
212 | |
213 Configuring | |
214 | |
215 * Internal Viewers:: | |
216 * External Viewers:: | |
217 * Link Variable Substitution:: | |
218 * Button Colors:: | |
219 | |
220 Buttons | |
221 | |
222 * Explicit Buttons:: | |
223 * Global Buttons:: | |
224 * Implicit Buttons:: | |
225 * Action Types:: | |
226 * Button Type Precedence:: | |
227 * Button Files:: | |
228 * Utilizing Explicit Buttons:: | |
229 | |
230 Utilizing Explicit Buttons | |
231 | |
232 * Creation:: | |
233 * Renaming:: | |
234 * Deletion:: | |
235 * Modification:: | |
236 * Location:: | |
237 * Buttons in Mail:: | |
238 * Buttons in News:: | |
239 | |
240 Creation | |
241 | |
242 * By Dragging:: Creation Via Action Key Drags | |
243 * By Menu:: Creation Via Menus | |
244 | |
245 Outliner | |
246 | |
247 * Menu Commands:: | |
248 * Creating Outlines:: | |
249 * Autonumbering:: | |
250 * Idstamps:: | |
251 * Editing:: | |
252 * Viewing:: | |
253 * Links:: | |
254 * Cell Attributes:: | |
255 * Outliner History:: | |
256 | |
257 Editing | |
258 | |
259 * Adding and Killing:: | |
260 * Moving Around:: | |
261 * Relocating and Copying:: | |
262 * Filling:: | |
263 * Transposing:: | |
264 * Splitting and Appending:: | |
265 * Inserting and Importing:: | |
266 | |
267 Viewing | |
268 | |
269 * Hiding and Showing:: | |
270 * View Specs:: | |
271 | |
272 Rolodex | |
273 | |
274 * Rolo Concepts:: | |
275 * Rolo Menu:: | |
276 * Rolo Keys:: | |
277 * Rolo Settings:: | |
278 | |
279 Developing with Hyperbole | |
280 | |
281 * Hook Variables:: | |
282 * Creating Types:: | |
283 * Explicit Button Technicalities:: | |
284 * Encapsulating Systems:: | |
285 * Embedding Hyperbole:: | |
286 | |
287 Creating Types | |
288 | |
289 * Action Type Creation:: | |
290 * Implicit Button Types:: | |
291 | |
292 Explicit Button Technicalities | |
293 | |
294 * Button Label Normalization:: | |
295 * Operational and Storage Formats:: | |
296 * Programmatic Button Creation:: | |
297 | |
298 Smart Key Reference | |
299 | |
300 * Smart Mouse Keys:: | |
301 * Smart Keyboard Keys:: | |
302 @end menu | |
303 | |
304 @node Introduction, Installation, Top, Top | |
305 @chapter Introduction | |
306 | |
307 This chapter describes what Hyperbole is, lists some of its potential | |
308 applications, explains how to subscribe to its mail lists, and then | |
309 summarizes the structure of the rest of the manual. | |
310 | |
311 @menu | |
312 * Hyperbole Overview:: | |
313 * Mail Lists:: | |
314 * Manual Overview:: | |
315 @end menu | |
316 | |
317 @node Hyperbole Overview, Mail Lists, Introduction, Introduction | |
318 @section Hyperbole Overview | |
319 @cindex button | |
320 A Hyperbole user works with @emph{buttons} embedded within textual | |
321 documents; he may create, modify, move or delete buttons. Each button | |
322 performs a specific action, such as linking to a file or executing a | |
323 shell command. | |
324 | |
325 @cindex button, explicit | |
326 @cindex button, global | |
327 @cindex button, implicit | |
328 @cindex button category | |
329 @cindex explicit button | |
330 @cindex global button | |
331 @cindex implicit button | |
332 There are three categories of Hyperbole buttons: | |
333 @table @dfn | |
334 @item explicit buttons | |
335 created by Hyperbole, accessible from within a single document; | |
336 | |
337 @item global buttons | |
338 created by Hyperbole, accessible anywhere within a user's network of | |
339 documents; | |
340 | |
341 @item implicit buttons | |
342 created and managed by other programs or embedded within the structure | |
343 of a document, accessible from within a single document. Hyperbole | |
344 recognizes implicit buttons by contextual patterns given in their type | |
345 specifications (explained later). | |
346 @end table | |
347 | |
348 Explicit Hyperbole buttons may be embedded within any type of text file. | |
349 Implicit buttons may be recognized anywhere within a text file, | |
350 depending on the implicit button types that are available. All global | |
351 buttons are stored in a single location and activated by entering their | |
352 names, rather than by direct selection, the means used to activate | |
353 explicit and implicit buttons. | |
354 | |
355 @noindent | |
356 To summarize: | |
357 | |
358 @example | |
359 Button Category Active Within Activation Means Managed By | |
360 ======================================================================== | |
361 Explicit a single document direct selection Hyperbole | |
362 Global any document specifying its name Hyperbole | |
363 Implicit a matching context direct selection other tools | |
364 ======================================================================== | |
365 @end example | |
366 | |
367 @cindex terminal use | |
368 Hyperbole buttons may be clicked upon with a mouse to activate them or | |
369 to describe their actions. Thus, a user can always check how a button | |
370 will act before activating it. Buttons may also be activated from a | |
371 keyboard. (In fact, virtually all Hyperbole operations, including menu | |
372 usage, may be performed from any standard character terminal interface, | |
373 so one need not be anchored to a workstation all day). @xref{Smart | |
374 Keys}. | |
375 | |
376 @cindex Hyperbole features | |
377 Hyperbole does not enforce any particular hypertext or information | |
378 management model, but instead allows you to organize your information in | |
379 large or small chunks as you see fit. The Hyperbole outliner organizes | |
380 information hierarchies which may also contain links to external | |
381 information sources. | |
382 | |
383 @noindent | |
384 Some of Hyperbole's most important features include: | |
385 | |
386 @itemize @bullet | |
387 @item | |
388 Buttons may link to information or may execute procedures, such as | |
389 starting or communicating with external programs; | |
390 | |
391 @item | |
392 One simply drags between a button source location and a link destination | |
393 to create or to modify a link button. The same result can be achieved | |
394 from the keyboard. | |
395 | |
396 @item | |
397 Buttons may be embedded within electronic mail messages; | |
398 | |
399 @item | |
400 Outlines allow rapid browsing, editing and movement of chunks of | |
401 information organized into trees (hierarchies); | |
402 | |
403 @item | |
404 Other hypertext and information retrieval systems may be encapsulated | |
405 under a Hyperbole user interface (a number of samples are provided). | |
406 @end itemize | |
407 | |
408 @cindex Hyperbole applications | |
409 @noindent | |
410 Typical Hyperbole applications include: | |
411 | |
412 @table @strong | |
413 @item personal information management | |
414 Overlapping link paths provide a variety of views into an information space. | |
415 A search facility locates buttons in context and permits quick selection. | |
416 | |
417 @item documentation and code browsing | |
418 Cross-references may be embedded within documentation. One can add a | |
419 point-and-click interface to existing documentation, link code with | |
420 associated design documents, or jump to the definition of an identifier | |
421 by selecting its name within code or documentation. | |
422 | |
423 @item brainstorming | |
424 The Hyperbole outliner, @xref{Outliner}, is an | |
425 effective tool for capturing ideas and then quickly reorganizing them in | |
426 a meaningful way. Links to related ideas are easy to create, | |
427 eliminating the need to copy and paste information into a single place. | |
428 | |
429 @item help/training systems | |
430 Tutorials containing buttons can show students how things work while | |
431 explaining the concepts, e.g@. an introduction to local commands. This | |
432 technique can be much more effective than written documentation alone. | |
433 | |
434 @item archive managers | |
435 Programs that manage archives from incoming information streams may be | |
436 supplemented by having them add topic-based buttons that link to the | |
437 archive holdings. Users can then search and create their own links to | |
438 archive entries. | |
439 @end table | |
440 | |
441 @node Mail Lists, Manual Overview, Hyperbole Overview, Introduction | |
442 @section Mail Lists | |
443 | |
444 If you maintain or use Hyperbole, you should consider joining one of the | |
445 two Hyperbole interest mailing lists. @xref{Menus}, and the description | |
446 of the the Msg/ menu item, for a convenient means of joining and mailing | |
447 to these lists. | |
448 | |
449 @cindex mail lists | |
450 @cindex e-mail | |
451 There are several Hyperbole-related mail addresses. Learn what each is | |
452 for before you mail to any of them. | |
453 | |
454 @cindex mail list requests | |
455 @cindex joining a mail list | |
456 @cindex subscribing to a mail list | |
457 @cindex unsubscribing from a mail list | |
458 @format | |
459 <hyperbole-request@@hub.ucsb.edu> | |
460 <hyperbole-announce-request@@hub.ucsb.edu> | |
461 @end format | |
462 | |
463 @display | |
464 @strong{All} mail concerning administration of the Hyperbole mailing | |
465 lists should be sent to the appropriate one of these addresses. That | |
466 includes addition, change, or deletion requests. Don't consider sending | |
467 such a request to a Hyperbole mail list or people will wonder why you | |
468 don't know that all Internet mail lists have a -request address for | |
469 administrative requests.@refill | |
470 | |
471 Use the following formats on your subject line to execute requests, | |
472 where you substitute your own values for the <> delimited items.@refill | |
473 | |
474 Subject: Subscribe '<' <user@@domain> '>' (<your name>). | |
475 Subject: Unsubscribe '<' <user@@domain> '>'. | |
476 | |
477 To change your address, you must unsubscribe your old address in one | |
478 message and then subscribe your new address in another message.@refill | |
479 | |
480 For example: | |
481 | |
482 To: hyperbole-announce-request@@hub.ucsb.edu | |
483 Subject: Unsubscribe <joe@@any.com>. | |
484 | |
485 To: hyperbole-announce-request@@hub.ucsb.edu | |
486 Subject: Subscribe <joe@@any.com> (Joe Williams). | |
487 @end display | |
488 | |
489 @noindent | |
490 There are two Hyperbole-related mail lists. Subscribe to one or the other, | |
491 not to both. | |
492 | |
493 @cindex hyperbole mail list | |
494 @format | |
495 <hyperbole@@hub.ucsb.edu> | |
496 @end format | |
497 | |
498 @display | |
499 Mail list for discussion of all Hyperbole issues. Bug reports and | |
500 suggestions may also be sent here.@refill | |
501 | |
502 @cindex e-mail, effective communication | |
503 @cindex effective communication | |
504 Always use your Subject and/or Summary: lines to state the position that | |
505 your message takes on the topic that it addresses. | |
506 | |
507 For example, send: | |
508 | |
509 Subject: Basic bug in top-level minibuffer menu. | |
510 | |
511 rather than: | |
512 | |
513 Subject: Hyperbole bug. | |
514 | |
515 Statements end with periods, questions with question marks (typically), | |
516 and high energy, high impact declarations with exclamation points. This | |
517 simple rule makes all e-mail communication much easier for recipients to | |
518 handle appropriately.@refill | |
519 | |
520 @cindex Hyperbole version | |
521 @cindex Emacs version | |
522 @vindex emacs-version | |
523 If you ask a question, your subject line should end with a ?, | |
524 e.g@. "Subject: How can man page SEE ALSOs be made implicit buttons?" A | |
525 "Subject: Re: How can ..." then indicates an answer to the question. | |
526 Question messages should normally include your Hyperbole and Emacs | |
527 version numbers and clearly explain your problem and surrounding issues. | |
528 Otherwise, you will simply waste the time of those who may want to help | |
529 you. (Your top-level Hyperbole menu shows its version number and @{@kbd{M-x | |
530 emacs-version @key{RET}}@} gives the other.)@refill | |
531 | |
532 If you ask questions, you should consider adding to the discussion by | |
533 telling people the kinds of work you are doing or contemplating doing | |
534 with Hyperbole. In this way, the list will not be overwhelmed by | |
535 messages that ask for, but provide no information.@refill | |
536 @end display | |
537 | |
538 @cindex hyperbole-announce mail list | |
539 @format | |
540 <hyperbole-announce@@hub.ucsb.edu> | |
541 @end format | |
542 | |
543 @display | |
544 Those who don't want to participate in the discussion but want to hear | |
545 about bug fixes and new releases of Hyperbole should subscribe to this | |
546 list. Anyone on the `hyperbole' list is automatically on this one too, | |
547 so there is no need to subscribe to this one in that case. This list is | |
548 for official fixes and announcements so don't send your own fixes here. | |
549 Send them to `hyperbole' instead. | |
550 @end display | |
551 | |
552 | |
553 @node Manual Overview, , Mail Lists, Introduction | |
554 @section Manual Overview | |
555 | |
556 Remember that the @file{DEMO} file included in the Hyperbole | |
557 distribution demonstrates many of Hyperbole's standard facilities, | |
558 (@pxref{Top, Preface}) for more details. | |
559 | |
560 @xref{Glossary}, for definitions of Hyperbole terms for quick | |
561 reference, so in some cases terms are not precisely defined within the | |
562 text. Be sure to reference the glossary if a term is unclear to you. | |
563 Although you need not have a keen understanding of all of these terms, a | |
564 quick scan of the Glossary should help throughout Hyperbole use. | |
565 | |
566 If you have a question, feature suggestion or bug report on Hyperbole, | |
567 follow the instructions given in @ref{Suggestion or Bug Reporting}. A few | |
568 commonly asked questions are answered in the manual, @ref{Questions and | |
569 Answers}. If you are interested in classic articles on hypertext, | |
570 @ref{References}. | |
571 | |
572 @xref{Installation}, for explanations of how to obtain, install, configure | |
573 and load Hyperbole for use. | |
574 | |
575 @xref{Buttons}, for an overview of Hyperbole buttons and how to use them. | |
576 | |
577 @xref{Smart Keys}, for an explanation of the innovative, | |
578 context-sensitive mouse and keyboard Action and Assist Keys offered by | |
579 Hyperbole. @xref{Smart Key Reference}, for a complete reference on what | |
580 the Action and Assist Keys do in each particular context that they | |
581 recognize. | |
582 | |
583 (Keep in mind as you read about how to use Hyperbole that in many cases, | |
584 it provides a number of overlapping interaction methods are provided to | |
585 support different work styles and hardware limitations. You need learn | |
586 only one with which you can become comfortable, in such instances.) | |
587 | |
588 @xref{Menus}, for summaries of Hyperbole menu commands and how to use | |
589 the minibuffer-based menus that work on dumb terminals. | |
590 | |
591 @xref{Entering Arguments}, for special support that Hyperbole provides for | |
592 entering arguments when prompted for them. | |
593 | |
594 @xref{Outliner}, for concept and usage information on the | |
595 autonumbered, hypertextual outliner. A full summary of the outliner | |
596 commands that are bound to keys may be found in @ref{Outliner Keys}. | |
597 | |
598 @xref{Rolodex}, for concept and usage information on the | |
599 rapid lookup, hierarchical, free text record management system included | |
600 with Hyperbole. | |
601 | |
602 @xref{Window Configurations}, for instructions on how to save and restore | |
603 the set of buffers and windows that appear with a frame. This feature | |
604 lets you switch among working contexts easily, even on a dumb terminal. | |
605 Such configurations only last throughout your current editor session. | |
606 | |
607 Developers comfortable with Emacs Lisp will want to continue on through | |
608 to, @ref{Developing with Hyperbole}. | |
609 | |
610 @xref{Future Work}, for future directions in Hyperbole's evolution. | |
611 | |
612 | |
613 @node Installation, Buttons, Introduction, Top | |
614 @chapter Installation | |
615 | |
616 @cindex installation | |
617 Hyperbole must be installed at your site before you can use it. The | |
618 following sections explain how to obtain, install and configure | |
619 Hyperbole for use. | |
620 | |
621 @vindex file, hsite.el | |
622 @cindex customization, init | |
623 If you want to customize the basic Hyperbole initialization sequence for | |
624 yourself rather than the users at your site, you should make a personal | |
625 copy of the @file{hsite.el} file, modify it the way you want, and then | |
626 load it. (If you are familiar with Emacs Lisp, @ref{Hook Variables}.) | |
627 | |
628 @menu | |
629 * Obtaining:: | |
630 * Building:: | |
631 * Installing:: | |
632 * Configuring:: | |
633 @end menu | |
634 | |
635 @node Obtaining, Building, Installation, Installation | |
636 @section Obtaining | |
637 | |
638 @cindex InfoDock | |
639 @cindex ftp | |
640 @cindex anonymous ftp | |
641 Hyperbole is actually part of an integrated tool framework that we have | |
642 developed called InfoDock. InfoDock provides a modern user interface on top | |
643 of Emacs, information management, and powerful software development tools, | |
644 all in one package. Hyperbole or InfoDock can be obtained via anonymous | |
645 ftp on the Internet from: | |
646 | |
647 @file{ftp://ftp.xemacs.org/pub/infodock}. | |
648 | |
649 @cindex downloading Hyperbole | |
650 @cindex obtaining Hyperbole | |
651 @cindex Hyperbole, obtaining | |
652 @noindent | |
653 Here are detailed instructions for downloading and unpacking Hyperbole. | |
654 | |
655 Move to a directory below which you want the @file{hyperbole} directory to | |
656 be created. Unpacking the Hyperbole archive will create the | |
657 @file{hyperbole} directory and will place all of the files below it. | |
658 | |
659 @example | |
660 cd <LOCAL-EMACS-LISP-DIR> | |
661 @end example | |
662 | |
663 @noindent | |
664 Ftp to ftp.xemacs.org (Internet Host ID = 128.174.252.16): | |
665 | |
666 @example | |
667 prompt> ftp ftp.xemacs.org | |
668 @end example | |
669 | |
670 @noindent | |
671 Login as @emph{anonymous} with your own @emph{<user-id>@@<site-name>} as | |
672 a password. | |
673 | |
674 @example | |
675 Name (ftp.xemacs.org): anonymous | |
676 331 Guest login ok, send EMAIL address (e.g@. user@@host.domain) | |
677 as password. | |
678 Password: | |
679 230 Guest login ok, access restrictions apply. | |
680 @end example | |
681 | |
682 @noindent | |
683 Move to the Hyperbole directory: | |
684 | |
685 @example | |
686 ftp> cd pub/infodock | |
687 @end example | |
688 | |
689 @noindent | |
690 Set your transfer mode to binary: | |
691 | |
692 @example | |
693 ftp> bin | |
694 200 Type set to I. | |
695 @end example | |
696 | |
697 @noindent | |
698 Turn off prompting: | |
699 | |
700 @example | |
701 ftp> prompt | |
702 Interactive mode off. | |
703 @end example | |
704 | |
705 @noindent | |
706 Retrieve just the Hyperbole archive and any diff-based patches (there may not | |
707 be any patches): | |
708 | |
709 @example | |
710 ftp> mget hyperbole* | |
711 ftp> mget hdiff* | |
712 @end example | |
713 | |
714 @noindent | |
715 Close the ftp connection: | |
716 | |
717 @example | |
718 ftp> quit | |
719 221 Goodbye. | |
720 @end example | |
721 | |
722 @cindex gzcat | |
723 @cindex zcat | |
724 @cindex gunzip | |
725 @cindex tar archive | |
726 @cindex uncompressing archives | |
727 @cindex unpacking archives | |
728 @noindent | |
729 Unpack the tar archive using the GNU version of the @code{zcat} program, | |
730 sometimes called @code{gzcat} or the @code{gunzip} program: | |
731 | |
732 @example | |
733 zcat hyperbole*tar.gz | tar xvf - | |
734 or | |
735 gunzip hyperbole*tar.gz; tar xvf hyperbole*tar | |
736 @end example | |
737 | |
738 @noindent | |
739 Apply any patches you retrieved: | |
740 | |
741 @example | |
742 cd hyperbole; patch < <patch-file> | |
743 @end example | |
744 | |
745 | |
746 @node Building, Installing, Obtaining, Installation | |
747 @section Building | |
748 | |
749 @vindex file, Makefile | |
750 @vindex file, hsite.el | |
751 @cindex Hyperbole, building | |
752 @cindex building Hyperbole | |
753 The following explains how to Use the Hyperbole @file{Makefile} to | |
754 compile any needed code, to generate the @file{hsite.el} file used for | |
755 site-specific Hyperbole customization, and to produce printable | |
756 documentation. | |
757 | |
758 @vindex EMACS, environment variable | |
759 @cindex compiling Lisp | |
760 @cindex Lisp compilation | |
761 Edit the line near the top of @file{Makefile} that represents the emacs | |
762 version that you use, so that it corresponds to the emacs executable | |
763 name used on your system. Then immediatly below there, set the | |
764 @var{EMACS} variable to the variable name for the emacs that you will | |
765 use to compile the Hyperbole Lisp files. | |
766 | |
767 @vindex SITE-PRELOADS, environment variable | |
768 You may also have to set the @var{SITE-PRELOADS} variable defined further down | |
769 in the file; follow the instructions that precede the @var{SITE-PRELOADS =} | |
770 line. Make these changes now and save the @file{Makefile}. | |
771 | |
772 @cindex HYPERBOLE-DIR | |
773 The following instructions use the term @file{<HYPERBOLE-DIR>/} to refer | |
774 to your @file{hyperbole/} directory, so substitute your own value. | |
775 | |
776 @noindent | |
777 To install Hyperbole for use with InfoDock, XEmacs, GNU Emacs or Epoch, from | |
778 a shell: | |
779 | |
780 @example | |
781 cd <HYPERBOLE-DIR>; make | |
782 @end example | |
783 | |
784 @noindent | |
785 All of the .elc compiled Lisp files are already built for XEmacs and V19, so | |
786 this build will finish very quickly. If you really want to rebuild all of | |
787 the .elc files, use: | |
788 | |
789 @example | |
790 cd <HYPERBOLE-DIR>; make all-elc | |
791 @end example | |
792 | |
793 @cindex Postscript | |
794 @cindex manual, generating Postscript | |
795 @vindex file, man/hyperbole.ps | |
796 @noindent | |
797 To produce the Postscript version of the Hyperbole manual, you must have | |
798 the TeX formatter on your system: | |
799 | |
800 @example | |
801 cd <HYPERBOLE-DIR>; make ps | |
802 @end example | |
803 | |
804 @noindent | |
805 To install Hyperbole for use with GNU Emacs V18 or Epoch: | |
806 | |
807 @example | |
808 cd <HYPERBOLE-DIR>; make all-elc-v18 | |
809 @end example | |
810 | |
811 @noindent | |
812 This will produce a complete set of Emacs V18 .elc files. | |
813 | |
814 | |
815 @node Installing, Configuring, Building, Installation | |
816 @section Installing | |
817 | |
818 @cindex configuration | |
819 You may want to explore the Hyperbole configuration options before | |
820 installing it. @xref{Configuring}. If you just want to get up and | |
821 running quickly, however, there is no need to configure anything, just | |
822 follow these instructions to install Hyperbole. | |
823 | |
824 @cindex Hyperbole, initializing | |
825 @cindex initializing Hyperbole | |
826 @cindex installation | |
827 @cindex site initialization | |
828 @vindex file, hsite.el | |
829 @vindex file, ~/.emacs | |
830 Add the following lines to a site initialization file such as | |
831 @file{site-start.el} to set up so that all users have Hyperbole | |
832 loaded for them when they run Emacs. Otherwise, each user will have to | |
833 add these lines to his own @file{~/.emacs} initialization file. | |
834 | |
835 @cindex autoloading Hyperbole | |
836 @cindex Hyperbole, autoloading | |
837 @noindent | |
838 To autoload Hyperbole so that it loads only when needed: | |
839 | |
840 @vindex hyperb:dir | |
841 @vindex file, hversion.el | |
842 @vindex file, hyperbole.el | |
843 @lisp | |
844 (defvar hyperb:dir "<HYPERBOLE-DIR>/") | |
845 "Directory where the Hyperbole executable code is kept. | |
846 It must end with a directory separator character.") | |
847 | |
848 (load (expand-file-name "hversion" hyperb:dir)) | |
849 (load (expand-file-name "hyperbole" hyperb:dir)) | |
850 @end lisp | |
851 | |
852 @cindex loading Hyperbole | |
853 @cindex Hyperbole, loading | |
854 This establishes a few key bindings and sets up Hyperbole to | |
855 automatically load whenever you activate its menu. If you would rather | |
856 have the whole Hyperbole system loaded when you start up so that you can | |
857 always use the Smart Keys and other facilities, add the additional line: | |
858 | |
859 @lisp | |
860 (require 'hsite) | |
861 @end lisp | |
862 | |
863 If you use mouse keys, be sure to add the above lines after any setup of | |
864 mouse key bindings, to ensure that Hyperbole's mouse keys are properly | |
865 initialized. @xref{Smart Keys}, for further details. If you use any | |
866 Hyperbole mail or news support, @ref{Buttons in Mail}, be certain to | |
867 perform all of your personal mail/news initializations before the point | |
868 at which you load Hyperbole. Otherwise, the mail/news support may not | |
869 be configured properly. For example, if you use the Emacs add-on | |
870 Supercite package, its setup should come before Hyperbole initialization. | |
871 | |
872 @cindex Hyperbole manual | |
873 @noindent | |
874 The Hyperbole Manual is included in the distribution in two forms: | |
875 | |
876 @cindex Info manual | |
877 @cindex Texinfo manual | |
878 @vindex file, man/hyperbole.info | |
879 @vindex file, man/hyperbole.texi | |
880 @example | |
881 @file{man/hyperbole.info} - online version | |
882 @file{man/hyperbole.texi} - source form | |
883 @end example | |
884 | |
885 @vindex Info-directory-list | |
886 @noindent | |
887 To add pointers to the Info version of the Hyperbole manual within your | |
888 Info directory, follow these instructions. If @var{Info-directory-list} | |
889 is bound as a variable within your Emacs (all versions except V18 and | |
890 Epoch), then you can simply set it so that <HYPERBOLE-DIR> is an element | |
891 in the list: | |
892 | |
893 @lisp | |
894 (setq Info-directory-list (cons "<HYPERBOLE-DIR>" Info-directory-list)) | |
895 @end lisp | |
896 | |
897 @noindent | |
898 Otherwise, from a shell: | |
899 | |
900 @vindex Info-directory | |
901 @example | |
902 cd to the directory given by your @var{Info-directory} variable | |
903 rm hyperbole.info*; cp <HYPERBOLE-DIR>/man/hyperbole.info* . | |
904 @end example | |
905 | |
906 @noindent | |
907 For all versions of Emacs, add an Info menu entry for the Hyperbole | |
908 manual in your Info @file{dir} file (the `*' should be placed in the | |
909 first column of the file): | |
910 | |
911 @example | |
912 * Hyperbole:: GNU Emacs-based everyday information management system. | |
913 Use @{C-h h d d@} for a demonstration. Includes context-sensitive | |
914 mouse and keyboard support, a powerful rolodex, an autonumbered | |
915 outliner with hyperlink anchors for each outline cell, and extensible | |
916 hypertext facilities including hyper-links in mail and news messages. | |
917 @end example | |
918 | |
919 @cindex invoking Hyperbole | |
920 @cindex starting Hyperbole | |
921 @cindex Hyperbole, starting | |
922 @cindex Hyperbole main menu | |
923 @kindex C-h h | |
924 @findex hyperbole | |
925 That's all there is to the installation. Once Hyperbole has been | |
926 installed for use at your site, you can invoke it with @{@kbd{C-h h}@} | |
927 or @{@kbd{M-x hyperbole @key{RET}}@} to bring up the Hyperbole main menu | |
928 in the minibuffer window. | |
929 | |
930 | |
931 @node Configuring, , Installing, Installation | |
932 @section Configuring | |
933 | |
934 @cindex configuration | |
935 @vindex file, hyperbole.el | |
936 @vindex file, hsite.el | |
937 There are many Hyperbole configuration options that may be changed by | |
938 editing the @file{hyperbole.el} and @file{hsite.el} files in the | |
939 @file{hyperbole/} directory. The following sections discuss the | |
940 configuration options most likely to be of interest to users. | |
941 | |
942 @menu | |
943 * Internal Viewers:: | |
944 * External Viewers:: | |
945 * Link Variable Substitution:: | |
946 * Button Colors:: | |
947 @end menu | |
948 | |
949 | |
950 @node Internal Viewers, External Viewers, Configuring, Configuring | |
951 @subsection Internal Viewers | |
952 @vindex hpath:display-alist | |
953 @vindex file, hsite.el | |
954 @cindex file display function | |
955 @cindex display function | |
956 @cindex internal viewer | |
957 @cindex link, display function | |
958 When given a file name, Hyperbole will by default display the file for | |
959 editing within an Emacs buffer. The @var{hpath:display-alist} variable | |
960 can be used to specify file name patterns, such as matching suffixes, | |
961 which will invoke a special Emacs Lisp function to display any matching | |
962 files within Emacs. This can be used to format raw data files for | |
963 convenient display. | |
964 | |
965 Configure the @var{hpath:display-alist} variable in @file{hsite.el}. | |
966 Its value is an association list whose elements are | |
967 (<file-name-regular-expression> . <function-of-one-arg>) pairs. Any | |
968 path whose name matches a <file-name-regular-expression> will be | |
969 displayed by calling the associated <function-of-one-arg> with the file | |
970 name as the argument.@refill | |
971 | |
972 @xref{External Viewers}, for instructions on associating file names with | |
973 external, window-system specific viewers. | |
974 | |
975 @node External Viewers, Link Variable Substitution, Internal Viewers, Configuring | |
976 @subsection External Viewers | |
977 @vindex hpath:find-alist | |
978 @vindex file, hsite.el | |
979 @cindex window system | |
980 @cindex external program | |
981 @cindex external viewer | |
982 @cindex link, viewer program | |
983 If you will be using Hyperbole under a window system, you may want to | |
984 configure the @var{hpath:find-alist} variable in @file{hsite.el} to | |
985 support hyperlinks which open files using non-Emacs tools, e.g@. a | |
986 fax reader or a bitmap viewer. | |
987 | |
988 The value of @var{hpath:find-alist} is determined when Hyperbole is | |
989 initialized based upon the current window system and the version of | |
990 Emacs in use. The value is an association list whose elements are | |
991 (<file-name-regular-expression> . <viewer-program>) pairs. Any path | |
992 whose name matches a <file-name-regular-expression> will be | |
993 displayed using the corresponding viewer-program. If a <viewer-program> | |
994 entry contains a @code{%s} string, the filename to display will be | |
995 substituted at that point within the string. Otherwise, the filename | |
996 will be appended to the <viewer-program> entry. See the "x-suffixes" | |
997 and "nextstep-suffixes" settings within the definition of | |
998 @var{hpath:find-alist} as examples.@refill | |
999 | |
1000 @node Link Variable Substitution, Button Colors, External Viewers, Configuring | |
1001 @subsection Link Variable Substitution | |
1002 @vindex hpath:variables | |
1003 @cindex environment variables | |
1004 @cindex Emacs Lisp variables | |
1005 @cindex Lisp variables | |
1006 Another variable to consider modifying in the @file{hsite.el} file is | |
1007 @var{hpath:variables}. This variable consists of a list of Emacs Lisp | |
1008 variable names, each of which may have a pathname or a list of pathnames | |
1009 as a value. Whenever a Hyperbole file or directory link button is | |
1010 created, its pathname is compared against the values in | |
1011 @var{hpath:variables}. The first match found, if any, is selected and | |
1012 its associated variable name is substituted into the link pathname, in | |
1013 place of its literal value. When the link is resolved (the button is | |
1014 activated), Hyperbole replaces each variable with the first matching | |
1015 value from this list. (Environment variables are also replaced whenever | |
1016 link paths are resolved. | |
1017 | |
1018 This permits sharing of links over wide areas, where the variable values | |
1019 may differ between link creator and link activator. The entire process | |
1020 is wholly transparent to the user; it is explained here simply to help | |
1021 you in deciding whether or not to modify the value of | |
1022 @var{hpath:variables}. | |
1023 | |
1024 @node Button Colors, , Link Variable Substitution, Configuring | |
1025 @subsection Configuring Button Colors | |
1026 @cindex XEmacs support | |
1027 @cindex Emacs 19 support | |
1028 @cindex Epoch support | |
1029 @cindex button highlighting | |
1030 @cindex button flashing | |
1031 @vindex file, hui-ep*.el | |
1032 @findex hproperty:cycle-but-color | |
1033 When Hyperbole is run under a window system together with Emacs 19, | |
1034 XEmacs or Epoch, it automatically highlights any explicit buttons in | |
1035 a buffer and makes them flash when selected. The main setting | |
1036 you may want change is the selection of a color (or style) for button | |
1037 highlighting and button flashing. See the @file{hui-*-b*.el} files for | |
1038 lists of potential colors and the code which supports this behavior. A | |
1039 call to @code{(hproperty:cycle-but-color)} within a Hyperbole | |
1040 initialization sequence in the @file{hsite.el} file changes the color | |
1041 used to highlight and flash explicit buttons. | |
1042 | |
1043 @cindex button emphasis | |
1044 @vindex hproperty:but-emphasize-p | |
1045 @vindex file, hsite.el | |
1046 Additionally, under XEmacs and Emacs 19, if @var{hproperty:but-emphasize-p} | |
1047 is set to @code{t} in @file{hsite.el}, then whenever the mouse pointer | |
1048 moves over an explicit button, it will be emphasized in a different | |
1049 color or style. This emphasis is in addition to any non-mouse-sensitive | |
1050 button highlighting. | |
1051 | |
1052 @cindex button highlighting, forcing | |
1053 @findex hproperty:but-create | |
1054 If you read in a file with explicit buttons before you load Hyperbole, | |
1055 these buttons won't be highlighted. Load Hyperbole and then use | |
1056 @code{M-x hproperty:but-create @key{RET}} to highlight the buttons in | |
1057 the current buffer. | |
1058 | |
1059 | |
1060 @node Buttons, Smart Keys, Installation, Top | |
1061 @chapter Buttons | |
1062 | |
1063 This chapter explains the user-level notion of Hyperbole buttons. | |
1064 Hyperbole buttons that are stored in files persist across Emacs | |
1065 sessions, so they provide a convenient means of linking from one | |
1066 information source to another. | |
1067 | |
1068 @menu | |
1069 * Explicit Buttons:: | |
1070 * Global Buttons:: | |
1071 * Implicit Buttons:: | |
1072 * Action Types:: | |
1073 * Button Type Precedence:: | |
1074 * Button Files:: | |
1075 * Utilizing Explicit Buttons:: | |
1076 @end menu | |
1077 | |
1078 @node Explicit Buttons, Global Buttons, Buttons, Buttons | |
1079 @section Explicit Buttons | |
1080 | |
1081 @cindex explicit button | |
1082 @cindex button, explicit | |
1083 @cindex button label | |
1084 Hyperbole creates and manages @emph{explicit buttons} which look like | |
1085 this @code{<(fake button)>} to a Hyperbole user. They are quickly | |
1086 recognizable, yet relatively non-distracting as one scans the text in | |
1087 which they are embedded. The text between the @code{<(} and | |
1088 @code{)>} delimiters is called the @dfn{button label}. Spacing between | |
1089 words within a button label is irrelevant to Hyperbole, so button labels | |
1090 may wrap across several lines without causing a problem. | |
1091 | |
1092 @cindex button data | |
1093 @cindex button attribute | |
1094 @vindex file, .hypb | |
1095 Hyperbole stores the @dfn{button data} that gives an explicit button its | |
1096 behavior, separately from the button label, in a file named @file{.hypb} | |
1097 within the same directory as the file in which the button is created. | |
1098 Thus, all files in the same directory share a common button data file. | |
1099 Button data is comprised of individual @dfn{button attribute} values. A | |
1100 user never sees this data in its raw form but may see a formatted | |
1101 version by asking for help on a button. | |
1102 | |
1103 @cindex button, moving | |
1104 @cindex moving buttons | |
1105 Explicit buttons may be freely moved about within the buffer in which | |
1106 they are created. (No present support exists for moving buttons between | |
1107 buffers). A single button may also appear multiple times within the | |
1108 same buffer; one simply copies the button label with its delimiters | |
1109 to a new location in such cases. | |
1110 | |
1111 Each explicit button is assigned an action type which determines the | |
1112 actions that it performs. @dfn{Link action types} connect buttons to | |
1113 particular types of referents. @dfn{Activation} of such buttons then | |
1114 displays the referents. | |
1115 | |
1116 @cindex linking, in-place | |
1117 @cindex Hyperbole data model | |
1118 Hyperbole does not manage referent data; this is left to the | |
1119 applications that generate the data. This means that Hyperbole | |
1120 provides in-place linking and does not require reformatting of data to | |
1121 integrate it with a Hyperbole framework. | |
1122 | |
1123 @node Global Buttons, Implicit Buttons, Explicit Buttons, Buttons | |
1124 @section Global Buttons | |
1125 | |
1126 @cindex global button | |
1127 @cindex button, global | |
1128 @cindex button label | |
1129 Access to explicit buttons depends upon the information on your screen | |
1130 since they are embedded within particular buffers. Sometimes it is | |
1131 useful to activate buttons without regard to the information with which | |
1132 you are presently working. In such instances, you use @dfn{global | |
1133 buttons}, which are simply explicit buttons which may be activated or | |
1134 otherwise operated upon by entering their labels when they are prompted | |
1135 for, rather than selecting the buttons within a buffer. | |
1136 | |
1137 If you want a permanent link to a file section that you can follow at | |
1138 any time, you can use a global button. Or what about an Emacs keyboard | |
1139 macro that you use frequently? Create an @code{exec-kbd-macro} button | |
1140 with an easy to type name and then you can easily activate it whenever | |
1141 the need arises. | |
1142 | |
1143 @node Implicit Buttons, Action Types, Global Buttons, Buttons | |
1144 @section Implicit Buttons | |
1145 | |
1146 @cindex button, implicit | |
1147 @cindex implicit button | |
1148 Implicit buttons are those defined by the natural structure of a | |
1149 document. They are identified by contextual patterns which limit the | |
1150 locations or states in which they can appear. Their behavior is | |
1151 determined by one or more actions which they trigger when activated. An | |
1152 action is derived from either a Hyperbole action type specification, | |
1153 @ref{Action Types}, or an Emacs Lisp function. Implicit | |
1154 button types may use the same action types that explicit buttons do. | |
1155 | |
1156 @vindex file, hibtypes.el | |
1157 @cindex context | |
1158 Implicit buttons never have any button data associated with them. They | |
1159 are recognized in context based on predicate matches defined within | |
1160 implicit button types. For example, Hyperbole recognizes file names | |
1161 enclosed in double quotes and can quickly display their associated files | |
1162 in response to simple mouse clicks. | |
1163 | |
1164 @cindex ibtypes, list of | |
1165 @noindent | |
1166 See @file{hibtypes.el} for complete examples. Standard implicit button | |
1167 types include (in alphabetical order): | |
1168 | |
1169 @table @code | |
1170 | |
1171 @item annot-bib | |
1172 @findex ibtypes::annot-bib | |
1173 @cindex bibliography | |
1174 @cindex reference | |
1175 Displays annotated bibliography entries referenced internally, delimeters = []. | |
1176 References must be delimited by square brackets, must begin with a | |
1177 word constituent character, and must not be in buffers whose | |
1178 names begin with a ' ' or '*' character. | |
1179 | |
1180 @item completion | |
1181 @findex ibtypes::completion | |
1182 @cindex completion | |
1183 Inserts completion at point into minibuffer or other window. | |
1184 | |
1185 @item dir-summary | |
1186 @findex ibtypes::dir-summary | |
1187 @vindex file, MANIFEST | |
1188 @vindex file, DIR | |
1189 Detects filename buttons in files named "MANIFEST" or "DIR". | |
1190 Displays selected files. | |
1191 Each file name must be at the beginning of the line and must be followed | |
1192 by one or more spaces and then another non-space, non-parenthesis, non-brace | |
1193 character. | |
1194 | |
1195 @item doc-id | |
1196 @findex ibtypes::doc-id | |
1197 @cindex online library | |
1198 @cindex document identifier | |
1199 Displays an index entry for a site-specific document given its id. Ids | |
1200 must be delimited by 'doc-id-start' and 'doc-id-end' and must match the | |
1201 function given by 'doc-id-p'. This permits creation of catalogued | |
1202 online libraries. See @file{$@{hyperb:dir@}/hib-doc-id.el} for more | |
1203 information.@refill | |
1204 | |
1205 @item elisp-compiler-msg | |
1206 @findex ibtypes::elisp-compiler-msg | |
1207 @cindex byte compiler error | |
1208 @cindex Emacs Lisp compiler error | |
1209 @cindex compiler error | |
1210 Jumps to source code for definition associated with byte-compiler error | |
1211 message. Works when activated anywhere within an error line. | |
1212 | |
1213 @item debugger-source | |
1214 @findex ibtypes::debugger-source | |
1215 @cindex gdb | |
1216 @cindex dbx | |
1217 @cindex xdb | |
1218 @cindex stack frame | |
1219 @cindex breakpoint | |
1220 @cindex source line | |
1221 Jumps to source line associated with debugger stack frame or breakpoint lines. | |
1222 This works with gdb, dbx, and xdb. Such lines are recognized in any buffer. | |
1223 | |
1224 @item grep-msg | |
1225 @findex ibtypes::grep-msg | |
1226 @cindex grep | |
1227 @cindex compiler error | |
1228 Jumps to line associated with grep or compilation error msgs. | |
1229 Messages are recognized in any buffer. | |
1230 | |
1231 @item hyp-address | |
1232 @findex ibtypes::hyp-address | |
1233 @cindex Hyperbole mail list | |
1234 Turns a Hyperbole e-mail list address into an implicit button which | |
1235 inserts Hyperbole environment information. | |
1236 Useful when sending mail to a Hyperbole mail list. See also the | |
1237 documentation for @code{actypes::hyp-config}. | |
1238 | |
1239 @item hyp-source | |
1240 @findex ibtypes::hyp-source | |
1241 @cindex Hyperbole report | |
1242 Turns source location entries in Hyperbole reports into buttons that jump to the associated location. | |
1243 | |
1244 @item Info-node | |
1245 @findex ibtypes::Info-node | |
1246 @cindex Info node | |
1247 Makes "(file)node" buttons display the associated Info node. | |
1248 | |
1249 @item kbd-key | |
1250 @findex ibtypes::kbd-key | |
1251 @cindex key sequence | |
1252 Executes a key sequence delimited by curly braces. | |
1253 Key sequences should be in human readable form, e.g@. @{@kbd{C-b}@}. | |
1254 Forms such as @{@}, @{@}, and @{^b@} will not be recognized. | |
1255 | |
1256 @item klink | |
1257 @findex ibtypes::klink | |
1258 @cindex klink | |
1259 @cindex koutline link | |
1260 @cindex kcell link | |
1261 Follows a link delimited by <> to a koutline cell. | |
1262 See documentation for @code{actypes::link-to-kotl} for valid link | |
1263 specifiers. | |
1264 | |
1265 @item mail-address | |
1266 @findex ibtypes::mail-address | |
1267 @cindex e-mail address | |
1268 @cindex rolodex address | |
1269 @cindex address | |
1270 If on an e-mail address in a specific buffer type, mail to that address | |
1271 in another window. Applies to the rolodex match buffer, any buffer | |
1272 attached to a file in @var{rolo-file-list}, or any buffer with @file{mail} | |
1273 or @file{rolo} (case-insensitive) within its name. | |
1274 | |
1275 @item man-apropos | |
1276 @findex ibtypes::man-apropos | |
1277 @item UNIX manual | |
1278 @item man pages | |
1279 @item man apropos | |
1280 Makes man apropos entries display associated man pages when selected. | |
1281 | |
1282 @item patch-msg | |
1283 @findex ibtypes::patch-msg | |
1284 @cindex patch output | |
1285 Jumps to source code associated with output from the @code{patch} | |
1286 program. Patch applies diffs to source code. | |
1287 | |
1288 @item pathname | |
1289 @findex ibtypes::pathname | |
1290 @findex hpath:at-p | |
1291 @findex hpath:find | |
1292 @vindex hpath:suffixes | |
1293 @cindex ange-ftp | |
1294 @cindex efs | |
1295 @cindex pathname | |
1296 @cindex remote path | |
1297 @cindex filename | |
1298 @cindex link, pathname | |
1299 Makes a delimited, valid pathname display the path entry. | |
1300 Also works for delimited and non-delimited ange-ftp and efs pathnames. | |
1301 See @code{hpath:at-p} function documentation for possible delimiters. | |
1302 See @var{hpath:suffixes} variable documentation for suffixes that are | |
1303 added to or removed from pathname when searching for a valid match. | |
1304 See @code{hpath:find} function documentation and | |
1305 @var{hpath:display-alist} and @var{hpath:find-alist} variable | |
1306 documentation for special file display options. | |
1307 | |
1308 @item rfc | |
1309 @findex ibtypes::rfc | |
1310 @cindex Internet RFC | |
1311 @cindex Request For Comment | |
1312 @cindex RFC | |
1313 @cindex ange-ftp | |
1314 @cindex efs | |
1315 Retrieves and displays an Internet rfc referenced at point. | |
1316 Requires ange-ftp or efs when needed for remote retrievals. The | |
1317 following formats are recognized: RFC822, rfc-822, and RFC 822. The | |
1318 @var{hpath:rfc} variable specifies the location from which to retrieve | |
1319 RFCs." | |
1320 | |
1321 @item rfc-toc | |
1322 @findex ibtypes::rfc-toc | |
1323 @cindex Internet RFC | |
1324 @cindex Request For Comment | |
1325 @cindex RFC | |
1326 @cindex table of contents | |
1327 Summarizes contents of an Internet rfc from anywhere within rfc buffer. | |
1328 Each line in summary may be selected to jump to section. | |
1329 | |
1330 @item text-toc | |
1331 @findex ibtypes::text-toc | |
1332 @cindex table of contents | |
1333 @cindex toc implicit button type | |
1334 Jumps to the text file section referenced by a table of contents entry | |
1335 at point. File name must contain @file{README} and there must be a | |
1336 `Table of Contents' or `Contents' label on a line by itself (it may | |
1337 begin with an asterisk), preceding the table of contents. Each toc | |
1338 entry must begin with some whitespace followed by one or more asterisk | |
1339 characters. Each file section name line must start with one or more | |
1340 asterisk characters at the very beginning of the line. | |
1341 | |
1342 @item www-url | |
1343 @findex ibtypes::www-url | |
1344 @cindex URL | |
1345 @cindex World-wide Web | |
1346 @cindex WWW | |
1347 @cindex Action Key, web browsing | |
1348 @kindex Action Key, web browsing | |
1349 @vindex action-key-url-function | |
1350 When not in a w3 browser buffer, follow any non-ftp url (link) at point. | |
1351 The variable, @var{action-key-url-function}, can be used to customize | |
1352 the url browser that is used. | |
1353 @end table | |
1354 | |
1355 The Hyperbole Smart Keys offer extensive additional context-sensitive | |
1356 point-and-click type behavior beyond these standard implicit button | |
1357 types. @xref{Smart Keys}. | |
1358 | |
1359 | |
1360 @node Action Types, Button Type Precedence, Implicit Buttons, Buttons | |
1361 @section Action Types | |
1362 | |
1363 @cindex action type | |
1364 @cindex argument, use | |
1365 @cindex action | |
1366 @dfn{Action types} provide action procedures that specify button behavior. | |
1367 The arguments needed by an action type are prompted for at button creation | |
1368 time. When a button is activated, the stored arguments are fed to the | |
1369 action type's @dfn{action} body to achieve the desired result. Hyperbole | |
1370 handles all of this transparently. | |
1371 | |
1372 @cindex actypes, list of | |
1373 @noindent | |
1374 Standard action types in alphabetical order include: | |
1375 | |
1376 @table @code | |
1377 @item annot-bib | |
1378 @findex actypes::annot-bib | |
1379 Follows internal ref KEY within an annotated bibliography, delimiters=[]. | |
1380 | |
1381 @item completion | |
1382 @findex actypes::completion | |
1383 Inserts completion at point into minibuffer or other window. | |
1384 Unless at end of buffer or if completion has already been inserted, then | |
1385 deletes completions window. | |
1386 | |
1387 @item eval-elisp | |
1388 @findex actypes::eval-elisp | |
1389 Evaluates a Lisp expression LISP-EXPR. | |
1390 | |
1391 @item exec-kbd-macro | |
1392 @findex actypes::exec-kbd-macro | |
1393 Executes KBD-MACRO REPEAT-COUNT times. | |
1394 KBD-MACRO may be a string of editor command characters or a function symbol. | |
1395 Optional REPEAT-COUNT nil means execute once, zero means repeat until | |
1396 error. | |
1397 | |
1398 @item exec-shell-cmd | |
1399 @findex actypes::exec-shell-cmd | |
1400 Executes a SHELL-CMD string asynchronously. | |
1401 Optional non-nil second argument INTERNAL-CMD means do not display the shell | |
1402 command line executed. Optional non-nil third argument KILL-PREV means | |
1403 kill last output to shell buffer before executing SHELL-CMD. | |
1404 | |
1405 @item exec-window-cmd | |
1406 @findex actypes::exec-window-cmd | |
1407 Executes an external window-based SHELL-CMD string asynchronously. | |
1408 | |
1409 @item hyp-config | |
1410 @findex actypes::hyp-config | |
1411 Inserts Hyperbole configuration info at end of optional OUT-BUF or current. | |
1412 | |
1413 @item hyp-request | |
1414 @findex actypes::hyp-request | |
1415 Inserts Hyperbole mail list request help into optional OUT-BUF or current. | |
1416 | |
1417 @item hyp-source | |
1418 @findex actypes::hyp-source | |
1419 Displays a buffer or file from a line beginning with 'hbut:source-prefix'. | |
1420 | |
1421 @item kbd-key | |
1422 @findex actypes::kbd-key | |
1423 Executes the function binding for KEY-SEQUENCE, delimited by @{@}. | |
1424 Returns t if a KEY-SEQUENCE has a binding, else nil. | |
1425 | |
1426 @item link-to-buffer-tmp | |
1427 @findex actypes::link-to-buffer-tmp | |
1428 Displays a BUFFER in another window. | |
1429 Link is generally only good for current Emacs session. | |
1430 Use 'link-to-file' instead for a permanent link. | |
1431 | |
1432 @item link-to-directory | |
1433 @findex actypes::link-to-directory | |
1434 Displays a DIRECTORY in Dired mode in another window. | |
1435 | |
1436 @item link-to-doc | |
1437 @findex actypes::link-to-doc | |
1438 Displays online version of a document given by DOC-ID, in other window. | |
1439 If the online version of a document is not found in | |
1440 @var{doc-id-indices}, an error is signalled. | |
1441 | |
1442 @item link-to-ebut | |
1443 @findex actypes::link-to-ebut | |
1444 Performs action given by another button, specified by KEY and KEY-FILE. | |
1445 | |
1446 @item link-to-elisp-doc | |
1447 @findex actypes::link-to-elisp-doc | |
1448 Displays documentation for FUNC-SYMBOL. | |
1449 | |
1450 @item link-to-file | |
1451 @findex actypes::link-to-file | |
1452 Displays a PATH in another window scrolled to optional POINT. | |
1453 With POINT, buffer is displayed with POINT at the top of the window. | |
1454 | |
1455 @item link-to-file-line | |
1456 @findex actypes::link-to-file-line | |
1457 Displays a PATH in another window scrolled to LINE-NUM. | |
1458 | |
1459 @item link-to-kcell | |
1460 @findex actypes::link-to-kcell | |
1461 Displays FILE with kcell given by CELL-REF at the top of the window. | |
1462 CELL-REF may be a kcell's display label or its permanant idstamp. | |
1463 If FILE is nil, the current buffer is used. | |
1464 If CELL-REF is nil, the first cell in the view is shown. | |
1465 | |
1466 @item link-to-kotl | |
1467 @findex actypes::link-to-kotl | |
1468 Displays at the top of another window the referent pointed to by LINK. | |
1469 LINK may be of any of the following forms, with or without delimiters: | |
1470 @example | |
1471 < pathname [, cell-ref] > | |
1472 < [-!&] pathname > | |
1473 < @@ cell-ref > | |
1474 @end example | |
1475 | |
1476 @noindent | |
1477 See documentation for @code{kcell:ref-to-id} for valid cell-ref formats. | |
1478 | |
1479 | |
1480 @item link-to-Info-node | |
1481 @findex actypes::link-to-Info-node | |
1482 Displays an Info NODE in another window. | |
1483 NODE must be a string of the form '(file)nodename'. | |
1484 | |
1485 @item link-to-mail | |
1486 @findex actypes::link-to-mail | |
1487 Displays mail msg with MAIL-MSG-ID from MAIL-FILE in other window. | |
1488 See documentation for the variable @var{hmail:init-function} for | |
1489 information on how to specify a mail reader to use. | |
1490 | |
1491 @item link-to-regexp-match | |
1492 @findex actypes::link-to-regexp-match | |
1493 Finds REGEXP's Nth occurrence in FILE and displays location at window top. | |
1494 Returns t if found, signals an error if not. | |
1495 | |
1496 @item link-to-rfc | |
1497 @findex actypes::link-to-rfc | |
1498 Retrieves and displays an Internet rfc given by RFC-NUM. | |
1499 RFC-NUM may be a string or an integer. Requires ange-ftp or efs for | |
1500 remote retrievals. | |
1501 | |
1502 @item link-to-string-match | |
1503 @findex actypes::link-to-string-match | |
1504 Finds STRING's Nth occurrence in FILE and displays location at window top. | |
1505 Returns t if found, nil if not. | |
1506 | |
1507 @item man-show | |
1508 @findex actypes::man-show | |
1509 Displays man page on TOPIC, which may be of the form @code{<command>(<section>}). | |
1510 | |
1511 @item rfc-toc | |
1512 @findex actypes::rfc-toc | |
1513 Computes and displays summary of an Internet rfc in BUF-NAME. | |
1514 Assumes point has already been moved to start of region to summarize. | |
1515 Optional OPOINT is point to return to in BUF-NAME after displaying summary. | |
1516 | |
1517 @item text-toc | |
1518 @findex actypes::text-toc | |
1519 @cindex table of contents | |
1520 @cindex toc action type | |
1521 Jumps to the text file SECTION referenced by a table of contents entry | |
1522 at point. | |
1523 | |
1524 @item www-url | |
1525 @findex actypes::www-url | |
1526 @cindex URL | |
1527 @cindex World-wide Web | |
1528 @cindex WWW | |
1529 @vindex action-key-url-function | |
1530 Follows a link given by URL. | |
1531 The variable, @var{action-key-url-function}, can be used to customize | |
1532 the url browser that is used. | |
1533 @end table | |
1534 | |
1535 @cindex action | |
1536 @vindex hui:ebut-prompt-for-action | |
1537 The use of action types provides a convenient way of specifying button | |
1538 behavior without the need to know how to program. Expert users who are | |
1539 familiar with Emacs Lisp, however, may find that they often want to | |
1540 tailor button actions in a variety of ways not easily captured within a | |
1541 type system. In such cases, @var{hui:ebut-prompt-for-action} should be | |
1542 set non-nil. This will cause Hyperbole to prompt for an action to | |
1543 override the button's action type at each explicit button creation. For | |
1544 those cases where the action type is sufficient, a nil value should be | |
1545 entered for the action. An action may be any Lisp form that may be | |
1546 evaluated. | |
1547 | |
1548 @node Button Type Precedence, Button Files, Action Types, Buttons | |
1549 @section Button Type Precedence | |
1550 | |
1551 @cindex button precedence | |
1552 @cindex button label overlap | |
1553 Explicit buttons always take precedence over implicit buttons. Thus, if | |
1554 a button selection is made which falls within both an explicit and | |
1555 implicit button, only the explicit button will be selected. Explicit | |
1556 button labels are not allowed to overlap; Hyperbole's behavior in such | |
1557 cases is undefined. | |
1558 | |
1559 @cindex ibtype, evaluation order | |
1560 If there is no explicit button at point during a selection request, then | |
1561 each implicit button type predicate is tested in turn until one returns | |
1562 non-nil or all are exhausted. Since two implicit button types may have | |
1563 overlapping domains (those contexts in which their predicates are true), | |
1564 only the first matching type is used. The type predicates are tested | |
1565 in @strong{reverse} order of definition, i.e@. most recently entered | |
1566 types are tested first, so that personal types defined after standard | |
1567 system types take precedence. It is important to keep this order in | |
1568 mind when defining new implicit button types. By making their match | |
1569 predicates as specific as possible, one can minimize any overlapping of | |
1570 implicit button type domains. | |
1571 | |
1572 @cindex type redefinition | |
1573 Once a type name is defined, its precedence relative to other types | |
1574 remains the same even if you redefine the body of the type, as long as | |
1575 you don't change its name. This allows incremental modifications to | |
1576 types without having to worry about shifts in type precedence. | |
1577 @xref{Creating Types}, for information on how to develop | |
1578 or modify types. | |
1579 | |
1580 @node Button Files, Utilizing Explicit Buttons, Button Type Precedence, Buttons | |
1581 @section Button Files | |
1582 | |
1583 @cindex button files | |
1584 It is often convenient to create lists of buttons that can be used as | |
1585 menus to provide centralized access to distributed information pools or | |
1586 for other purposes. These files can serve as useful roadmaps to help | |
1587 efficiently guide a user through both unfamiliar and highly familiar | |
1588 information spaces. Files that are created specifically for this | |
1589 purpose, we call @dfn{button files}. | |
1590 | |
1591 @vindex hbmap:filename | |
1592 @cindex button file, personal | |
1593 @cindex button file, directory | |
1594 The Hyperbole menu system provides quick access to two types of these | |
1595 button files: personal and directory-specific, through the ButFile menu. | |
1596 (The variable, @var{hbmap:filename}, contains the base name of these | |
1597 standard button files. Its standard value is @file{HYPB}.) | |
1598 | |
1599 @vindex dir, ~/.hyperb | |
1600 @vindex hbmap:dir-user | |
1601 @cindex global button | |
1602 A personal button file may serve as a user's own roadmap to frequently | |
1603 used resources. Selection of the ButFile/PersonalFile menu item | |
1604 displays this file for editing. The default personal button file is | |
1605 stored within the directory given by the @var{hbmap:dir-user} variable | |
1606 whose standard value is @file{~/.hyperb}. The standard Hyperbole | |
1607 configuration also appends all global buttons to the end of this file, | |
1608 one per line, as they are created. So you can edit or annotate them | |
1609 within the file. | |
1610 | |
1611 A directory-specific button file may exist for each file system | |
1612 directory. Such files are useful for explaining the contents of | |
1613 directories and pointing readers to particular highlights within the | |
1614 directories. Selection of the ButFile/DirFile menu item displays the | |
1615 button file for the current directory; this provides an easy means of | |
1616 updating this file when working on a file within the same directory. | |
1617 If you want to view some other directory-specific button file, simply | |
1618 use the normal Emacs file finding commands. | |
1619 | |
1620 One might suggest that menu quick access be provided for group-specific | |
1621 and site-specific button files. Instead, link buttons to such things | |
1622 should be placed at the top of your personal button file. This provides | |
1623 a more flexible means of quick access. | |
1624 | |
1625 @node Utilizing Explicit Buttons, , Button Files, Buttons | |
1626 @section Utilizing Explicit Buttons | |
1627 | |
1628 Explicit buttons are a fundamental building block for creating personal | |
1629 or organizational hypertext networks with Hyperbole. This section | |
1630 summarizes the user-level operations available for managing these | |
1631 buttons. | |
1632 | |
1633 @menu | |
1634 * Creation:: | |
1635 * Renaming:: | |
1636 * Deletion:: | |
1637 * Modification:: | |
1638 * Location:: | |
1639 * Buttons in Mail:: | |
1640 * Buttons in News:: | |
1641 @end menu | |
1642 | |
1643 @node Creation, Renaming, Utilizing Explicit Buttons, Utilizing Explicit Buttons | |
1644 @subsection Creation | |
1645 | |
1646 @menu | |
1647 * By Dragging:: Creation Via Action Key Drags | |
1648 * By Menu:: Creation Via Menus | |
1649 @end menu | |
1650 | |
1651 @node By Dragging, By Menu, Creation, Creation | |
1652 @subsubsection Creation Via Action Key Drags | |
1653 | |
1654 @cindex explicit button, creation | |
1655 @cindex button, creation | |
1656 @cindex link, creation | |
1657 @cindex drag | |
1658 @cindex Action Key drag | |
1659 The most efficient way to create an explicit button interactively is to | |
1660 use the mouse Action Key to drag from a button source window to a window | |
1661 showing its link referent. More specifically, you should split your | |
1662 current Emacs frame into two windows: one which contains the point at | |
1663 which you want a button to be inserted and another which shows the point | |
1664 to which you want to link. Depress the mouse Action Key at the point at | |
1665 which the button should be inserted, drag to the other window and | |
1666 release it at the point of the link referent. The process becomes quite | |
1667 simple with a little practice. (@xref{By Menu, Creation Via Menus}, for a | |
1668 more detailed explanation of the explicit button creation process.) | |
1669 | |
1670 Hyperbole uses the link referent context to determine the type of link | |
1671 to make. If there are a few different types of links which are | |
1672 applicable from the context, you will be prompted with a list of the | |
1673 types. Simply use the Action Key or the first letter of the link | |
1674 type to select one of the type names and to finish the link creation. | |
1675 Hyperbole will then insert explicit button delimiters around the button | |
1676 label and will display a message in the minibuffer indicating both the | |
1677 button name and its action/link type. | |
1678 | |
1679 @kindex M-o | |
1680 @kindex C-u M-o | |
1681 @kindex C-x o | |
1682 @findex hkey-operate | |
1683 If you run Emacs under a window system, you can emulate an Action Key | |
1684 drag from the keyboard by: hitting @{@kbd{M-o}@}, the | |
1685 @code{hkey-operate} command, at the button source location, moving | |
1686 to the link destination, e.g@. with @{@kbd{C-x o}@}, and then hitting | |
1687 @{@kbd{M-o}@} again. This simulates a depress and then release of the | |
1688 Action Key. @{@kbd{C-u M-o}@} emulates drags of the Assist Key. | |
1689 This will not work when Hyperbole is run from a dumb terminal Emacs | |
1690 session since drag actions are not supported without a window system. | |
1691 | |
1692 @page | |
1693 @node By Menu, , By Dragging, Creation | |
1694 @subsubsection Creation Via Menus | |
1695 | |
1696 You can alternatively use the Hyperbole menus to create explicit | |
1697 buttons. First, mark a short region of text in any fashion allowed by | |
1698 GNU Emacs and then select the Hyperbole menu item sequence, Ebut/Create. | |
1699 You will be prompted for the button's label with the marked region as | |
1700 the default. If you accept the default and enter the rest of the | |
1701 information you are prompted for, the button will be created within the | |
1702 current buffer and Hyperbole will surround the marked region with | |
1703 explicit button delimiters to indicate success. | |
1704 | |
1705 If you do not mark a region before invoking the button create command, | |
1706 you will be prompted for both a label and a target buffer for the button | |
1707 and the delimited label text will be inserted into the target buffer | |
1708 after a successful button creation. | |
1709 | |
1710 After Hyperbole has the button label and its target buffer, it will | |
1711 prompt you for an action type for the button. Use the @{@kbd{?}@} | |
1712 completion help key to see the available types. The type selected | |
1713 determines any following values for which you will be prompted. | |
1714 | |
1715 @cindex button instance | |
1716 @cindex instance number | |
1717 If a previous button with the same label exists in the same buffer, | |
1718 Hyperbole will add an @dfn{instance number} to the label when it adds | |
1719 the delimiters so that the name is unique. Thus, you don't have to | |
1720 worry about accidental button name conflicts. If you want the same | |
1721 button to appear in multiple places within the buffer, just enter the | |
1722 label again and delimit it yourself. Hyperbole will interpret all | |
1723 occurrences of the same delimited label within a buffer as the same | |
1724 button. | |
1725 | |
1726 @cindex link, creation | |
1727 If you create link buttons using the Hyperbole menus, the best technique | |
1728 is to place on screen both the source buffer for the button and the | |
1729 buffer to which it will link. Mark the region of text to use for your | |
1730 button label, invoke the button create command from the menu, choose an | |
1731 action type which begins with @code{link-to-} and then use the direct | |
1732 selection techniques mentioned in @ref{Entering Arguments}, to select | |
1733 the link referent. | |
1734 | |
1735 | |
1736 @node Renaming, Deletion, Creation, Utilizing Explicit Buttons | |
1737 @subsection Renaming | |
1738 | |
1739 @cindex explicit button, renaming | |
1740 @cindex button, renaming | |
1741 Once an explicit button has been created, its label text must be | |
1742 treated specially. Any inter-word spacing within the label may be | |
1743 freely changed, as may happen when a paragraph is refilled. But a | |
1744 special command must be invoked to rename it. | |
1745 | |
1746 The rename command operates in two different ways. If point is within a | |
1747 button label when it is invoked, it will tell you to edit the button | |
1748 label and then invoke the rename command again. The second invocation | |
1749 will actually rename the button. If instead the command is originally | |
1750 invoked outside of any explicit button, it will prompt for the button | |
1751 label to replace and the label to replace it with and then will perform | |
1752 the rename. All occurrences of the same button in the buffer will be | |
1753 renamed, so you need locate only one occurrence of the button. | |
1754 | |
1755 @vindex file, .~/.emacs | |
1756 @vindex file, hsite.el | |
1757 @kindex C-c C-r | |
1758 The rename command may be invoked from the Hyperbole menu via | |
1759 Ebut/Rename. A faster method is to use a key bound to the | |
1760 @code{hui:ebut-rename} command. Your site installation may include such | |
1761 a key. @{@kbd{C-h w hui:ebut-rename @key{RET}}@} should show you any | |
1762 key it is on. If no key binding has been established or if you prefer | |
1763 one of your own, simply bind it within your @file{~/.emacs} file. We | |
1764 recommend the @{@kbd{C-c C-r}@} key, as in: @code{(global-set-key | |
1765 "\C-c\C-r" 'hui:ebut-rename)}. | |
1766 | |
1767 | |
1768 @node Deletion, Modification, Renaming, Utilizing Explicit Buttons | |
1769 @subsection Deletion | |
1770 | |
1771 @cindex explicit button, deleting | |
1772 @cindex button, deleting | |
1773 Ebut/Delete works similarly to the Rename command but deletes the | |
1774 selected button. The button's delimiters are removed to confirm the | |
1775 delete. If the delete command is invoked with a prefix argument, then | |
1776 both the button label and the delimiters are removed as confirmation. | |
1777 | |
1778 @vindex hui:ebut-delete-confirm-p | |
1779 Presently there is no way to recover a deleted button; it must | |
1780 be recreated. Therefore, the @var{hui:ebut-delete-confirm-p} variable | |
1781 is true by default, causing Hyperbole to require confirmation before | |
1782 interactively deleting explicit buttons. Set it to nil if you prefer no | |
1783 confirmation. | |
1784 | |
1785 @node Modification, Location, Deletion, Utilizing Explicit Buttons | |
1786 @subsection Modification | |
1787 | |
1788 @cindex explicit button, modifying | |
1789 @cindex button, modifying | |
1790 @cindex Smart Mouse Key drag | |
1791 Ebut/Modify prompts you with each of the elements from the button's | |
1792 data list and allows you to modify each in turn. | |
1793 | |
1794 There is a quicker way to modify explicit link buttons. Simply drag with the | |
1795 mouse Action Key from within the button label to a link destination in a | |
1796 different window, just as you would when creating a new button with a mouse | |
1797 drag. Remember that drags may also be emulated from the keyboard. | |
1798 @xref{Creation}. | |
1799 | |
1800 @node Location, Buttons in Mail, Modification, Utilizing Explicit Buttons | |
1801 @subsection Location | |
1802 | |
1803 @cindex explicit button, summarizing | |
1804 @cindex button, summarizing | |
1805 @cindex button, help | |
1806 The Ebut/Help menu can be used to summarize a single explicit button or | |
1807 all such buttons within a single buffer. The buttons summarized may | |
1808 then be activated directly from the summary. | |
1809 | |
1810 Ebut/Help/BufferButs summarizes the explicit buttons in the order in | |
1811 which they appear in the buffer. Ebut/Help/CurrentBut summarizes only | |
1812 the button at point. Ebut/Help/OrderedButs summarizes the buttons in | |
1813 alphabetical order. All of these summary commands eliminate duplicate | |
1814 instances of buttons from their help displays. | |
1815 | |
1816 @cindex explicit button, searching | |
1817 @cindex button, searching | |
1818 Ebut/Search prompts for a search pattern and searches across all the | |
1819 locations in which you have previously created explicit buttons. It | |
1820 asks you whether to match to any part of a button label or only complete | |
1821 labels. It then displays a list of button matches with a single line of | |
1822 surrounding context from their sources. Any button in the match list | |
1823 may be activated as usual. An Action Key press on the surrounding context | |
1824 jumps to the associated source line or a press on the filename preceding | |
1825 the matches jumps to the file without selecting a particular line. | |
1826 | |
1827 There are presently no user-level facilities for globally locating buttons | |
1828 created by others or for searching on particular button attributes. | |
1829 | |
1830 @node Buttons in Mail, Buttons in News, Location, Utilizing Explicit Buttons | |
1831 @subsection Buttons in Mail | |
1832 | |
1833 @kindex C-x m | |
1834 @findex mail | |
1835 Hyperbole allows the embedding of buttons within electronic mail | |
1836 messages that are composed in Emacs with the standard @code{(mail)} | |
1837 command, normally bound to @{@kbd{C-x m}@} or with other Emacs-based | |
1838 mail composing functions. An enhanced mail reader can then be used | |
1839 to activate the buttons within messages just like any other buttons. | |
1840 | |
1841 @cindex button, mailing | |
1842 @cindex button, posting | |
1843 @cindex mailing buttons | |
1844 @cindex posting buttons | |
1845 @cindex mail reader | |
1846 @cindex mailer initialization | |
1847 @cindex RMAIL | |
1848 @cindex VM | |
1849 @cindex PIEmail | |
1850 @cindex MH-e | |
1851 @cindex GNUS | |
1852 @cindex USENET | |
1853 @cindex news | |
1854 @vindex file, hmail.el | |
1855 Hyperbole automatically supports the following mail readers: Rmail, | |
1856 @ref{Rmail,,,emacs, the GNU Emacs Manual}, VM, @ref{Introduction,,,vm, | |
1857 the VM Manual}, and PIEmail, and MH-e. Button inclusion and activation | |
1858 within USENET news articles is also supported in the same fashion via | |
1859 the GNUS news reader, @ref{Introduction,,,gnus, the GNUS Manual}, if | |
1860 available at your site. (The @file{hmail.el} file provides a | |
1861 generalized interface that can be used to hook in other mail or news | |
1862 readers if the necessary interface functions are written.) | |
1863 | |
1864 @vindex mail-yank-original | |
1865 @kindex C-c C-y | |
1866 @cindex mail inclusion | |
1867 All explicit buttons to be mailed must be created within the outgoing | |
1868 message buffer. There is no present support for including text from | |
1869 other buffers or files which contain explicit buttons, except for the | |
1870 ability to yank the contents of a message being replied to, together | |
1871 with all of its buttons, via the @code{(mail-yank-original)} command | |
1872 bound to @{@kbd{C-c C-y}@}. From a user's perspective, buttons are | |
1873 created in precisely the same way as in any other buffer. They also | |
1874 appear just like any other buttons to both the message sender and the | |
1875 reader who uses the Hyperbole enhanced readers. Button operation may be | |
1876 tested any time before a message is sent. A person who does not use | |
1877 Hyperbole enhanced mail readers can still send messages with embedded | |
1878 buttons since mail composing is independent of any mail reader | |
1879 choice. | |
1880 | |
1881 Hyperbole buttons embedded within received mail messages act just like | |
1882 any other buttons. The mail does not contain any of the action type | |
1883 definitions used by the buttons, so the receiver must have these or she | |
1884 will receive an error when she activates the buttons. Buttons which | |
1885 appear in message @emph{Subject} lines are copied to summary buffers | |
1886 whenever such summaries are generated. Thus, they may be activated from | |
1887 either the message or summary buffers. | |
1888 | |
1889 Nothing bad will happen if a mail message with explicit buttons is sent | |
1890 to a non-Hyperbole user. The user will simply see the text | |
1891 of the message followed by a series of lines of button data at its end. | |
1892 Hyperbole mail users never see this data in its raw form. | |
1893 | |
1894 @vindex smail:comment | |
1895 @cindex mail comment | |
1896 In order to alert readers of your mail messages that you can utilize | |
1897 Hyperbole mail buttons, the system automatically inserts a comment into | |
1898 each mail message that you compose to announce this fact. The variable, | |
1899 @var{smail:comment} controls this behavior. See its documentation for | |
1900 technical details. By default, it produces a message of the form: | |
1901 | |
1902 @example | |
1903 Comments: Hyperbole mail buttons accepted, vX.XX. | |
1904 @end example | |
1905 | |
1906 @vindex file, ~/.emacs | |
1907 @noindent | |
1908 where the X's indicate your Hyperbole version number. You can cut this | |
1909 out of particular messages before you send them. If you don't want any | |
1910 message at all, add the following to your @file{~/.emacs} file before | |
1911 the point at which you load Hyperbole. | |
1912 | |
1913 @lisp | |
1914 (setq smail:comment nil) | |
1915 @end lisp | |
1916 | |
1917 @cindex actype, link-to-mail | |
1918 A final mail-related facility provided by Hyperbole is the ability to | |
1919 save a pointer to a received mail message by creating an explicit button | |
1920 with a @code{link-to-mail} action type. When prompted for the mail | |
1921 message to link to, if you press the Action Key on an Rmail message, the | |
1922 appropriate parameter will be copied to the argument prompt, as | |
1923 described in @ref{Entering Arguments}. | |
1924 | |
1925 | |
1926 @node Buttons in News, , Buttons in Mail, Utilizing Explicit Buttons | |
1927 @subsection Buttons in News | |
1928 | |
1929 @cindex button, posting | |
1930 @cindex news reader/poster | |
1931 @cindex posting news | |
1932 @cindex GNUS | |
1933 @cindex USENET | |
1934 @vindex file, hgnus.el | |
1935 @vindex file, hsite.el | |
1936 Explicit buttons may be embedded within outgoing USENET news articles | |
1937 and may be activated from news articles that are being read. This | |
1938 support is available for the GNUS news reader. It is enabled by default | |
1939 within @file{hsite.el} by autoloading the @file{hgnus.el} file. | |
1940 | |
1941 All Hyperbole support should work just as it does when reading or | |
1942 sending mail. @xref{Buttons in Mail}. When reading news, buttons which | |
1943 appear in message @emph{Subject} lines may be activated within the GNUS | |
1944 subject buffer as well as the article buffer. When posting news, the | |
1945 *post-news* buffer is used for outgoing news articles rather than the | |
1946 *mail* buffer. | |
1947 | |
1948 Remember that the articles you post do not contain the action type | |
1949 definitions used by the buttons, so the receiver must have these or she | |
1950 will receive an error when he activates the buttons. You should also | |
1951 keep in mind that most USENET readers will not be using Hyperbole, so if | |
1952 they receive a news article containing explicit buttons, they will | |
1953 wonder what the button data at the end of the message is. You should | |
1954 therefore limit distribution of such messages. For example, if most | |
1955 people at your site read news with GNUS and use Hyperbole, it would be | |
1956 reasonable to embed buttons in postings to local newsgroups. | |
1957 | |
1958 @cindex news comment | |
1959 In order to alert readers of your postings that you can utilize | |
1960 Hyperbole mail buttons embedded within personal replies, | |
1961 the system automatically inserts the same comment that is included | |
1962 within mail messages to announce this fact. @xref{Buttons in Mail}, for | |
1963 details and an explanation of how to turn this feature off. | |
1964 | |
1965 @node Smart Keys, Menus, Buttons, Top | |
1966 @chapter Smart Keys | |
1967 | |
1968 @cindex Smart Key | |
1969 @cindex mouse support | |
1970 @cindex Action Key | |
1971 @cindex Assist Key | |
1972 @kindex Action Key | |
1973 @kindex Assist Key | |
1974 Hyperbole provides two special @dfn{Smart Keys} that perform | |
1975 context-sensitive operations, the Action Key and the Assist Key. By | |
1976 default, the @dfn{Action Key} is bound to your shift-middle mouse button (or | |
1977 shift-left on a 2-button mouse) and the @dfn{Assist Key} is bound to your | |
1978 shift-right mouse button, assuming Hyperbole is run under an external window | |
1979 system. (InfoDock users should use the middle mouse button as the | |
1980 Action Key, instead.) | |
1981 | |
1982 @findex hmouse-shift-buttons | |
1983 Mouse configuration is automatic for InfoDock, XEmacs, and Epoch under | |
1984 the X window system and for GNU Emacs versions 18 and 19 under X, | |
1985 OpenWindows, NEXTSTEP, SunView and Apollo's Display Manager, assuming | |
1986 your Emacs program has been built with support for any of these window | |
1987 systems. The command, @code{hmouse-shift-buttons}, can be used to | |
1988 select between shifted and unshifted Smart Mouse Keys. | |
1989 | |
1990 @vindex hkey-init | |
1991 @kindex C-u M-RET | |
1992 @kindex M-RET | |
1993 By default (if @var{hkey-init} is set to @code{t} in @file{hsite.el}), | |
1994 then @{@kbd{M-@key{RET}}@} may also be used as the Action Key and | |
1995 @{@kbd{C-u M-@key{RET}}@} may be used as the Assist Key. In many | |
1996 read-only modes like Dired and Rmail, | |
1997 @{@key{RET}@} also functions as the Action Key. These key bindings allow | |
1998 context sensitive operation from any keyboard. | |
1999 | |
2000 @cindex key binding, smart keys | |
2001 @cindex smart key commands | |
2002 @findex action-key | |
2003 @findex assist-key | |
2004 @findex action-mouse-key | |
2005 @findex assist-mouse-key | |
2006 If you prefer other key bindings, simply bind the commands | |
2007 @code{action-key} and @code{assist-key} to keyboard keys. | |
2008 @code{hkey-either} may be used instead if you prefer a single | |
2009 key binding for both commands; a prefix argument then invokes | |
2010 @code{assist-key}. | |
2011 | |
2012 You may also bind @code{action-mouse-key} and @code{assist-mouse-key} | |
2013 to mouse keys, as you like. | |
2014 | |
2015 @cindex button activation | |
2016 @cindex activation | |
2017 @cindex button help | |
2018 The Action Key generally selects entities, creates links and | |
2019 activates buttons. The Assist Key generally provides help, | |
2020 such as reporting on a button's attributes, or serves a complementary | |
2021 function to whatever the Action Key does within a context. | |
2022 | |
2023 @cindex Smart Key operation | |
2024 You can get a summary of what the Smart Keys do in all of their | |
2025 different contexts by pressing the Assist Key in the right | |
2026 corner (within the rightmost 3 characters) of a window modeline or by | |
2027 using the Hyperbole Doc/SmartKy menu entry. | |
2028 | |
2029 The following table is an example of this summary. Much of the browsing | |
2030 power of Hyperbole comes from use of the Smart Keys, so you should spend | |
2031 some time practicing how to use them. This table may appear daunting at | |
2032 first, but as you practice and notice that the Smart Keys do just a few | |
2033 context-sensitive things per editor mode, you will find it easy to just | |
2034 point and click and let Hyperbole do the rest. | |
2035 | |
2036 For extensive reference documentation on the Smart Keys, @ref{Smart | |
2037 Key Reference}. | |
2038 | |
2039 @page | |
2040 @iftex | |
2041 @example | |
2042 @include ../etc/hypb-mouse.txt | |
2043 @end example | |
2044 @end iftex | |
2045 @ifinfo | |
2046 @format | |
2047 @include ../etc/hypb-mouse.txt | |
2048 @end format | |
2049 @end ifinfo | |
2050 | |
2051 @vindex action-key-default-function | |
2052 @vindex assist-key-default-function | |
2053 Note how the last line in the table explains the default behavior of the | |
2054 Smart Keys. That is what they do when they cannot find a context match | |
2055 at your current location. See the documentation for the variables | |
2056 @var{action-key-default-function} and @var{assist-key-default-function} | |
2057 for information on how to customize the behavior of the Smart Keys | |
2058 within default contexts. | |
2059 | |
2060 @cindex Hyperbole help | |
2061 A prime design criterion of Hyperbole's user interface is that one | |
2062 should be able to see what an operation will do before using it. | |
2063 The Assist Key shows you what a button or minibuffer menu item will do | |
2064 before you activate it. Hyperbole also shows the result of directly | |
2065 selecting an argument value with the mouse, to provide feedback as to | |
2066 whether the right item has been selected. A second click is necessary | |
2067 before an argument is accepted and processed. | |
2068 | |
2069 @cindex Smart Key help | |
2070 @cindex help, Smart Key | |
2071 @cindex context sensitive help | |
2072 When you use a mouse and you want to find out what either of the Smart | |
2073 Keys does within a context, depress the one you want to check on and | |
2074 hold it down, then press the other and release as you please. A help | |
2075 buffer will pop up explaining the actions that will be performed in that | |
2076 context, if any. A press of either Smart Key at the end of that | |
2077 help buffer will restore your display to its configuration prior to | |
2078 invoking help. | |
2079 | |
2080 @kindex C-h A | |
2081 @vindex hkey-init | |
2082 By default (if @var{hkey-init} is left set equal to @code{t} in | |
2083 @file{hsite.el}), then @{@kbd{C-h A}@} will display this same | |
2084 context-sensitive help for the Action Key while @{@kbd{C-u C-h | |
2085 A}@} will display the help for the Assist Key. Note that | |
2086 @{@kbd{C-h a}@} will perform a function unrelated to Hyperbole, so you | |
2087 must press the shift key when you hit the @kbd{A} character. | |
2088 | |
2089 @cindex Smart Key toggle | |
2090 @cindex mouse key toggle | |
2091 @vindex file, ~/.emacs | |
2092 @vindex file, hsite.el | |
2093 @kindex C-c t | |
2094 When Hyperbole is installed, a key may be bound which allows you | |
2095 to switch between the Smart Key mouse bindings and your prior ones. | |
2096 @kbd{C-h w hmouse-toggle-bindings @key{RET}} should show you any key | |
2097 which performs this command. If no key binding has been established or | |
2098 if you prefer one of your own, simply select a key and bind it | |
2099 within your @file{~/.emacs} file. For example, @code{(global-set-key | |
2100 "\C-ct" 'hmouse-toggle-bindings)}. | |
2101 | |
2102 | |
2103 @node Menus, Entering Arguments, Smart Keys, Top | |
2104 @chapter Menus | |
2105 | |
2106 @cindex InfoDock | |
2107 @cindex XEmacs | |
2108 @cindex Emacs 19 | |
2109 @cindex menu use | |
2110 @cindex menubar, Hyperbole menu | |
2111 Under InfoDock, XEmacs, and Emacs 19, pulldown and popup menus are | |
2112 available to invoke Hyperbole commands, including those from the rolodex | |
2113 and the outliner. These menus operate like any other X window menus. | |
2114 Use the Quit command on the Hyperbole menubar menu to get rid of the | |
2115 menu if you do not need it. Invoking Hyperbole again will add the menu | |
2116 back to the menubar. | |
2117 | |
2118 @cindex minibuffer menus | |
2119 This section discusses only the specialized @dfn{minibuffer menus} that | |
2120 appear in the minibuffer window and that work with all Emacs versions. | |
2121 Minibuffer menu items may be selected from either the keyboard or via | |
2122 mouse clicks. When used with the keyboard, they provide rapid command | |
2123 access similar to key bindings. | |
2124 | |
2125 @kindex C-h h | |
2126 @vindex action-key-default-function | |
2127 @cindex menu, top level | |
2128 The top level menu is invoked from a key given in your @file{hsite.el} | |
2129 file (by default, @{@kbd{C-h h}@}) or via an Action Key press in a | |
2130 location with no other action defined. The menu will appear in the | |
2131 minibuffer and should look mostly like so: | |
2132 | |
2133 @noindent | |
2134 @example | |
2135 Hy4> Act Butfile/ Doc/ Ebut/ Gbut/ Hist Ibut/ Msg/ Otl/ Rolo/ Win/ | |
2136 @end example | |
2137 | |
2138 @noindent | |
2139 The above menu items can be summarized as follows: | |
2140 | |
2141 @table @strong | |
2142 @cindex menu, Act | |
2143 @item Act | |
2144 Perform the action associated with any button at point or prompt for the | |
2145 name of an explicit button to activate if point is not on one. | |
2146 | |
2147 @cindex menu, ButFile | |
2148 @cindex button file, HYPB | |
2149 @vindex file, HYPB | |
2150 @item Butfile/ | |
2151 Display a local or global file of buttons, providing easy access. | |
2152 @file{HYPB} for a local button file and @file{~/.hyperb/HYPB} for your | |
2153 global file. These are good places to start your button creation testing. | |
2154 | |
2155 @cindex menu, EBut | |
2156 @item Ebut/ | |
2157 All explicit button commands. | |
2158 | |
2159 @cindex menu, Doc | |
2160 @cindex menu, Types | |
2161 @item Doc/ | |
2162 Hyperbole documentation quick access. Contains Types/ submenu for | |
2163 documentation on Hyperbole implicit button and action types. | |
2164 | |
2165 @cindex menu, Global Buttons | |
2166 @item Gbut/ | |
2167 All global button commands. Global buttons are accessed by name | |
2168 rather than by direct selection. | |
2169 | |
2170 @cindex menu, History | |
2171 @cindex history | |
2172 @item Hist | |
2173 Jumps back to last position in button traversal history. | |
2174 | |
2175 @cindex menu, Implicit Buttons | |
2176 @item Ibut/ | |
2177 All implicit button commands. | |
2178 | |
2179 @cindex menu, Message | |
2180 @item Msg/ | |
2181 Hyperbole-specific mail and news messaging support commands. | |
2182 Use this to send mail to the Hyperbole discussion list or to | |
2183 add/modify your entry on a Hyperbole mail list. | |
2184 | |
2185 @cindex menu, Outliner | |
2186 @item Otl/ | |
2187 Autonumbered, structured outliner and hyper-node manager commands. | |
2188 @xref{Outliner}. | |
2189 | |
2190 @cindex menu, Rolodex | |
2191 @item Rolo/ | |
2192 Hierarchical, multi-file rolodex lookup and edit commands. | |
2193 @xref{Rolodex}. | |
2194 | |
2195 @cindex menu, Window Configurations | |
2196 @cindex menu, Windows | |
2197 @item Win/ | |
2198 Window configuration management such as adding and restoring window | |
2199 configurations by name. @xref{Window Configurations}. | |
2200 | |
2201 @end table | |
2202 | |
2203 @cindex submenus | |
2204 @cindex menu help | |
2205 @cindex help, menu items | |
2206 All menu items are selected via the first character of their names | |
2207 (letter case does not matter) or via a press of the Action Key. "/" at | |
2208 the end of an item name indicates that it brings up a sub-menu. A press | |
2209 of the Assist Key on an item displays help for the item, including the | |
2210 action that it performs. | |
2211 | |
2212 @kindex C-t | |
2213 @kindex q | |
2214 @kindex C-g | |
2215 While a menu is active, to re-activate the top-level Hyperbole menu, you | |
2216 must use @{@kbd{C-t}@}. This allows you to browse the submenus and then | |
2217 return to the top. You can quit without selecting an item by using | |
2218 @{@kbd{q}@}. @{@kbd{C-g}@} aborts whether you are at a menu prompt or | |
2219 any other Hyperbole prompt. | |
2220 | |
2221 | |
2222 | |
2223 @node Entering Arguments, Outliner, Menus, Top | |
2224 @chapter Entering Arguments | |
2225 | |
2226 @cindex argument entry | |
2227 @cindex direct selection | |
2228 @cindex double click | |
2229 Many Hyperbole commands prompt you for arguments. The standard | |
2230 Hyperbole user interface has an extensive core of argument types that it | |
2231 recognizes. Whenever Hyperbole is prompting you for an argument, it | |
2232 knows the type that it needs and provides some error checking to help | |
2233 you get it right. More importantly, it allows you to press the Action | |
2234 Key within an entity that you want to use as an argument and it will grab the | |
2235 appropriate thing and show it to you at the input prompt within the | |
2236 minibuffer. If you press the Action Key again at the same point (click | |
2237 with a mouse) on the same thing again, it accepts the entity as the | |
2238 argument and moves on. Thus, a double click registers a desired | |
2239 argument. Double-quoted strings, pathnames, mail messages, Info nodes, | |
2240 dired listings, buffers, numbers, completion items and so forth are all | |
2241 recognized at appropriate times. All of the argument types mentioned in | |
2242 the documentation for the Emacs Lisp @code{(interactive)} function are | |
2243 recognized. Experiment a little and you will quickly get used to this | |
2244 direct selection technique. | |
2245 | |
2246 @cindex completion | |
2247 Wherever possible, standard Emacs completion is offered, see | |
2248 @ref{Completion,,,emacs, the Gnu Emacs Manual}. Remember to use @{@kbd{?}@} | |
2249 to see what your possibilities for an argument are. Once you have a | |
2250 list of possible completions on screen, you can double click the Action | |
2251 Key on any one to enter it as the argument. | |
2252 | |
2253 | |
2254 @node Outliner, Rolodex, Entering Arguments, Top | |
2255 @chapter Outliner | |
2256 | |
2257 @cindex outliner | |
2258 @cindex autonumber | |
2259 @cindex relative autonumber | |
2260 @cindex permanent identifier | |
2261 @cindex idstamp | |
2262 @cindex hyperlink anchor | |
2263 The Hyperbole outliner, also known as the Koutliner (pronounced | |
2264 Kay-outliner), produces structured, autonumbered documents composed of | |
2265 hierarchies of cells. Each @dfn{cell} has two identifiers, a | |
2266 @dfn{relative identifier} indicating its present position within the | |
2267 outline and a @dfn{permanent identifier} called an @dfn{idstamp}, | |
2268 suitable for use within hyperlink references to the cell. The idstamp | |
2269 is typically not displayed but is available when needed. | |
2270 @xref{Autonumbering}. | |
2271 | |
2272 Cells also store their time of creation and the user who created the | |
2273 cell. User-defined attributes may also be added to cells. @xref{Cell | |
2274 Attributes}. | |
2275 | |
2276 @cindex menu, Outline | |
2277 The outliner works only under GNU Emacs version 19 or higher, XEmacs | |
2278 version 19.9 or higher or under InfoDock. You can tell whether you are | |
2279 running a version of Emacs which supports the outliner by hitting | |
2280 @{@kbd{C-h h}@} to display the Hyperbole menu. If you see an | |
2281 @code{Otl/} entry in the menu, then the outliner is available. | |
2282 Otherwise, the outliner does not work with your version of Emacs, so | |
2283 this section of the manual will not be of interest to you. (The same is | |
2284 true of the Hyperbole/Outline pulldown menu; if it appears, the outliner | |
2285 is available for use.) | |
2286 | |
2287 @vindex file, EXAMPLE.kotl | |
2288 @cindex menu, Outline/Example | |
2289 This chapter expands on the information given in @file{EXAMPLE.kotl} | |
2290 file included with Hyperbole. Use @{@kbd{C-h h o e}@} to display that | |
2291 file. It is an actual outline file that explains major outliner | |
2292 operations. You can test out the viewing and motion commands with this | |
2293 file. If you want to experiment with editing operations, use @{@kbd{C-x | |
2294 C-w}@} to write the outline to a temporary file such as, | |
2295 @file{/tmp/e.kotl}, and then use @{@kbd{C-x C-q}@} to make the outline | |
2296 editable. | |
2297 | |
2298 @xref{Outliner Keys}, for a full summary of the key bindings and | |
2299 commands available in the outliner. | |
2300 | |
2301 @menu | |
2302 * Menu Commands:: | |
2303 * Creating Outlines:: | |
2304 * Autonumbering:: | |
2305 * Idstamps:: | |
2306 * Editing:: | |
2307 * Viewing:: | |
2308 * Links:: | |
2309 * Cell Attributes:: | |
2310 * Outliner History:: | |
2311 @end menu | |
2312 | |
2313 | |
2314 @node Menu Commands, Creating Outlines, Outliner, Outliner | |
2315 @section Menu Commands | |
2316 | |
2317 The Otl/ menu entry on the Hyperbole top-level menu provides access to | |
2318 a number of major outliner commands: | |
2319 | |
2320 @example | |
2321 @group | |
2322 @cindex outliner commands | |
2323 @cindex Koutliner commands | |
2324 @findex kotl-mode:show-all | |
2325 @findex kvspec:toggle-blank-lines | |
2326 @findex kfile:find | |
2327 @findex kotl-mode:hide-sublevels | |
2328 @findex kotl-mode:hide-tree | |
2329 @findex kotl-mode:kill-tree | |
2330 @findex klink:create | |
2331 @findex kotl-mode:overview | |
2332 @findex kotl-mode:show-tree | |
2333 @findex kotl-mode:top-cells | |
2334 @findex kvspec:activate | |
2335 @cindex menu, Outline | |
2336 Menu Item Command Description | |
2337 ==================================================================== | |
2338 All kotl-mode:show-all Expand all cells | |
2339 Blanks kvspec:toggle-blank-lines Toggle blank lines on or off | |
2340 Create kfile:find Edit or create an outline | |
2341 Downto kotl-mode:hide-sublevels Hide cells deeper than a level | |
2342 Examp <sample outliner file> Show self-descriptive example | |
2343 Hide kotl-mode:hide-tree Hide tree with root at point | |
2344 Info <outliner documentation> Show outliner manual section | |
2345 Kill kotl-mode:kill-tree Kill the current tree | |
2346 Link klink:create Create a link to another cell | |
2347 Overvw kotl-mode:overview Show first line of each cell | |
2348 Show kotl-mode:show-tree Show tree with root at point | |
2349 Top kotl-mode:top-cells Collapse to top-level cells | |
2350 Vspec kvspec:activate Set a view specification | |
2351 ==================================================================== | |
2352 @end group | |
2353 @end example | |
2354 | |
2355 | |
2356 @node Creating Outlines, Autonumbering, Menu Commands, Outliner | |
2357 @section Creating Outlines | |
2358 | |
2359 @cindex outline file suffix | |
2360 @cindex outline, creating | |
2361 @vindex file, .kotl suffix | |
2362 In addition to the Otl/Create menu item, you can create and experiment | |
2363 with outline files simply by finding a file, @{@kbd{C-x C-f}@} with a | |
2364 @file{.kotl} suffix. @file{.kot} will also work for DOS or | |
2365 Windows-impaired users. | |
2366 | |
2367 @cindex root cell | |
2368 @cindex top-level cell | |
2369 @cindex cell, top-level | |
2370 @cindex cell, idstamp 0 | |
2371 When a new koutline is created, an invisible root cell is created. Its | |
2372 permanent and relative ids are both 0, and it is considered to be at | |
2373 level 0 in the outline. All visible cells in the outline are at level 1 | |
2374 or deeper, and thus are descendants of this root cell. Some koutliner | |
2375 commands prompt for cell numbers as arguments. An argument of 0 makes | |
2376 commands operate upon the entire outline. | |
2377 | |
2378 An initial level 1 cell is also created to make it easy to start | |
2379 entering text in the outline. A koutline always has at least one | |
2380 visible cell in it. | |
2381 | |
2382 @xref{Autonumbering}, which explains how cells are labeled according to their | |
2383 respective levels in the outline and how these labels are updated as the | |
2384 structure of the outline changes. | |
2385 | |
2386 | |
2387 @node Autonumbering, Idstamps, Creating Outlines, Outliner | |
2388 @section Autonumbering | |
2389 | |
2390 @cindex autonumber | |
2391 @cindex relative identifier | |
2392 @xref{Adding and Killing}, which explains how to add new cells to or remove | |
2393 cells from a koutline. As you do this, or as you promote or demote | |
2394 cells within the outline, the labels preceding the contents of each cell | |
2395 automatically update to reflect the new structure. These labels are | |
2396 also known as @dfn{autonumbers} and as @dfn{relative ids} because they | |
2397 change as the structure changes. | |
2398 | |
2399 @cindex outline structure | |
2400 The outline structure is shown by these labels and by the indentation of | |
2401 each outline level. Normally, each deeper level is indented another | |
2402 three characters, to reflect the nesting. | |
2403 | |
2404 @cindex label type, alpha | |
2405 @cindex label type, legal | |
2406 @cindex alpha labels | |
2407 @cindex legal labels | |
2408 @cindex outline, label type | |
2409 The default autonumbers are called @dfn{alphanumeric labels} because | |
2410 they alternate between using numbers and letters to distinguish each | |
2411 successive level. Each alphanumeric label uniquely identifies a cell's | |
2412 position in an outline, so that there is no need to scan back to prior | |
2413 cells to see what the current section number of an outline is. This is | |
2414 similar to a legal numbering scheme but without all the period | |
2415 characters between level numbers. As an example, 1b3 is equivalent to a | |
2416 legal label of 1.2.3. Both refer to the 3rd cell at level 3, | |
2417 below the 2nd child of the first cell at level 1. Said another way, | |
2418 this is the 3rd child of the 1st cell's 2nd child. In other words, it | |
2419 is easier to visualize hierarchies than to talk about them. | |
2420 | |
2421 Alphanumeric labels are the default because they are shorter and easier | |
2422 to read aloud than equivalent legal ones. They also simplify | |
2423 distinguishing between even and odd level labels because of the | |
2424 alternating character set. | |
2425 | |
2426 @kindex C-c C-l | |
2427 @cindex label type, changing | |
2428 You can change the labeling scheme used in a particular outline with the | |
2429 command @{@kbd{C-c C-l}@}. A @{@kbd{?}@} then will show all of your | |
2430 options. Legal labels, partial alpha labels (single level autonumbering | |
2431 where only the last part of the level number is shown, as commonly seen | |
2432 in other outliner products), idstamps (permanent cell ids), and star | |
2433 outline level labels (Emacs asterisk-based outline labeling) are all | |
2434 available. Or you may choose to turn autonumbering off. Cells are | |
2435 still indented to reflect the outline structure whether or not labels | |
2436 are displayed. | |
2437 | |
2438 @cindex label separator, changing | |
2439 @cindex cell, label separator | |
2440 @cindex outline, label separator | |
2441 @kindex C-c M-l | |
2442 @kindex C-u C-c M-l | |
2443 A cell label is normally followed by two spaces, called the @dfn{label | |
2444 separator}, prior to the start of the cell contents. You can change the | |
2445 separator with for the current outline with @{@kbd{C-c M-l}@}. | |
2446 @{@kbd{C-u C-c M-l}@} will additionally change the default separator | |
2447 value used when new outlines are created (for the current session only). | |
2448 For example, use the value ". " to get a trailing period after each cell | |
2449 label. The separator must be at least two characters long but may be | |
2450 longer. | |
2451 | |
2452 @vindex file, ~/.emacs | |
2453 @cindex initialization file | |
2454 If you find a separator that you prefer for all outlines, change the | |
2455 separator setting permanently by adding the following line to your Emacs | |
2456 initialization file, @file{~/.emacs}, substituting for `your-separator': | |
2457 | |
2458 @cindex label separator, default | |
2459 @vindex kview:default-label-separator | |
2460 @lisp | |
2461 (setq kview:default-label-separator "your-separator") | |
2462 @end lisp | |
2463 | |
2464 | |
2465 @node Idstamps, Editing, Autonumbering, Outliner | |
2466 @section Idstamps | |
2467 | |
2468 @cindex permanent identifier | |
2469 @cindex idstamp | |
2470 Idstamps (permanent ids) are associated with each cell and can be | |
2471 used in hyperlinks that are maintained as cells are reordered in a file. | |
2472 @xref{Links}. Idstamps may also be displayed in place of the outline | |
2473 level relative ids. Use @{@kbd{C-c C-l id RET}@}. | |
2474 | |
2475 @cindex idstamp counter | |
2476 An idstamp counter for each outline starts at 0 and is incremented by | |
2477 one each time a cell is added to the outline. This idstamp stays with | |
2478 the cell no matter where it is moved within the outline. If the cell is | |
2479 deleted, its idstamp is not reused. | |
2480 | |
2481 @cindex root cell | |
2482 @cindex top-level cell | |
2483 @cindex cell, top-level | |
2484 @cindex cell, idstamp 0 | |
2485 @cindex idstamp 0 | |
2486 The 0 idstamp is always assigned to the root node of the entire outline. | |
2487 This node is never visible within the outline, but is used so that the | |
2488 outline may be treated as a single tree when needed. Idstamps always | |
2489 begin with a 0, as in 012, to distinguish them from relative ids. | |
2490 | |
2491 | |
2492 @node Editing, Viewing, Idstamps, Outliner | |
2493 @section Editing | |
2494 | |
2495 You edit text and move around in the Koutliner just as you would in any | |
2496 other Emacs buffer, except when you want to deal with the structural | |
2497 components of an outline. Within the contents of a cell, all of your | |
2498 standard editing keys should work properly. You can just type in text | |
2499 and the left and right margins of the lines will be maintained for you. | |
2500 @xref{Filling}, for the times when you need to refill a paragraph or to | |
2501 control when filling occurs.@refill | |
2502 | |
2503 Don't invoke editing commands with @{@kbd{M-x command-name @key{RET}}@} | |
2504 since the Koutliner uses special differently named commands made to act | |
2505 like the regular editing commands but which account for the structure | |
2506 and indentation in koutlines. | |
2507 | |
2508 @cindex cell, selection | |
2509 You can use the mouse to select parts of the contents of a single cell | |
2510 for editing. But don't drag across cell boundaries and then edit the | |
2511 selected region, since that can destroy the outline structure. | |
2512 | |
2513 @menu | |
2514 * Adding and Killing:: | |
2515 * Moving Around:: | |
2516 * Relocating and Copying:: | |
2517 * Filling:: | |
2518 * Transposing:: | |
2519 * Splitting and Appending:: | |
2520 * Inserting and Importing:: | |
2521 @end menu | |
2522 | |
2523 @node Adding and Killing, Relocating and Copying, Editing, Editing | |
2524 @subsection Adding and Killing | |
2525 | |
2526 @kindex C-j | |
2527 @kindex C-u c-j | |
2528 @kindex C-c a | |
2529 @kindex C-c p | |
2530 @cindex cell, adding | |
2531 @cindex cell, creating | |
2532 @{@kbd{C-j}@} adds a new cell as a successor sibling of the | |
2533 current cell, that is, the next cell at the same level as the current | |
2534 cell. If you enter a positive number as a prefix argument, that number | |
2535 of cells will be inserted, all at the same level. @{@kbd{C-u C-j}@} is | |
2536 handled specially. It adds a single cell as a child of the current cell. | |
2537 @{@kbd{C-c a}@} does the same thing. @{@kbd{C-c p}@} adds the cell as | |
2538 the successor of the current cell's parent. | |
2539 | |
2540 @kindex C-c C-k | |
2541 @kindex C-c k | |
2542 @kindex C-u C-c k | |
2543 @kindex C-y | |
2544 @cindex cell, killing | |
2545 @cindex cell, yanking contents | |
2546 @cindex tree, killing | |
2547 @{@kbd{C-c C-k}@} kills the current cell and its entire subtree. | |
2548 @{@kbd{C-c k}@} kills the contents of a cell from point through the end | |
2549 of the cell; it does not remove the cell itself. @{@kbd{C-u C-c k}@} | |
2550 kills the entire contents of the cell regardless of the location of | |
2551 point. You may then yank the contents into another cell or another | |
2552 buffer with @{@kbd{C-y}@}. | |
2553 | |
2554 | |
2555 @node Relocating and Copying, Moving Around, Adding and Killing, Editing | |
2556 @subsection Relocating and Copying | |
2557 | |
2558 @cindex promotion | |
2559 @cindex demotion | |
2560 @cindex tree, promoting | |
2561 @cindex tree, demoting | |
2562 @dfn{Demotion} is the act of moving a tree down one or more levels in the | |
2563 outline. The new tree will become either the successor or the first | |
2564 child of the cell which precedes it in the outline. @dfn{Promotion} is | |
2565 the inverse operation. Note that trees (cells and their entire | |
2566 substructure) are promoted and demoted, not individual cells. | |
2567 | |
2568 @kindex @key{TAB} | |
2569 @kindex M-@key{TAB} | |
2570 Trees may be demoted or promoted by pressing @{@key{TAB}@} or | |
2571 @{@kbd{M-@key{TAB}}@} respectively, as in most outliners today. | |
2572 @{@kbd{M-0 @key{TAB}}@} and @{@kbd{M-0 M-@key{TAB}}@} demote and | |
2573 promote trees and additionally refill each cell that is not specially | |
2574 marked to prevent refilling. @xref{Filling}. A positive or negative | |
2575 prefix argument to these commands promotes or demotes the tree up to a | |
2576 maximum of the number of levels given by the argument. The outline may | |
2577 not support movement of the tree by the number of levels requested. | |
2578 | |
2579 @cindex tree, copying | |
2580 @cindex tree, moving | |
2581 @cindex Action Key, cell argument | |
2582 @kindex Action Key, cell argument | |
2583 For maximum flexibility in rearranging outlines, there are commands that | |
2584 move or copy entire trees. Each of these commands prompts for the label | |
2585 of the root cell to move or copy and for second cell at the new location | |
2586 for the moved or copied tree. You can either accept the default | |
2587 provided, type in the cell label or when a mouse is available, simple | |
2588 double click with the Action Key on the contents of a cell. The | |
2589 Koutliner knows to use the cell's label in such cases. | |
2590 | |
2591 In these following commands, words delimited with <> represent the | |
2592 arguments for which each command prompts. Note how the use of prefix | |
2593 arguments changes each command's behavior from insertion at the sibling | |
2594 level to insertion at the child level. | |
2595 | |
2596 @table @kbd | |
2597 @kindex C-c c | |
2598 @item C-c c | |
2599 Copy <tree> to be the successor of <cell>. | |
2600 @kindex C-u C-c c | |
2601 @itemx C-u C-c c | |
2602 Copy <tree> to follow as the first child of <cell>. | |
2603 | |
2604 @kindex C-c C-c | |
2605 @item C-c C-c | |
2606 Copy <tree> to be the predecessor of <cell>. | |
2607 @kindex C-u C-c C-c | |
2608 @itemx C-u C-c C-c | |
2609 Copy <tree> to be the first child of the parent of <cell>. | |
2610 | |
2611 @kindex C-c m | |
2612 @item C-c m | |
2613 Move <tree> to be the successor of <cell>. | |
2614 @kindex C-u C-c m | |
2615 @itemx C-u C-c m | |
2616 Move <tree> to follow as the first child of <cell>. | |
2617 | |
2618 @kindex C-c C-m | |
2619 @item C-c C-m | |
2620 Move <tree> to precede <cell>. | |
2621 @kindex C-u C-c C-m | |
2622 @itemx C-u C-c C-m | |
2623 Move <tree> to be the first child of the parent of <cell>. | |
2624 @end table | |
2625 | |
2626 @cindex mouse, moving trees | |
2627 If you have mouse support under Hyperbole, you can move entire trees | |
2628 with mouse clicks. Simply click the Assist Key within the indentation | |
2629 to the left of a cell and you will be prompted for a tree to move. | |
2630 Double click the Action Key within the contents the root cell of the tree | |
2631 to move and then double click within the contents of the root cell of the | |
2632 tree you want it to follow as a sucessor. | |
2633 | |
2634 Copying and moving only work within a single outline right now, so don't | |
2635 try to use them to move trees across different outline files. You can, | |
2636 however, copy an outline tree to a non-outline buffer with: | |
2637 | |
2638 @cindex tree, exporting | |
2639 @cindex outline, exporting | |
2640 @cindex tree, mailing | |
2641 @cindex outline, mailing | |
2642 @cindex exporting an outline | |
2643 @cindex mailing an outline | |
2644 @table @kbd | |
2645 @kindex C-c M-c | |
2646 @item C-c M-c | |
2647 Copy <tree> to a non-koutline buffer. | |
2648 @kindex C-c @@ | |
2649 @itemx C-c @@ | |
2650 Copy a <tree> to an outgoing mail message. | |
2651 @end table | |
2652 | |
2653 @node Moving Around, Filling, Relocating and Copying, Editing | |
2654 @subsection Moving Around | |
2655 | |
2656 @cindex outline, motion | |
2657 In addition to normal Emacs movement commands, you can move within a | |
2658 cell or from one cell or tree to another. | |
2659 | |
2660 @table @kbd | |
2661 @kindex C-c , | |
2662 @item C-c , | |
2663 Move to the beginning of the current cell. | |
2664 @kindex C-c . | |
2665 @itemx C-c . | |
2666 Move to the end of the current cell. | |
2667 | |
2668 @kindex C-c C-n | |
2669 @item C-c C-n | |
2670 Move to the next visible cell, regardless of level. | |
2671 @kindex C-c C-p | |
2672 @itemx C-c C-p | |
2673 Move to the previous visible cell, regardless of level. | |
2674 | |
2675 @kindex C-c C-f | |
2676 @item C-c C-f | |
2677 Move forward to this cell's successor, if any. | |
2678 @kindex C-c C-b | |
2679 @itemx C-c C-b | |
2680 Move backward to this cell's predecessor, if any. | |
2681 | |
2682 @kindex C-c C-d | |
2683 @item C-c C-d | |
2684 Move to the first child of the current cell, if any. | |
2685 @kindex C-c C-u | |
2686 @itemx C-c C-u | |
2687 Move to the parent cell of the current cell, if any. | |
2688 | |
2689 @kindex C-c < | |
2690 @item C-c < | |
2691 Move to the first sibling at the current level within this tree. | |
2692 @kindex C-c > | |
2693 @itemx C-c > | |
2694 Move to the last sibling at the current level within this tree. | |
2695 | |
2696 @kindex C-c ^ | |
2697 @item C-c ^ | |
2698 Move to the level 1 root cell of the current tree. | |
2699 @kindex C-c $ | |
2700 @itemx C-c $ | |
2701 Move to the last cell in the tree rooted at point, regardless of level. | |
2702 @end table | |
2703 | |
2704 | |
2705 @node Filling, Transposing, Moving Around, Editing | |
2706 @subsection Filling | |
2707 | |
2708 @cindex outline, filling | |
2709 Filling is the process of extending lines that are shorter than the | |
2710 right margin and reducing lines which extend past the margin by moving | |
2711 words among the lines. Commands are provided to fill a paragraph within | |
2712 a cell or a whole cell, which may have multiple paragraphs. | |
2713 | |
2714 @cindex filling | |
2715 @cindex cell, filling | |
2716 @cindex paragraph, filling | |
2717 @cindex tree, filling | |
2718 @cindex margin | |
2719 @kindex M-q | |
2720 @kindex M-j | |
2721 @kindex C-c M-q | |
2722 @kindex C-c M-j | |
2723 @kindex C-M-q | |
2724 @kindex C-M-j | |
2725 @{@kbd{M-q}@} or @{@kbd{M-j}@} refills a paragraph within a | |
2726 cell so that its lines wrap within the current margin settings. | |
2727 @{@kbd{C-c M-q}@} or @{@kbd{C-c M-j}@} refills all paragraphs within a | |
2728 cell. @{@kbd{C-M-q}@} or @{@kbd{C-M-j}@} refills all cells within a | |
2729 tree. See your Emacs or InfoDock manual for information on how to set | |
2730 the left and right margins. | |
2731 | |
2732 @vindex kotl-mode:refill-flag | |
2733 @cindex refilling | |
2734 @cindex attribute, no-fill | |
2735 @cindex cell, no-fill attribute | |
2736 Set the variable, @var{kotl-mode:refill-flag}, to t if you want | |
2737 moving, promoting, demoting, exchanging, splitting and appending cells | |
2738 to also automatically refill each cell. Generally, this is not | |
2739 recommended since if you happen to move a cell that you have carefully | |
2740 formatted and forgot to give it a `no-fill' property, your formatting | |
2741 will be lost. | |
2742 | |
2743 | |
2744 @node Transposing, Splitting and Appending, Filling, Editing | |
2745 @subsection Transposing | |
2746 | |
2747 The Koutliner move and copy commands rearrange entire trees. The | |
2748 following two commands, in contrast, exchange the locations of two | |
2749 individual cells. | |
2750 | |
2751 @kindex C-c e | |
2752 @cindex cell, transposing | |
2753 @cindex cell, exchanging | |
2754 @cindex exchanging cells | |
2755 @cindex transposing cells | |
2756 @{@kbd{C-c e}@} prompts for two cell addresses and exchanges the cell | |
2757 locations. | |
2758 | |
2759 @kindex C-c t | |
2760 @{@kbd{C-c t}@} does not prompt. It exchanges the current | |
2761 and immediatly prior cell, regardless of their levels. If there is no | |
2762 prior cell it exchanges the current and next cell. | |
2763 | |
2764 @cindex cell, mark and point | |
2765 @kindex M-0 C-c t | |
2766 @{@kbd{M-0 C-c t}@} exchanges the cells in which point and mark fall. | |
2767 @{@kbd{C-c t}@} with a non-zero numeric prefix argument, N, moves | |
2768 the current tree past maximally the next N visible cells. If there are | |
2769 fewer visible, it makes the current cell the last cell in the outline. | |
2770 | |
2771 | |
2772 @node Splitting and Appending, Inserting and Importing, Transposing, Editing | |
2773 @subsection Splitting and Appending | |
2774 | |
2775 @cindex splitting a cell | |
2776 @cindex cell, splitting | |
2777 @kindex C-c s | |
2778 @kindex C-u C-c s | |
2779 You can split one cell into two adjacent sibling cells with @{@kbd{C-c | |
2780 s}@}. This leaves the cell contents preceding point in the current | |
2781 cell, minus any trailing whitespace, and moves the contents following | |
2782 point to a new sibling cell which is inserted into the outline. | |
2783 @{@kbd{C-u C-c s}@} instead adds the new cell as the first child of the | |
2784 original cell, rather than as its successor. | |
2785 | |
2786 All cell attributes in the original cell are propagated to the new one, | |
2787 aside from the creation attributes and idstamp. | |
2788 | |
2789 @kindex C-c + | |
2790 @cindex cell, appending | |
2791 @cindex appending to a cell | |
2792 @cindex attribute, no-fill | |
2793 @cindex cell, no-fill attribute | |
2794 @{@kbd{C-c +}@} appends the contents of a specified cell to the end of | |
2795 another cell. It has no effect on cell attributes, except that if one | |
2796 cell has a `no-fill' attribute that prevents all but user requested | |
2797 filling of a cell, then the cell appended to inherits this property. | |
2798 This helps maintain any special formatting the appended text may have. | |
2799 | |
2800 | |
2801 @node Inserting and Importing, , Splitting and Appending, Editing | |
2802 @subsection Inserting and Importing | |
2803 | |
2804 @cindex outline, inserting into | |
2805 @cindex outline, importing into | |
2806 @cindex importation | |
2807 @cindex insertion | |
2808 @kindex C-x i | |
2809 @cindex outline, foreign file | |
2810 The elements of another buffer or file may be inserted into a koutline | |
2811 as a set of cells by using the @{@kbd{C-x i}@} command. When prompted, | |
2812 you may use a buffer name or file name from which to insert, though | |
2813 completion is provided only for file names. | |
2814 | |
2815 @kindex C-u C-x i | |
2816 The elements from the original buffer are converted into kcells and | |
2817 inserted as the successors of the current cell. If @{@kbd{C-u C-x i}@} | |
2818 is used, they are instead inserted as the inital children of the current | |
2819 cell. | |
2820 | |
2821 @vindex kimport:mode-alist | |
2822 @vindex kimport:suffix-alist | |
2823 @cindex outline, conversion | |
2824 @findex kotl-mode | |
2825 @cindex outline mode | |
2826 @cindex koutline mode | |
2827 @cindex file, importing | |
2828 @cindex importing a file | |
2829 See the documentation for the variables, kimport:mode-alist and | |
2830 kimport:suffix-alist, for information on mode and suffix-specific | |
2831 conversions performed on file elements before they are inserted. This | |
2832 same conversion process applies if you invoke @{@kbd{M-x kotl-mode | |
2833 RET}@} in a non-koutline buffer or if you perform a generic file import | |
2834 as described later in this section. | |
2835 | |
2836 @findex kotl-mode:insert-file-contents | |
2837 Use @{@kbd{M-x kotl-mode:insert-file-contents RET}@} to insert the | |
2838 entire contents of a file into the current cell at the location of | |
2839 point. | |
2840 | |
2841 @findex kimport:file | |
2842 The outliner presently supports conversion of three types of files into | |
2843 koutline files. You can choose to import a file into an existing | |
2844 koutline, following the tree at point, or to create a new koutline of | |
2845 the imported file contents. @{@kbd{M-x kimport:file RET}@} will select | |
2846 the importation type based on the buffer or file name suffix of the file | |
2847 to import. | |
2848 | |
2849 @findex kotl-mode | |
2850 If you want to convert a buffer from some other mode into a koutline and | |
2851 then want to save the converted buffer back to its original file, | |
2852 thereby replacing the original format, then use @{@kbd{M-x kotl-mode | |
2853 RET}@} to convert the buffer into a koutline. Remember that you will | |
2854 lose the old format of the buffer when you do this. | |
2855 | |
2856 Use one of the following commands if you really need explicit control over the | |
2857 type of importation used on some text. With these commands, your | |
2858 original file remains intact. | |
2859 | |
2860 @findex kimport:text | |
2861 @cindex text file | |
2862 Use @{@kbd{M-x kimport:text RET}@} and you will be prompted for a text | |
2863 buffer or file to import and the new koutline buffer or file to create | |
2864 from its text. It will also import the contents, attributes and level | |
2865 structure of cells from a koutline. | |
2866 | |
2867 @findex kimport:star-outline | |
2868 @cindex emacs outline | |
2869 @cindex star outline | |
2870 Star outlines are standard Emacs outlines where each entry begins with | |
2871 one or more asterisk characters. Use @{@kbd{M-x kimport:star-outline | |
2872 RET}@} and you will be prompted for the star outline buffer or file to | |
2873 import and the new koutline buffer or file to create. | |
2874 | |
2875 @cindex Augment outline | |
2876 @findex kimport:aug-post-outline | |
2877 (Skip this if you are unfamiliar with the Augment system.) Files | |
2878 exported from the Augment system as text often have alphanumeric | |
2879 statement identifiers on the right side. You can import such files | |
2880 while maintaining there outline structure. Use @{@kbd{M-x | |
2881 kimport:aug-post-outline RET}@} and you will be prompted for the Augment | |
2882 buffer or file to import and the koutline to create. | |
2883 | |
2884 | |
2885 @node Viewing, Links, Editing, Outliner | |
2886 @section Viewing | |
2887 | |
2888 @cindex outline, viewing | |
2889 @cindex view | |
2890 The Koutliner has very flexible viewing facilities to allow you to | |
2891 effectively browse and study large amounts of material. | |
2892 | |
2893 @menu | |
2894 * Hiding and Showing:: | |
2895 * View Specs:: | |
2896 @end menu | |
2897 | |
2898 @node Hiding and Showing, View Specs, Viewing, Viewing | |
2899 @subsection Hiding and Showing | |
2900 | |
2901 @cindex outline, hiding | |
2902 @cindex outline, showing | |
2903 @cindex collapsing | |
2904 @cindex expanding | |
2905 @cindex hiding | |
2906 @cindex showing | |
2907 Individual cells, branches, or particular levels in the outline may be | |
2908 hidden or shown. These commands work even when an outline buffer is | |
2909 read-only, e.g. when its file is not checked out of a version control | |
2910 system yet, so that you can get effective views of an outline without | |
2911 editing it. Some of these commands affect the current view spec, | |
2912 @ref{View Specs}. | |
2913 | |
2914 @table @kbd | |
2915 @cindex hide tree | |
2916 @cindex tree, show | |
2917 @kindex C-c C-h | |
2918 @item C-c C-h | |
2919 Hide (collapse) the tree rooted at point. | |
2920 @cindex show tree | |
2921 @cindex tree, show | |
2922 @kindex C-c C-s | |
2923 @itemx C-c C-s | |
2924 Show (expand) the tree rooted at point. | |
2925 | |
2926 @cindex outline, all cells | |
2927 @cindex cell, show all | |
2928 @kindex C-c C-a | |
2929 @item C-c C-a | |
2930 Show (expand) all of the cells in the outline. | |
2931 @cindex level | |
2932 @cindex cell, show levels | |
2933 @cindex outline, show levels | |
2934 @kindex C-x $ | |
2935 @itemx C-x $ | |
2936 Show all of the cells down to a particular <level>. You are prompted | |
2937 for the level or a prefix argument may be given. | |
2938 | |
2939 @cindex subtree, hide | |
2940 @cindex tree, hide subtree | |
2941 @cindex cell, hide subtree | |
2942 @cindex hide subtree | |
2943 @kindex C-M-h | |
2944 @item C-M-h | |
2945 Hide the subtree at point, excluding the root cell. | |
2946 @cindex subtree, show | |
2947 @cindex tree, show subtree | |
2948 @cindex cell, show subtree | |
2949 @cindex show subtree | |
2950 @itemx M-x kotl-mode:show-subtree | |
2951 Show the subtree at point. Use @{@kbd{C-c C-s}@} to achieve a similar | |
2952 effect. The only difference is that it will expand the root cell too. | |
2953 | |
2954 @cindex overview | |
2955 @cindex outline, overview | |
2956 @kindex C-c C-o | |
2957 @item C-c C-o | |
2958 Show an overview of the outline by showing only the first line of | |
2959 every cell. This also turns off blank lines between cells to maximize | |
2960 your view of the outline. | |
2961 @cindex top-level view | |
2962 @cindex outline, top-level | |
2963 @kindex C-c C-t | |
2964 @itemx C-c C-t | |
2965 Show a top-level view of the outline by showing only the first line of | |
2966 each level one cell. This does not turn off blank lines. | |
2967 @end table | |
2968 | |
2969 @kindex Action Key, hide or show cell | |
2970 @cindex Action Key, hide or show cell | |
2971 @cindex cell, collapse | |
2972 @cindex cell, expand | |
2973 @kindex M-@key{RET} | |
2974 A click or a press of the Action Key within a cell's body, but not on a | |
2975 Hyperbole button, toggles between hiding and showing the tree rooted at | |
2976 point. Try it with either your mouse or with @{@kbd{M-@key{RET}}@}. | |
2977 | |
2978 | |
2979 @node View Specs, , Hiding and Showing, Viewing | |
2980 @subsection View Specs | |
2981 | |
2982 @cindex view spec | |
2983 @cindex modeline, view spec | |
2984 @vindex kvspec:string | |
2985 @cindex pipe character | |
2986 @cindex | | |
2987 @cindex <|viewspec> | |
2988 @dfn{View specifications} (view specs, for short) are short codes used | |
2989 to control the view of a koutline. The view specs in effect for an | |
2990 outline are always displayed in the modeline of the outline's window, | |
2991 following the outline buffer name, unless the variable, | |
2992 @var{kvspec:string}, has been set to @code{nil} to disable view spec | |
2993 modeline display. The modeline display appears as <|viewspec> so that | |
2994 you can easily pick them out. The | (pipe character) is also used in | |
2995 links that specify view specs to indicate the start of a view spec | |
2996 sequence. @xref{Links}. | |
2997 | |
2998 @cindex outline, view specs | |
2999 The current view spec is saved whenever the outline is saved. The next | |
3000 time the outline is read in, this will be the initial view. | |
3001 | |
3002 The rest of this section documents the the view spec characters that are | |
3003 presently supported and explains how to invoke a view spec. There is no | |
3004 user-level way to add your own view spec characters, so all character | |
3005 codes are reserved for future use. | |
3006 | |
3007 @kindex C-c C-v | |
3008 @cindex view spec, setting | |
3009 @cindex view spec, changing | |
3010 @cindex changing the view spec | |
3011 @cindex setting the view spec | |
3012 @{@kbd{C-c C-v}@} prompts for a new view spec setting in which the following | |
3013 codes are valid. Any invalid characters in a view spec are ignored. | |
3014 Characters are evaluated in an order meant to do the right thing, even | |
3015 when you use conflicting view spec characters. The standard initial | |
3016 view spec is <|ben>. | |
3017 | |
3018 @cindex view spec, characters | |
3019 @table @kbd | |
3020 @cindex view spec, all lines and levels | |
3021 @item a | |
3022 Show all cell levels and all lines in cells. | |
3023 | |
3024 @kindex C-c b | |
3025 @cindex blank lines, toggle | |
3026 @cindex view spec, blank lines | |
3027 @kindex C-c b | |
3028 @cindex toggling blank lines | |
3029 @item b | |
3030 Turn on blank lines between cells. Without this character, blank lines | |
3031 will be turned off. You can also use the @{@kbd{C-c b}@} key binding to | |
3032 toggle line numbers on and off independent of any other view settings. | |
3033 | |
3034 @cindex view spec, lines per cell | |
3035 @cindex hide lines | |
3036 @cindex collapse lines | |
3037 @cindex cutoff lines | |
3038 @item cN | |
3039 Hide any lines greater than N in each cell. 0 means don't cutoff any | |
3040 lines. | |
3041 | |
3042 @cindex ellipses | |
3043 @cindex view spec, ellipses | |
3044 @item e | |
3045 Show ellipses when some content of a cell or its subtree is hidden. | |
3046 | |
3047 @cindex level | |
3048 @cindex cell, hiding levels | |
3049 @cindex hide levels | |
3050 @cindex view spec, show levels | |
3051 @item lN | |
3052 Hide cells at levels deeper than N. 0 means don't hide any cells. | |
3053 | |
3054 @cindex label type | |
3055 @cindex view spec, label type | |
3056 @vindex kview:default-label-type | |
3057 @cindex default label type | |
3058 @item n | |
3059 Turn on the default label type, as given by the variable, | |
3060 @var{kview:default-label-type}. Normally, this is alphanumeric labels. | |
3061 @cindex label type, idstamps | |
3062 @itemx n0 | |
3063 Display idstamps. | |
3064 @cindex label type, alpha | |
3065 @itemx n1 | |
3066 Display alpha labels. | |
3067 @cindex label type, partial alpha | |
3068 @itemx n2 | |
3069 Display partial alpha labels (don't use this, as full alpha labels are | |
3070 better). | |
3071 @cindex label type, legal | |
3072 @itemx n. | |
3073 Display legal labels. | |
3074 @cindex label type, star | |
3075 @cindex label type, asterisk | |
3076 @itemx n* | |
3077 Display star labels. A level three cell would have three asterisks as a | |
3078 label, for example. | |
3079 @cindex label type, no labels | |
3080 @itemx n~ | |
3081 Turn off labels. (n viewspec is removed from modeline). | |
3082 @end table | |
3083 | |
3084 @cindex view spec, example | |
3085 As a test, use @{@kbd{C-h h o e}@} to display the example koutline. | |
3086 Then use @{@kbd{C-c C-v}@} to set a view spec of `c2l1'. This will turn | |
3087 off blank lines, clip each cell after its second line, and hide all | |
3088 cells below level one. | |
3089 | |
3090 | |
3091 @node Links, Cell Attributes, Viewing, Outliner | |
3092 @section Links | |
3093 | |
3094 @cindex link | |
3095 @cindex hyperlink | |
3096 @cindex klink | |
3097 @cindex <> delimiters | |
3098 Hyperlinks may be embedded in cells and may refer to other cells or | |
3099 external sources of information. Explicit Hyperbole buttons may be | |
3100 created as usual via mouse drags, @ref{By Dragging, Creation Via Action | |
3101 Key Drags}. A @dfn{klink} is a special implicit link button, delimited | |
3102 by <> separators, that jumps to a specific outline cell. This section | |
3103 discusses klinks. | |
3104 | |
3105 @kindex Action Key, klink | |
3106 @cindex Action Key, klink | |
3107 @cindex klink, activating | |
3108 @cindex klink referent | |
3109 Press the Action Key over a klink to follow it. This will flash the | |
3110 klink as a button and then will display its referent in the other | |
3111 window. If the klink contains a view spec, that will be used when the | |
3112 referent is displayed. | |
3113 | |
3114 @cindex klink, inserting | |
3115 @kindex C-c l | |
3116 There are a number of easy ways to insert klinks into koutlines. If you | |
3117 have mouse support under Hyperbole, simply click the Action Key within | |
3118 the indentation to the left of a cell text. If you then double click on | |
3119 some cell, a link to that cell will be inserted where you started. From | |
3120 a keyboard, use @{@kbd{C-c l}@} when in a koutline or @{@kbd{C-h h o | |
3121 l}@} when not in a koutline to insert a klink. Since klinks are | |
3122 implicit buttons, you can type in the text of the klink just as you see | |
3123 it in the examples below and it will work exactly as if it had been | |
3124 entered with the insert link command. | |
3125 | |
3126 @cindex klink, formats | |
3127 @noindent | |
3128 There are basically three forms of klinks: | |
3129 | |
3130 @table @bullet | |
3131 @cindex internal klink | |
3132 @cindex klink, internal | |
3133 @cindex <@@ klink> | |
3134 @item internal | |
3135 <@@ 2b=06> is an internal klink, since it refers to the koutline in which | |
3136 it is embedded. When activated, it jumps to the cell within the current | |
3137 outline which has permanent id `06' and relative id `2b'. <@@ 06> does | |
3138 the same thing, as does <@@ 2b>, though this latter form will not | |
3139 maintain the link properly if the cell is moved elsewhere within the | |
3140 outline. The form, <@@ 2b=06 |ben> additionally sets the view spec of | |
3141 the current outline back to the default value, with a blank line between | |
3142 each cell and all levels and lines of cells displayed. | |
3143 | |
3144 @cindex external klink | |
3145 @cindex klink, external | |
3146 @item external | |
3147 The second klink format is an external link to another koutline, such | |
3148 as, <EXAMPLE.kotl, 3=012 |c1e>, which displays the named file, starting | |
3149 at the cell 3 (whose permanent identifer is 012), with the view | |
3150 specification of: blank lines turned off, cutoff after one line per | |
3151 cell, and show ellipses for cells or trees which are clipped. | |
3152 | |
3153 @cindex klink, view spec | |
3154 @cindex view spec klink | |
3155 @item view spec | |
3156 The third format simply allows you to set a view spec for the current | |
3157 koutline. For example, <|ben>, when activated, sets the view in the | |
3158 current outline to display blank lines, ellipses following collapsed | |
3159 lines and standard alphanumeric numbering. | |
3160 @end table | |
3161 | |
3162 | |
3163 @node Cell Attributes, Outliner History, Links, Outliner | |
3164 @section Cell Attributes | |
3165 | |
3166 @cindex cell, attribute | |
3167 @cindex attribute | |
3168 @dfn{Attributes} are named variables whose values are specific to a | |
3169 particular outline cell. Thus, each cell has its own attribute list. | |
3170 Every cell has three standard attributes: | |
3171 | |
3172 @table @bullet | |
3173 @cindex idstamp attribute | |
3174 @item idstamp | |
3175 The permanent id of the cell, typically used in cross-file hyperlinks | |
3176 that reference the cell. | |
3177 | |
3178 @cindex creator attribute | |
3179 @cindex e-mail address | |
3180 @cindex mail address | |
3181 @item creator | |
3182 The e-mail address of the person who created this cell. | |
3183 | |
3184 @cindex create-time attribute | |
3185 @cindex cell, creation time | |
3186 @item create-time | |
3187 The time at which the cell was created. This is stored in a form that | |
3188 allows for easy data comparisons but is displayed in a human readable | |
3189 format, such as "Jan 28 18:27:59 CST 1994". | |
3190 @end table | |
3191 | |
3192 @kindex C-c C-i | |
3193 @cindex attribute, adding | |
3194 @cindex attribute, modifying | |
3195 @cindex attribute, removing | |
3196 @{@kbd{C-c C-i}@} is the command to add an attribute to or to modify an | |
3197 existing attribute in the cell at point. Think of it as inserting an | |
3198 attribute value. To remove an attribute from cell, set its value to | |
3199 @code{nil}. | |
3200 | |
3201 | |
3202 @cindex attribute, no-fill | |
3203 @cindex cell, no-fill attribute | |
3204 @cindex no-fill attribute | |
3205 @vindex kotl-mode:refill-flag | |
3206 The `no-fill' attribute is special. When added with a non-nil value, it | |
3207 prevents moving, promoting, demoting, exchanging, splitting and | |
3208 appending cells from refilling the cell, even if the variable, | |
3209 @var{kotl-mode:refill-flag}, is set to t. It does not prevent you from | |
3210 invoking explicit commands that refill the cell. @xref{Filling}. | |
3211 | |
3212 @kindex Assist Key, listing attributes | |
3213 @cindex Assist Key, listing attributes | |
3214 @cindex listing attributes | |
3215 @cindex outline, attribute list | |
3216 The attribute lists for the cells in the tree rooted at point can be | |
3217 displayed by pressing the Assist Key within the contents of a cell. | |
3218 | |
3219 @kindex C-c h | |
3220 @kindex C-u C-c h | |
3221 @{@kbd{C-c h}@} prompts for a cell label and displays the cell's | |
3222 attributes. @{@kbd{C-u C-c h}@} prompts for a cell label and displays | |
3223 the attributes for it and its subtree; use 0 as the kcell id to see | |
3224 attributes for all visible cells in the outline. | |
3225 | |
3226 | |
3227 @node Outliner History, , Cell Attributes, Outliner | |
3228 @section Outliner History | |
3229 | |
3230 @cindex NLS | |
3231 @cindex Augment | |
3232 @cindex Engelbart | |
3233 Much of the Hyperbole outliner design is based upon concepts pioneered | |
3234 in the NLS/Augment system, @cite{[Eng84a]}. Augment treated documents as | |
3235 a hierarchical set of nodes, called statements, rather than cells. | |
3236 Every Augment document utilized this intrinsic structure. | |
3237 | |
3238 @cindex distributed collaboration | |
3239 @cindex collaboration | |
3240 The system could rapidly change the view of a document by collapsing, | |
3241 expanding, generating, clipping, filtering, including or reordering | |
3242 these nodes. It could also map individual views to multiple workstation | |
3243 displays across a network to aid in distributed, collaborative work. | |
3244 | |
3245 @cindex knowledge transfer | |
3246 @cindex idea structuring | |
3247 @cindex cross referencing | |
3248 These facilities aided greatly in idea structuring, cross-referencing, | |
3249 and knowledge transfer. The Koutliner is a start at bringing | |
3250 these capabilities back into the mainstream of modern computing culture. | |
3251 | |
3252 | |
3253 @node Rolodex, Window Configurations, Outliner, Top | |
3254 @chapter Rolodex | |
3255 | |
3256 @cindex rolodex | |
3257 @cindex wrolo | |
3258 Hyperbole includes a complete, advanced rolodex system, Wrolo, for | |
3259 convenient management of hierarchical, record-oriented information. | |
3260 | |
3261 @cindex rolo, buttons in | |
3262 Hyperbole buttons may be included within rolodex records and then | |
3263 manually activated whenever their records are retrieved. | |
3264 | |
3265 @vindex file, wrolo.el | |
3266 See the description at the top of the @file{wrolo.el} file for | |
3267 details on programmatic interfacing to the rolodex. The following | |
3268 subsections explain use and basic customization of the rolodex. | |
3269 | |
3270 @menu | |
3271 * Rolo Concepts:: | |
3272 * Rolo Menu:: | |
3273 * Rolo Keys:: | |
3274 * Rolo Settings:: | |
3275 @end menu | |
3276 | |
3277 @node Rolo Concepts, Rolo Menu, Rolodex, Rolodex | |
3278 @section Rolo Concepts | |
3279 | |
3280 @cindex rolodex file | |
3281 @cindex rolodex entry | |
3282 The rolodex manages and searches rolodex files. A @dfn{rolodex file} | |
3283 consists of an optional header which starts and ends with a line of | |
3284 equal signs (at least three equal signs starting at the beginning of a | |
3285 line), followed by any non-negative number of rolodex records. You must | |
3286 manually add a header to any rolodex file if you want it to have one. | |
3287 | |
3288 @noindent | |
3289 Here is an example of a simple rolodex file. | |
3290 | |
3291 @example | |
3292 @group | |
3293 ================================================================== | |
3294 PERSONAL ROLODEX | |
3295 <Last-Name>, <First> <Email> W<Work#> F<Fax#> | |
3296 ================================================================== | |
3297 * Smith, John <js@@hiho.com> W708-555-2001 F708-321-1492 | |
3298 Chief Ether Maintainer, HiHo Industries | |
3299 10/24/95 | |
3300 @end group | |
3301 @end example | |
3302 | |
3303 We call rolodex records, @dfn{entries}. Entries begin with a delimiter, | |
3304 some number of `*' characters at the beginning of a line. Entries may | |
3305 be arranged in a hierarchy, where child entries begin with one more `*' | |
3306 characters than do their parents. Top level entries begin with a single | |
3307 `*'. | |
3308 | |
3309 Beyond this initial delimiter, entries are completely free-form text. | |
3310 It is best to use a "lastname, firstname" format, however, when adding | |
3311 contact entries into a rolodex. Then the rolodex system will | |
3312 automatically keep your entries alphabetized as you enter them. You'll | |
3313 also be able to sort them whenever you desire. | |
3314 | |
3315 Any search done on the rolodex scans the full text of each entry. | |
3316 During a search, the rolodex file header separator lines and anything in | |
3317 between are appended to the buffer of matched entries before any entries | |
3318 are retrieved from the file. Whenever an entry is matched, it and all | |
3319 of its descendant entries are retrieved. If your Emacs version supports | |
3320 textual highlighting, each search match is highlighted for quick, visual | |
3321 location. | |
3322 | |
3323 @noindent | |
3324 For example, a search on "Company" could retrieve the following: | |
3325 | |
3326 @example | |
3327 @group | |
3328 ================================================================== | |
3329 COMPANY ROLODEX | |
3330 ================================================================== | |
3331 * Company | |
3332 ** Manager | |
3333 *** Underlings | |
3334 @end group | |
3335 @end example | |
3336 | |
3337 @noindent | |
3338 Thus, searching for Company retrieves all listed employees. | |
3339 Searching for Manager turns up all Underlings. | |
3340 | |
3341 | |
3342 @node Rolo Menu, Rolo Keys, Rolo Concepts, Rolodex | |
3343 @section Rolo Menu | |
3344 | |
3345 @cindex rolodex menu | |
3346 The Rolo/ menu entry on the Hyperbole top-level menu provides the | |
3347 user interface to the rolodex. The rolo menu provides access to the | |
3348 following commands: | |
3349 | |
3350 @example | |
3351 @group | |
3352 @cindex rolodex commands | |
3353 @cindex Wrolo commands | |
3354 @findex rolo-add | |
3355 @findex rolo-display-matches | |
3356 @findex rolo-edit | |
3357 @findex rolo-kill | |
3358 @findex rolo-mail-to | |
3359 @findex rolo-sort | |
3360 @findex rolo-grep | |
3361 @findex rolo-fgrep | |
3362 @findex rolo-word | |
3363 @findex rolo-yank | |
3364 Menu Item Command Description | |
3365 ==================================================================== | |
3366 Add rolo-add Adds a rolodex entry | |
3367 Display rolo-display-matches Displays last matches again | |
3368 Edit rolo-edit Edits an existing rolodex entry | |
3369 Info Displays Rolodex manual entry | |
3370 Kill rolo-kill Removes an entry from the rolodex | |
3371 Mail rolo-mail Mail to address following point | |
3372 Order rolo-sort Sorts all levels in rolodex | |
3373 RegexFind rolo-grep Finds all entries containing | |
3374 a regular expression | |
3375 StringFind rolo-fgrep Finds all entries containing | |
3376 a string | |
3377 WordFind rolo-word Finds all entries containing | |
3378 a string of whole words | |
3379 Yank rolo-yank Inserts first matching rolodex | |
3380 entry at point | |
3381 ==================================================================== | |
3382 @end group | |
3383 @end example | |
3384 | |
3385 A prefix argument used with either of the find commands listed above | |
3386 limits the search to a maximum number of matches given by the argument. | |
3387 The search is terminated whenever that number of matches is found. | |
3388 | |
3389 For any of the above commands that prompt for a name, you may use the | |
3390 form parent/child to locate a child entry below a parent entry. So for | |
3391 a rolodex which looked like so: | |
3392 | |
3393 @example | |
3394 @group | |
3395 * Company | |
3396 ** Manager | |
3397 *** Underlings | |
3398 @end group | |
3399 @end example | |
3400 | |
3401 @noindent | |
3402 You could edit the Underlings entry by identifying it as | |
3403 Company/Manager/Underlings. Do not use this hierarchical notation in | |
3404 search expressions since the whole rolodex will be searched anyway. | |
3405 Thus, "Underlings" as a search pattern will find an entry containing | |
3406 "Underlings" at any level in a hierarchy, like so: | |
3407 | |
3408 @example | |
3409 *** Underlings | |
3410 @end example | |
3411 | |
3412 @node Rolo Keys, Rolo Settings, Rolo Menu, Rolodex | |
3413 @section Rolo Keys | |
3414 | |
3415 @kindex e | |
3416 @cindex rolodex, editing an entry | |
3417 Use the @{@kbd{e}@} key to edit the entry at point within the rolodex | |
3418 source file. | |
3419 | |
3420 @cindex wrolo menu | |
3421 @cindex rolodex keys | |
3422 After a rolodex search is performed, point is left in the @dfn{rolodex | |
3423 match buffer}, @file{*Rolodex*}, which uses @code{wrolo-mode} to | |
3424 simplify browsing many rolodex matches. Press @{@kbd{?}@} when in the | |
3425 match buffer for a summary of available keys. | |
3426 | |
3427 @kindex TAB | |
3428 @kindex M-TAB | |
3429 @kindex r | |
3430 @cindex rolodex, highlighting matches | |
3431 @cindex rolodex, finding matches | |
3432 @cindex rolodex, moving through matches | |
3433 If your Emacs version supports textual highlighting, each search match | |
3434 is highlighted for quick, visual location. @{@key{TAB}@} moves point | |
3435 forward to successive spans of text which match the search expression. | |
3436 @{@kbd{M-@key{TAB}}@} or @{@kbd{r}@} moves point backward to earlier | |
3437 matches. These keys allow you to quickly find the matching entry of | |
3438 most interest to you if your search expression failed to narrow the | |
3439 matches sufficiently. | |
3440 | |
3441 @kindex M-s | |
3442 @kindex C-r | |
3443 @cindex rolodex, extending a match | |
3444 @cindex rolodex, interactive searching | |
3445 If you want to extend the match expression with some more characters to | |
3446 find a particular entry, use @{@kbd{M-s}@}, which performs an | |
3447 interactive search forward for the match expression. You can add or | |
3448 delete characters to this expression to find different occurences. | |
3449 @{@kbd{C-r}@} will reverse the direction of the search. | |
3450 | |
3451 @kindex a | |
3452 @kindex h | |
3453 @kindex s | |
3454 @kindex t | |
3455 @cindex rolodex, outlining | |
3456 Single key outlining commands are also available for browsing matches. | |
3457 If your search matches a large number of entries, use | |
3458 @{@kbd{t}@} to get a top-level overview of all the entries. Each entry | |
3459 is collapsed so that only its first line shows. Press @{@kbd{s}@} to | |
3460 show (expand) the entry at point. Use @{@kbd{h}@} to hide (collapse) | |
3461 the entry again. Press @{@kbd{a}@} to expand all entries in the buffer. | |
3462 | |
3463 Many other keys are defined to help you move through matching entries. | |
3464 | |
3465 @cindex rolodex, moving to entries | |
3466 @table @kbd | |
3467 @kindex b | |
3468 @item b | |
3469 Move to the previous entry at the same level as the current entry. | |
3470 @kindex f | |
3471 @item f | |
3472 Move to the next entry at the same level as the current entry. | |
3473 @kindex n | |
3474 @item n | |
3475 Move to the next entry at any level. | |
3476 @kindex p | |
3477 @item p | |
3478 Move to the previous entry at any level. | |
3479 @kindex u | |
3480 @item u | |
3481 Move the the previous entry one level up. | |
3482 @kindex . | |
3483 @kindex < | |
3484 @item . | |
3485 @itemx < | |
3486 Move to the beginning of the buffer. | |
3487 @kindex , | |
3488 @kindex > | |
3489 @item , | |
3490 @itemx > | |
3491 Move to the end of the buffer. | |
3492 @kindex @key{DEL} | |
3493 @item @key{DEL} | |
3494 Scroll backward a windowful. | |
3495 @kindex @key{SPC} | |
3496 @item @key{SPC} | |
3497 Scroll forward a windowful. | |
3498 @end table | |
3499 | |
3500 @kindex q | |
3501 @cindex rolodex, quitting | |
3502 Once you have found an entry of interest and you want to remove the | |
3503 rolodex match buffer, use @{@kbd{q}@} to quit. This will restore your | |
3504 current frame to its state prior to the rolodex search. | |
3505 | |
3506 @node Rolo Settings, , Rolo Keys, Rolodex | |
3507 @section Rolo Settings | |
3508 | |
3509 @vindex rolo-highlight-face | |
3510 @cindex rolodex, highlighting matches | |
3511 If textual highlighting is available in your Emacs on your current | |
3512 display type, the rolodex uses the value of @var{rolo-highlight-face} as | |
3513 the face to use to highlight search matches. | |
3514 | |
3515 @vindex rolo-kill-buffers-after-use | |
3516 The buffers containing the rolodex files are not killed after a search | |
3517 on the assumption that another search is likely to follow within this | |
3518 Emacs session. You may wish to change this behavior with the following | |
3519 setting: @code{(setq rolo-kill-buffers-after-use t)}. | |
3520 | |
3521 @vindex rolo-save-buffers-after-use | |
3522 After an entry is killed, the modified rolodex file is automatically | |
3523 saved. If you would rather always save files yourself, use this | |
3524 setting: @code{(setq rolo-save-buffers-after-use nil)}. | |
3525 | |
3526 @vindex rolo-email-format | |
3527 When adding an entry from within a buffer containing a mail message, the | |
3528 rolodex add function will extract the sender's name and e-mail address | |
3529 and prompt you with the name as a default. If you accept it, it will | |
3530 enter the name and the email address using the format given by the | |
3531 @var{rolo-email-format} variable. See its documentation if you want to | |
3532 change its value. | |
3533 | |
3534 @vindex rolo-file-list | |
3535 @cindex rolodex, personal | |
3536 The files used in any rolodex search are given by the | |
3537 @var{rolo-file-list} variable, whose default value is | |
3538 @code{("~/.rolodex.otl")}, so that searches initially scan only your | |
3539 personal rolodex. Any entries added to this list should be file | |
3540 pathnames. If a file in the list does not exist or is not readable, it | |
3541 is skipped. Files are searched in the order in which they appear in the | |
3542 list. In general, you should leave your personal rolodex file as the | |
3543 first entry in the list, since this is the only file to which the rolo | |
3544 menu Add command adds entries.@refill | |
3545 | |
3546 @vindex rolo-entry-regexp | |
3547 The rolodex entry start delimiter is given by the regular expression | |
3548 variable, @var{rolo-entry-regexp}, whose default value is "^\*+". | |
3549 | |
3550 @vindex rolo-hdr-regexp | |
3551 A rolodex file may begin with an optional header section which is copied | |
3552 to the match display buffer whenever any matches are found during a | |
3553 search. The start and end lines of this header are controlled by | |
3554 the regular expression variable, @var{rolo-hdr-regexp}, whose default | |
3555 value is "^===". This allows lines of all equal signs to visually | |
3556 separate matching entries from multiple files retrieved from a single | |
3557 search. | |
3558 | |
3559 @node Window Configurations, Developing with Hyperbole, Rolodex, Top | |
3560 @chapter Window Configurations | |
3561 | |
3562 @cindex window configurations | |
3563 @cindex restoring windows | |
3564 @cindex saving window configurations | |
3565 @vindex file, wconfig.el | |
3566 Hyperbole includes the @file{wconfig.el} package which lets you save and | |
3567 restore window configurations, i.e@. the window layout and buffers | |
3568 displayed within an Emacs frame. This is useful to save a particular | |
3569 working context and then to jump back to it at a later time during an | |
3570 Emacs session. It is also useful during demonstrations to pull up many | |
3571 informational artifacts all at once, e.g@. all of the windows for a | |
3572 particular subsystem. None of this information is stored between Emacs | |
3573 sessions, so your window configurations will last only through a single | |
3574 session of use. | |
3575 | |
3576 The wconfig library provides two distinct means of managing window | |
3577 configurations. The first means associates a name with each stored | |
3578 window configuration. The name can then be used to retrieve the window | |
3579 configuration later. The second means uses a ring structure to save | |
3580 window configurations and then allows browsing through the sequence of | |
3581 saved configurations. | |
3582 | |
3583 The Win/ menu entry on the Hyperbole top-level menu displays a menu of | |
3584 window configuration commands: | |
3585 | |
3586 @noindent | |
3587 @display | |
3588 WinConfig> AddName DeleteName RestoreName PopRing SaveRing YankRing | |
3589 @end display | |
3590 | |
3591 @example | |
3592 @group | |
3593 @cindex wconfig commands | |
3594 @cindex window configuration commands | |
3595 @findex wconfig-add-by-name | |
3596 @findex wconfig-delete-by-name | |
3597 @findex wconfig-restore-by-name | |
3598 @findex wconfig-delete-pop | |
3599 @findex wconfig-ring-save | |
3600 @findex wconfig-yank-pop | |
3601 Menu Item Command Description | |
3602 ==================================================================== | |
3603 AddName wconfig-add-by-name Name current wconfig | |
3604 DeleteName wconfig-delete-by-name Delete wconfig with name | |
3605 RestoreName wconfig-restore-by-name Restore wconfig by name | |
3606 | |
3607 PopRing wconfig-delete-pop Restore and delete wconfig | |
3608 SaveRing wconfig-ring-save Store wconfig to ring | |
3609 YankRing wconfig-yank-pop Restore next wconfig | |
3610 ==================================================================== | |
3611 @end group | |
3612 @end example | |
3613 | |
3614 Saving and restoring window configurations by name is the easiest | |
3615 method, but it requires that you input the chosen name from the | |
3616 keyboard. The ring commands permit saving and restoring through mouse | |
3617 interaction only, if so desired. The prior section, @ref{Smart Keys}, | |
3618 mentions how to save and restore window configurations with the Smart Keys. | |
3619 Since the ring commands are a bit more complex than their by-name | |
3620 counterparts, the following paragraphs explain them in more detail. | |
3621 | |
3622 @vindex kill-ring | |
3623 Wconfig creates a ring structure that operates just like the Emacs | |
3624 @var{kill-ring}, @ref{Kill Ring,,,emacs, The GNU Emacs Manual}, but its | |
3625 elements are window configurations rather than text regions. One can | |
3626 add an element to the ring based upon the current window configuration. | |
3627 After several elements are in the ring, one can walk through all of them | |
3628 in sequence until the desired configuration is restored. | |
3629 | |
3630 @findex wconfig-ring-save | |
3631 SaveRing executes the @code{wconfig-ring-save} command which | |
3632 saves the current window configuration to the ring. | |
3633 | |
3634 @findex wconfig-yank-pop | |
3635 YankRing executes the @code{wconfig-yank-pop} command. It restores the | |
3636 window configuration from the currently pointed to configuration in the | |
3637 ring. It does not delete this configuration from the ring but it does | |
3638 move the pointer to the prior ring element. Repeated calls to this | |
3639 command thus restore successive window configurations until the ring | |
3640 pointer wraps around. Simply stop when a desired configuration appears | |
3641 and use @{@kbd{q}@} to quit from the minibuffer menu. | |
3642 | |
3643 @findex wconfig-delete-pop | |
3644 PopRing calls the @code{wconfig-delete-pop} command. | |
3645 It is used to restore a previously saved configuration and at the same | |
3646 time delete it from the ring. Simply stop when a desired configuration | |
3647 appears and use @{@kbd{q}@} to quit from the minibuffer menu. | |
3648 | |
3649 @vindex wconfig-ring-max | |
3650 The maximum number of elements the ring can hold is set by the | |
3651 @var{wconfig-ring-max} variable whose default is 10. Any saves beyond | |
3652 this value cause deletion of the oldest element in the ring before | |
3653 a new one is added. | |
3654 | |
3655 @node Developing with Hyperbole, Glossary, Window Configurations, Top | |
3656 @chapter Developing with Hyperbole | |
3657 | |
3658 This chapter is only for people who are familiar with Emacs Lisp and | |
3659 wish to customize Hyperbole, to extend it, or to develop other systems | |
3660 using Hyperbole as a base. | |
3661 | |
3662 @menu | |
3663 * Hook Variables:: | |
3664 * Creating Types:: | |
3665 * Explicit Button Technicalities:: | |
3666 * Encapsulating Systems:: | |
3667 * Embedding Hyperbole:: | |
3668 @end menu | |
3669 | |
3670 @node Hook Variables, Creating Types, Developing with Hyperbole, Developing with Hyperbole | |
3671 @section Hook Variables | |
3672 | |
3673 @cindex variables | |
3674 @cindex hook variables | |
3675 Hyperbole provides a number of hook variables that allow you to adjust | |
3676 its basic operations to meet your own needs, without requiring you to | |
3677 change the code for those operations. | |
3678 | |
3679 We find it best to always set the value of hook variables either to nil | |
3680 or to a list of function names of no arguments, each of which will be | |
3681 called in sequence when the hook is triggered. | |
3682 | |
3683 Given the name of a function, a Hyperbole hook variable triggered within | |
3684 that function has the same name as the function with a @code{-hook} | |
3685 appended. Hyperbole provides the following hook variables: | |
3686 | |
3687 @table @var | |
3688 | |
3689 @vindex hyperb:init-hook | |
3690 @item hyperb:init-hook | |
3691 For customization at Hyperbole initialization time. Use this to load | |
3692 any personal Hyperbole type definitions you might have. It is run after | |
3693 Hyperbole support code is loaded but before Hyperbole session | |
3694 initializations take place. | |
3695 | |
3696 @vindex action:act-hook | |
3697 @vindex hbut:current | |
3698 @item action:act-hook | |
3699 Run before each Hyperbole button activation. | |
3700 The variable @var{hbut:current} contains the button to be activated when | |
3701 this is run. | |
3702 | |
3703 @vindex ebut:create-hook | |
3704 @item ebut:create-hook | |
3705 To add to the Hyperbole explicit button creation process. | |
3706 | |
3707 @vindex ebut:delete-hook | |
3708 @item ebut:delete-hook | |
3709 To add to the Hyperbole explicit button deletion process. | |
3710 | |
3711 @vindex ebut:modify-hook | |
3712 @item ebut:modify-hook | |
3713 Executed when an explicit button's attributes are modified. | |
3714 | |
3715 @vindex hibtypes:begin-load-hook | |
3716 @item hibtypes:begin-load-hook | |
3717 Executed prior to loading of standard Hyperbole implicit button types. | |
3718 Used to load site-specific low priority implicit button types since | |
3719 lowest priority ibtypes are loaded first. | |
3720 | |
3721 @vindex hibtypes:end-load-hook | |
3722 @item hibtypes:end-load-hook | |
3723 Executed after loading of standard Hyperbole implicit button types. | |
3724 Used to load site-specific high priority implicit button types since | |
3725 highest priority ibtypes are loaded last. | |
3726 | |
3727 @vindex htype:create-hook | |
3728 @item htype:create-hook | |
3729 Executed when a Hyperbole type (e.g@. action type or implicit button | |
3730 type) is added to the environment. | |
3731 | |
3732 @vindex htype:delete-hook | |
3733 @item htype:delete-hook | |
3734 Executed when a type is deleted from the environment. | |
3735 | |
3736 @vindex kotl-mode-hook | |
3737 @item kotl-mode-hook | |
3738 Executed when a Koutline is created or read in or when kotl-mode is | |
3739 invoked. | |
3740 | |
3741 @vindex wrolo-display-hook | |
3742 @item wrolo-display-hook | |
3743 Executed when rolodex matches are displayed. | |
3744 | |
3745 @vindex wrolo-mode-hook | |
3746 @item wrolo-mode-hook | |
3747 Executed when a rolodex match buffer is created and put into wrolo-mode. | |
3748 | |
3749 @vindex wrolo-yank-reformat-function | |
3750 @cindex yank, reformatting | |
3751 @item wrolo-yank-reformat-function | |
3752 A variable whose value may be set to a function of two arguments, START | |
3753 and END, indicating the region of the rolodex entry yanked into the | |
3754 current buffer by the rolo-yank command. The function may reformat this | |
3755 region to meed user-specific needs. | |
3756 | |
3757 @end table | |
3758 | |
3759 @noindent | |
3760 Hyperbole also makes use of a number of external Emacs hook variables. | |
3761 | |
3762 @table @var | |
3763 | |
3764 @vindex find-file-hooks | |
3765 @cindex button highlighting | |
3766 @item find-file-hooks | |
3767 This is called whenever a file is read into a GNU Emacs buffer. | |
3768 Hyperbole uses it to highlight any buttons within files when run under | |
3769 any NEXTSTEP or X window system-based versions of GNU Emacs. | |
3770 | |
3771 @vindex write-file-hooks | |
3772 @cindex button data saving | |
3773 @item write-file-hooks | |
3774 This is called whenever a GNU Emacs buffer is written to a file. | |
3775 Hyperbole uses it to save any modified button data associated with the | |
3776 file's directory. | |
3777 | |
3778 @cindex mail hooks | |
3779 @cindex news hooks | |
3780 Hyperbole mail and news facilities also utilize a number of external hook | |
3781 variables. These hide button data and highlight buttons if possible. | |
3782 See the various support files for details. | |
3783 @end table | |
3784 | |
3785 @node Creating Types, Explicit Button Technicalities, Hook Variables, Developing with Hyperbole | |
3786 @section Creating Types | |
3787 | |
3788 @cindex type definition | |
3789 @cindex type redefinition | |
3790 @noindent | |
3791 To define or redefine a single Hyperbole type, you may either: | |
3792 | |
3793 @itemize @bullet | |
3794 @kindex C-M-x | |
3795 @findex eval-defun | |
3796 @kindex C-x C-e | |
3797 @findex eval-last-sexp | |
3798 @item | |
3799 move your Emacs point to within the type definition and use | |
3800 @{@kbd{C-M-x}@} @code{(eval-defun)} (only works in Emacs Lisp mode); | |
3801 | |
3802 @item | |
3803 or move your point to the end of the last line of the type definition and | |
3804 use @{@kbd{C-x C-e}@} @code{(eval-last-sexp)} (works in most modes). | |
3805 @end itemize | |
3806 | |
3807 @cindex Hyperbole types | |
3808 @vindex class, htype | |
3809 The functions from the @code{htype} class may be applied to any | |
3810 Hyperbole types, if needed. | |
3811 | |
3812 @vindex file, hactypes.el | |
3813 @vindex file, hibtypes.el | |
3814 The following subsections explain the specifics of Hyperbole type | |
3815 definitions which are beyond standard practice for Emacs Lisp programming. | |
3816 See the definitions of the standard types in @file{hactypes.el} | |
3817 and @file{hibtypes.el} for examples. | |
3818 | |
3819 @menu | |
3820 * Action Type Creation:: | |
3821 * Implicit Button Types:: | |
3822 @end menu | |
3823 | |
3824 @node Action Type Creation, Implicit Button Types, Creating Types, Creating Types | |
3825 @subsection Action Type Creation | |
3826 | |
3827 @findex actype:create | |
3828 @vindex file, hactypes.el | |
3829 @vindex file, hbut.el | |
3830 New forms of explicit buttons may be created by adding new action types | |
3831 to a Hyperbole environment. The file, @file{hactypes.el}, provides | |
3832 many examples of working action types. | |
3833 | |
3834 @cindex action type, creation | |
3835 @findex defact | |
3836 @findex actype:create | |
3837 An action type is created, i.e@. loaded into the Hyperbole environment, | |
3838 with the @code{(defact)} function (which is an alias for | |
3839 @code{(actype:create)}). The calling signature for this function is | |
3840 given in its documentation; it is the same as that of @code{(defun)} | |
3841 except that a documentation string is required. (An interactive calling | |
3842 form is also required if the action type has formal parameters and is to | |
3843 be used in explicit button definitions. Implicit buttons never use an | |
3844 action type's interactive form. It is good practice to include an | |
3845 interactive form since the type creator cannot know how users may choose | |
3846 to apply the type.)@refill | |
3847 | |
3848 An action type's parameters are used differently than those of a | |
3849 function being called. Its interactive calling form is used when an | |
3850 explicit button is created to prompt for type-specific button | |
3851 attributes. The rest of its body is used when a button with that action | |
3852 type is activated. Then the button attributes together with the action | |
3853 type body are used to form an action that is executed in response to the | |
3854 button activation. The action's result is returned to the action caller | |
3855 unless it returns nil, in which case t is returned to the caller to | |
3856 ensure that it registers the performance of the action. | |
3857 | |
3858 An action type body may perform any computation using Emacs Lisp and | |
3859 Hyperbole functions. | |
3860 | |
3861 @cindex interactive form | |
3862 @findex interactive | |
3863 The interactive calling form for an action type is of the same form as | |
3864 that of a regular Emacs Lisp function definition (see the documentation | |
3865 for the Emacs Lisp @code{(interactive)} form). It may additionally use | |
3866 Hyperbole command character extensions when the form is given as a | |
3867 string. Each such extension character @emph{must} be preceded by a plus | |
3868 sign, @code{+}, in order to be recognized since such characters may also | |
3869 have standard interactive form meanings. | |
3870 | |
3871 The present Hyperbole extension characters are: | |
3872 | |
3873 @table @strong | |
3874 @cindex argument, Info node | |
3875 @cindex interactive cmd char, +I | |
3876 @item +I | |
3877 Prompts for an existing Info node name and file. | |
3878 | |
3879 @cindex argument, kcell | |
3880 @cindex argument, koutline | |
3881 @cindex interactive cmd char, +K | |
3882 @item +K | |
3883 Prompts for an existing kcell identifier, either a full outline level | |
3884 identifier or a permanent idstamp. | |
3885 | |
3886 @cindex interactive cmd char, +M | |
3887 @cindex argument, mail message | |
3888 @item +M | |
3889 Prompts for a mail message date and the file name it resides in. | |
3890 The mail parameters prompted for by this character code are likely to | |
3891 change in the future. | |
3892 | |
3893 @cindex argument, view spec | |
3894 @cindex interactive cmd char, +V | |
3895 @item +V | |
3896 Prompts for a Hyperbole view specification. | |
3897 Not yet available for use. | |
3898 | |
3899 @end table | |
3900 | |
3901 @vindex class, hargs | |
3902 @cindex argument, reading | |
3903 Arguments are read by the functions in Hyperbole's @code{hargs} class, | |
3904 rather than the standard Lisp @code{read} functions, in order to allow | |
3905 direct selection of arguments via the Action Key. | |
3906 | |
3907 If an action type create is successful, the symbol that Hyperbole uses | |
3908 internally to reference the type is returned. @code{Nil} is returned on | |
3909 failure so that you may test whether or not the operation succeeds. | |
3910 | |
3911 Once you have defined an action type within your present Hyperbole | |
3912 environment, you can create new explicit buttons which use it. There is | |
3913 no explicit button type beyond its action type, so no further work is | |
3914 necessary. | |
3915 | |
3916 @findex actype:delete | |
3917 Call @code{(actype:delete)} to remove an action type from a Hyperbole | |
3918 environment. It takes a single parameter which should be the same type | |
3919 symbol used in the type definition call (not the Hyperbole symbol | |
3920 returned by the call). | |
3921 | |
3922 @node Implicit Button Types, , Action Type Creation, Creating Types | |
3923 @subsection Implicit Button Types | |
3924 | |
3925 @cindex implicit button type | |
3926 @cindex ibtype | |
3927 @findex defib | |
3928 @findex ibtype:create | |
3929 An implicit button type is created or loaded via the @code{(defib)} | |
3930 function (which is an alias for @code{(ibtype:create)}). The calling | |
3931 signature for this function is given in its documentation; it is the | |
3932 same as that of @code{(defun)}, but with a number of constraints. The | |
3933 parameter list should always be empty since no parameters will be used. | |
3934 A documentation string is required. The type's body follows this. | |
3935 | |
3936 @cindex ibtype, predicate | |
3937 @cindex ibtype, argument | |
3938 @cindex ibtype, return val | |
3939 @cindex ibtype, actype | |
3940 The body of an implicit button type is a predicate which determines | |
3941 whether or not point is within an implicit button of the type. If not, | |
3942 the predicate returns @code{nil}. If so, it may optionally setup to | |
3943 flash the button and then perform one or more actions. A call of the | |
3944 form: @code{(ibut:label-set label start-pos end-pos)} is used to setup | |
3945 the button flashing, if desired. This is then typically immediately | |
3946 followed by an action invocation of the form: | |
3947 @code{(hact 'actype &rest actype-arguments)}. It is imperative that all | |
3948 actions (non-predicate code) be invoked through the @code{(hact)} | |
3949 function rather than directly or your ibtypes will not work properly. | |
3950 (Hyperbole first tests to see if any ibtype matches the current context | |
3951 before activating any type, so it ensures that @code{(hact)} calls are | |
3952 disabled during this testing.) Any action types used may be created | |
3953 before or after the implicit button type definition but obviously should | |
3954 be defined before any implicit buttons of the given type are activated; | |
3955 an error will result, otherwise. | |
3956 | |
3957 If an implicit button type create is successful, the symbol that | |
3958 Hyperbole uses internally to reference the type is returned. @code{Nil} | |
3959 is returned on failure so that you may test whether or not the operation | |
3960 succeeds. Implicit button type names and action type names may be the | |
3961 same without any conflict. In fact, such naming is encouraged when an | |
3962 implicit button type is the exclusive user of an action type. | |
3963 | |
3964 @findex ibtype:delete | |
3965 Call @code{(ibtype:delete)} to remove an implicit button type from a | |
3966 Hyperbole environment. It takes a single parameter which should be the | |
3967 same type symbol used in the type definition call (not the Hyperbole | |
3968 symbol returned by the call). This will not delete the action type used | |
3969 by the implicit button; that must be done separately. | |
3970 | |
3971 @cindex ibtype, help | |
3972 @findex ibut:at-p | |
3973 @vindex class, hattr | |
3974 @vindex class, hbut | |
3975 @vindex file, hib-kbd.el | |
3976 By default, a request for help on an implicit button will display the | |
3977 button's attributes in the same manner as is done for explicit buttons. | |
3978 For some implicit button types, other forms of help will be more | |
3979 appropriate. If an Emacs Lisp function is defined whose name is formed | |
3980 from the concatenation of the type name followed by @code{:help}, e.g@. | |
3981 @code{my-ibtype:help}, it is used to respond to requests for | |
3982 help on buttons of that type. Any such function should take a single | |
3983 argument of an implicit button construct. (This is what | |
3984 @code{(ibut:at-p)} returns when point is within an implicit button | |
3985 context.) The button may be queried for its attributes using functions | |
3986 from the @code{hbut} and @code{hattr} classes. See the @file{hib-kbd.el} | |
3987 file for an example of a custom help function. | |
3988 | |
3989 @node Explicit Button Technicalities, Encapsulating Systems, Creating Types, Developing with Hyperbole | |
3990 @section Explicit Button Technicalities | |
3991 @menu | |
3992 * Button Label Normalization:: | |
3993 * Operational and Storage Formats:: | |
3994 * Programmatic Button Creation:: | |
3995 @end menu | |
3996 | |
3997 @node Button Label Normalization, Operational and Storage Formats, Explicit Button Technicalities, Explicit Button Technicalities | |
3998 @subsection Button Label Normalization | |
3999 @cindex normalized label | |
4000 @cindex button label | |
4001 @cindex button key | |
4002 @vindex hbut:label-to-key | |
4003 Hyperbole uses a normalized form of button labels called button keys (or | |
4004 label keys) for all internal operations. See the documentation for the | |
4005 function @code{(hbut:label-to-key)} for details of the normalization | |
4006 process. The normalized form permits Hyperbole to recognize buttons that | |
4007 are the same but whose labels appear different from one another, due to | |
4008 text formatting conventions. For example, all of the following would | |
4009 be recognized as the same button. | |
4010 | |
4011 @example | |
4012 <(fake button)> <( fake button)> | |
4013 | |
4014 Pam> <(fake | |
4015 Pam> button)> | |
4016 | |
4017 ;; <(fake | |
4018 ;; button)> | |
4019 | |
4020 /* <( fake */ | |
4021 /* button )> */ | |
4022 @end example | |
4023 | |
4024 @vindex hbut:fill-prefix-regexps | |
4025 @vindex fill-prefix | |
4026 @cindex fill prefix | |
4027 @cindex button, multiple lines | |
4028 @cindex button, split across lines | |
4029 The last three examples demonstrate how Hyperbole ignores common fill | |
4030 prefix patterns that happen to fall within the middle of a button label | |
4031 that spans multiple lines. As long as such buttons are selected with | |
4032 point at a location within the label's first line, the button will be | |
4033 recognized. The variable @var{hbut:fill-prefix-regexps} holds the list | |
4034 of fill prefixes recognized when embedded within button labels. All | |
4035 such prefixes are recognized (one per button label), regardless of the | |
4036 setting of the GNU Emacs variable, @var{fill-prefix}, so no user | |
4037 intervention is required. | |
4038 | |
4039 @node Operational and Storage Formats, Programmatic Button Creation, Button Label Normalization, Explicit Button Technicalities | |
4040 @subsection Operational and Storage Formats | |
4041 | |
4042 @cindex explicit button, formats | |
4043 @cindex explicit button, storage | |
4044 @cindex storage manager | |
4045 @cindex button attributes | |
4046 @vindex hbut:current | |
4047 Hyperbole uses a terse format to store explicit buttons and a more | |
4048 meaningful one to show users and to manipulate during editing. The | |
4049 terse format consists solely of button attribute values whereas the edit | |
4050 format includes an attribute name with each attribute value. A button | |
4051 in edit format consists of a Lisp symbol together with its attribute list | |
4052 which holds the attribute names and values. In this way, buttons may be | |
4053 passed along from function to function simply by passing the symbol to | |
4054 which the button is attached. Most functions utilize the pre-defined | |
4055 @var{hbut:current} symbol by default to store and retrieve the last | |
4056 encountered button in edit format. | |
4057 | |
4058 @vindex class, hbdata | |
4059 @vindex class, ebut | |
4060 @vindex class, hbut | |
4061 The @code{hbdata} class handles the terse, stored format. The | |
4062 @code{hbut}, @code{ebut}, and @code{ibut} classes work with the | |
4063 name/value format. This separation permits the wholesale replacement of | |
4064 the storage manager with another, with any interface changes hidden from | |
4065 any Hyperbole client programming. | |
4066 | |
4067 @node Programmatic Button Creation, , Operational and Storage Formats, Explicit Button Technicalities | |
4068 @subsection Programmatic Button Creation | |
4069 | |
4070 @cindex explicit button, creation | |
4071 A common need when developing with Hyperbole is the ability to create or | |
4072 modify explicit buttons without user interaction. For example, an | |
4073 application might require the addition of an explicit summary button to | |
4074 a file for each new mail message a user reads that contains a set of | |
4075 keywords. The user could then check the summary file and jump to | |
4076 desired messages quickly. | |
4077 | |
4078 @vindex class, ebut | |
4079 @vindex file, hbut.el | |
4080 @findex ebut:create | |
4081 @findex ebut:map | |
4082 The Hyperbole class @code{ebut} supports programmatic access to explicit | |
4083 buttons. See it within the @file{hbut.el} file for full details. The | |
4084 documentation for @code{(ebut:create)} explains the set of attributes | |
4085 settings necessary to create an explicit button. For operations over | |
4086 the whole set of buttons within the visible (non-narrowed) portion of a | |
4087 buffer, use the @code{(ebut:map)} function. | |
4088 | |
4089 @page | |
4090 @node Encapsulating Systems, Embedding Hyperbole, Explicit Button Technicalities, Developing with Hyperbole | |
4091 @section Encapsulating Systems | |
4092 | |
4093 @vindex file, hsys-* | |
4094 @cindex Hyperbole, system encapsulation | |
4095 @cindex system encapsulation | |
4096 A powerful use of implicit button types is to provide a Hyperbole-based | |
4097 interface to external systems. The basic idea is to interpret patterns | |
4098 output by the application as implicit buttons. | |
4099 | |
4100 See the @file{hsys-*} files for examples of how to do this. | |
4101 Encapsulations are provided for the following systems (the systems | |
4102 themselves are not included with Hyperbole): | |
4103 | |
4104 @table @bullet | |
4105 @item World-Wide Web | |
4106 The world-wide web system originally developed at CERN, that now spans | |
4107 the Internet universe. This is automatically loaded by Hyperbole so | |
4108 that a press of the Action Key follows a URL. | |
4109 | |
4110 @item WAIS | |
4111 The Wide Area Information Systems full text-retrieval system orginally | |
4112 developed at Thinking Machines and then later at WAIS Inc. | |
4113 | |
4114 @item HyperBase | |
4115 A hypertextual storage manager that stores textual nodes as records with | |
4116 locking so that multiple users can read and edit hypertexts. | |
4117 @end table | |
4118 | |
4119 | |
4120 @node Embedding Hyperbole, , Encapsulating Systems, Developing with Hyperbole | |
4121 @section Embedding Hyperbole | |
4122 | |
4123 [NOTE: We have never done this ourselves, though we have done similar | |
4124 things which leads us to infer that the task should not be difficult.] | |
4125 | |
4126 @cindex Hyperbole API | |
4127 @cindex API | |
4128 @cindex programming interface | |
4129 @cindex Hyperbole, embedding | |
4130 The standard Emacs-based Hyperbole user interface has purposely been | |
4131 separated from the Hyperbole backend to support the development of | |
4132 alternative interfaces and the embedding of Hyperbole functionality | |
4133 within other system prototypes. The Hyperbole backend functionality | |
4134 that system developers can make use of is called its Application | |
4135 Programming Interface (API). The API may be used to make server-based | |
4136 calls to Hyperbole when Emacs is run as a non-interactive (batch) | |
4137 process, with its input/output streams attached to another process. | |
4138 | |
4139 The public functions and variables from the following files may be | |
4140 considered the present Hyperbole API: | |
4141 | |
4142 @noindent | |
4143 @file{hact.el}, @file{hargs.el}, @file{hbmap.el}, @file{hbut.el}, | |
4144 @file{hhist.el}, @file{hmail.el}, @file{hmoccur.el}, @file{hpath.el}, | |
4145 @file{htz.el}, @file{hypb.el}, @file{set.el}, @file{wconfig.el}, | |
4146 @file{wrolo.el}, and @file{wrolo-logic.el}.@refill | |
4147 | |
4148 @noindent | |
4149 Note when looking at these files, that they are divided into sections | |
4150 that separate one data abstraction (class) from another. A line of | |
4151 dashes within a class separates public parts of the class from the | |
4152 private parts that follow the line. | |
4153 | |
4154 This API does not include the Hyperbole outliner, as it has been | |
4155 designed for interactive use, rather than programmatic extensibility. | |
4156 You can certainly study its code, below the @file{hyperbole/kotl/} | |
4157 directory and learn to program it, however. | |
4158 | |
4159 | |
4160 @node Glossary, Smart Key Reference, Developing with Hyperbole, Top | |
4161 @appendix Glossary | |
4162 | |
4163 Concepts pertinent to operational usage of Hyperbole are defined here. | |
4164 If some GNU Emacs terms are unfamiliar to you, @ref{Glossary, Emacs | |
4165 Glossary,, emacs, the GNU Emacs Manual}. | |
4166 | |
4167 @table @code | |
4168 | |
4169 @cindex action | |
4170 @item action | |
4171 An executable behavior associated with a Hyperbole button. A specific | |
4172 class of actions which display entities are called @emph{links}, | |
4173 such as a link to a file. | |
4174 | |
4175 @cindex Action Key | |
4176 @item Action Key | |
4177 See @emph{Smart Key}. | |
4178 | |
4179 @cindex action type | |
4180 @item action type | |
4181 A behavioral specification for use within Hyperbole buttons. Action | |
4182 types usually contain a set of parameters which must be given values for | |
4183 each button with which they are associated. An action type together | |
4184 with a set of values, called arguments, may be considered an @emph{action}. | |
4185 @emph{Actype} is a synonym for action type. | |
4186 | |
4187 @cindex activation | |
4188 @item activation | |
4189 Request for a Hyperbole button to perform its action. | |
4190 Ordinarily the user presses a key which selects and activates a button. | |
4191 | |
4192 @cindex ange-ftp | |
4193 @cindex ftp | |
4194 @item ange-ftp | |
4195 A standard GNU Emacs Lisp package which allows one to use pathnames | |
4196 that are accessible via the Internet File Transfer Protocol (ftp) just | |
4197 like other pathnames, for example when finding a file. The | |
4198 latest version of ange-ftp may always be obtained via anonymous ftp to: | |
4199 @file{/ftp.gnu.ai.mit.edu:ange-ftp/ange-ftp.tar.gz}. | |
4200 | |
4201 @cindex argument | |
4202 @item argument | |
4203 A button-specific value fed to a Hyperbole type specification when the | |
4204 button is activated. | |
4205 | |
4206 @cindex Assist Key | |
4207 @item Assist Key | |
4208 See @emph{Smart Key}. | |
4209 | |
4210 @cindex attributes | |
4211 @item attributes | |
4212 Slot names associated with Hyperbole buttons. An @emph{attribute value} | |
4213 is associated with each button attribute. | |
4214 | |
4215 @cindex Augment | |
4216 @cindex NLS | |
4217 @cindex hypertext | |
4218 @cindex interactive computing | |
4219 @cindex mouse | |
4220 @cindex windows | |
4221 @cindex hypertext | |
4222 @cindex outline processor | |
4223 @cindex groupware | |
4224 @cindex digital signature | |
4225 @cindex Engelbart | |
4226 @item Augment | |
4227 The Augment system, originally named NLS, was a pioneering research and | |
4228 production system aimed at augmenting human intellect and group | |
4229 knowledge processing capabilities through integrated tools and | |
4230 organizational development strategies. This approach led to the | |
4231 invention of much of interactive computing technology decades ahead of | |
4232 other efforts, including: the mouse, screen windows, true hypertext, | |
4233 outline processors, groupware, and digitally signed documents. | |
4234 @xref{References}, which cites several Douglas Engelbart papers on the | |
4235 subject. The Koutliner concept emerged from studies of publicly | |
4236 available information concerning Augment. | |
4237 | |
4238 @cindex button | |
4239 @item button | |
4240 A selectable Hyperbole construct which performs an action. A button | |
4241 consists of a set of attributes that includes: a textual label, a | |
4242 category, a type and zero or more arguments. @emph{Explicit buttons} | |
4243 also have creator, create time, last modifier, and last modifier time | |
4244 attributes. | |
4245 | |
4246 Buttons provide the user's gateway to information. The user sees and | |
4247 interacts with button labels, the rest of the button data is managed | |
4248 invisibly by Hyperbole and displayed only in response to user queries. | |
4249 | |
4250 @cindex button activation | |
4251 @item button activation | |
4252 See @emph{activation}. | |
4253 | |
4254 @cindex button attributes | |
4255 @item button attributes | |
4256 See @emph{attributes}. | |
4257 | |
4258 @cindex button data | |
4259 @item button data | |
4260 Lists of button attribute values explicitly saved and managed by Hyperbole. | |
4261 One list for each button created by Hyperbole. | |
4262 | |
4263 @cindex button file, local | |
4264 @item button file, local | |
4265 A per-directory file named @file{HYPB} that may be used to store any | |
4266 desired buttons and may then be displayed via a menu selection whenever | |
4267 a user is within that directory. | |
4268 | |
4269 @cindex button file, personal | |
4270 @item button file, personal | |
4271 A per-user file named @file{HYPB} that may be used to store any desired | |
4272 buttons and may then be displayed via a menu selection. | |
4273 | |
4274 @cindex button key | |
4275 @item button key | |
4276 A normalized form of a @emph{button label} used internally by Hyperbole. | |
4277 | |
4278 @cindex button label | |
4279 @item button label | |
4280 A text string that visually indicates a Hyperbole button location and | |
4281 provides it with a name and unique identifier. Within a buffer, buttons | |
4282 with the same label are considered separate views of the same button and | |
4283 so behave exactly alike. Since button labels are simply text strings, | |
4284 they may be embedded within any text to provide non-linear information | |
4285 or operational access points. | |
4286 | |
4287 The maximum length of a button label is limited by the variable | |
4288 @var{ebut:max-len}. | |
4289 | |
4290 @cindex button selection | |
4291 @item button selection | |
4292 The act of designating a Hyperbole button upon which to operate. | |
4293 Use the Action Key to select a button. | |
4294 | |
4295 @cindex category | |
4296 @item category | |
4297 A high-level, conceptual grouping of Hyperbole buttons into classes. | |
4298 @emph{Implicit} and @emph{explicit} groupings represent categories. | |
4299 | |
4300 @cindex cell | |
4301 @item cell | |
4302 See @emph{kcell}. | |
4303 | |
4304 @cindex children | |
4305 @item children | |
4306 The set of koutline cells which share a common parent cell and are one | |
4307 level deeper than the parent. | |
4308 | |
4309 @cindex class | |
4310 @item class | |
4311 A group of functions and variables with the same prefix in their names, | |
4312 used to provide an interface to an internal or external Hyperbole | |
4313 abstraction. | |
4314 | |
4315 @cindex context | |
4316 @item context | |
4317 A programmatic or positional state recognized by Hyperbole. | |
4318 We speak of Smart Key and implicit button contexts. Both are typically | |
4319 defined in terms of surrounding patterns within a buffer, but may be | |
4320 defined by arbitrary Emacs Lisp predicates. (Context may come to have a | |
4321 broader meaning within future versions of Hyperbole.) | |
4322 | |
4323 @cindex environment | |
4324 @item environment | |
4325 See @emph{Hyperbole environment}. | |
4326 | |
4327 @cindex efs | |
4328 @item efs | |
4329 The much larger successor to ange-ftp. It does the same thing as | |
4330 ange-ftp but works with more types of ftp hosts. See @emph{ange-ftp}. | |
4331 | |
4332 @cindex explicit button | |
4333 @item explicit button | |
4334 A button created and managed by Hyperbole. By default, explicit buttons | |
4335 are delimited like this @code{<(fake button)>}. Direct selection is | |
4336 used to operate upon an explicit button. | |
4337 | |
4338 @cindex global button | |
4339 @item global button | |
4340 @vindex gbut:file | |
4341 A form of explicit button which is typically accessed by name rather | |
4342 than direct selection. Global buttons are useful when one wants | |
4343 quick access to actions such as jumping to common file locations or for | |
4344 performing sequences of operations. One need not locate them since they | |
4345 are always available by name, with full completion offered. All global | |
4346 buttons are stored in the file given by the variable @var{gbut:file} and | |
4347 may be activated as regular explicit buttons by visiting this file. By | |
4348 default, this is the same as the user's personal button file. | |
4349 | |
4350 @cindex global button file | |
4351 @item global button file | |
4352 See @emph{button file, personal}. | |
4353 | |
4354 @findex run-hooks | |
4355 @cindex hook variable | |
4356 @item hook variable | |
4357 A variable that permits customization of an existing function's | |
4358 operation without the need to edit the function's code. See also the | |
4359 documentation for the function @code{(run-hooks)}. | |
4360 | |
4361 @cindex Hyperbole | |
4362 @item Hyperbole | |
4363 A flexible, programmable information management and viewing system built | |
4364 on top of GNU Emacs. It utilizes a button-action model and supports | |
4365 hypertextual linkages. Hyperbole is all things to all people. | |
4366 | |
4367 @cindex Hyperbole environment | |
4368 @item Hyperbole environment | |
4369 A programmatic context within which Hyperbole operates. This includes | |
4370 the set of Hyperbole types defined and the set of Hyperbole code modules | |
4371 loaded. It does not include the set of accessible buttons. | |
4372 Although the entire Emacs environment is available to Hyperbole, we do | |
4373 not speak of this as part of the Hyperbole environment. | |
4374 | |
4375 @cindex hypertext | |
4376 @item hypertext | |
4377 A text or group of texts which may be explored in a non-linear fashion | |
4378 through associative linkages embedded throughout the text. Instead of | |
4379 simply referring to other pieces of work, hypertext references when | |
4380 followed actually take you to the works themselves. | |
4381 | |
4382 @cindex implicit button | |
4383 @item implicit button | |
4384 A button recognized contextually by Hyperbole. Such buttons contain no | |
4385 button data. See also @emph{implicit button type}. | |
4386 | |
4387 @cindex implicit button type | |
4388 @item implicit button type | |
4389 A specification of how to recognize and activate implicit buttons of a | |
4390 specific kind. Implicit button types often utilize structure internal | |
4391 to documents created and managed without Hyperbole assistance, for | |
4392 example, programming documentation. @emph{Ibtype} is a synonym for | |
4393 implicit button type. See also @emph{system encapsulation}. | |
4394 | |
4395 @cindex instance number | |
4396 @item instance number | |
4397 A colon prefaced number appended to the label of a newly created button | |
4398 when the button's label duplicates the label of an existing button in | |
4399 the current buffer. This number makes the label unique and so allows | |
4400 any number of buttons with the same base label within a single buffer. | |
4401 | |
4402 @cindex koutline | |
4403 @item koutline | |
4404 A hierarchically ordered grouping of cells which may be stored as a file | |
4405 and viewed and edited as an outline. | |
4406 | |
4407 @cindex Koutliner | |
4408 @item Koutliner | |
4409 Koutliner, the Hyperbole outliner, is a powerful autonumbering outliner | |
4410 with permanent hypertext anchors for easy hyperlinking and view | |
4411 specs for rapid outline view alteration. | |
4412 | |
4413 @cindex kcell | |
4414 @item kcell | |
4415 Cells or kcells are elements within koutlines. Each cell contains | |
4416 textual and graphical contents, a relative identifier, a permanent | |
4417 identifier and a set of attributes such as the user who created the cell | |
4418 and the time of creation. See also @emph{Koutliner}. | |
4419 | |
4420 @cindex link | |
4421 @item link | |
4422 A reference from a Hyperbole button to an entity. The referenced entity | |
4423 is sometimes called a @emph{node} or @emph{referent}. | |
4424 A specific class of actions which display entities are called | |
4425 @emph{links}, such as a link to a file. | |
4426 | |
4427 @cindex local button file | |
4428 @item local button file | |
4429 See @emph{button file, local}. | |
4430 | |
4431 @cindex minibuffer window | |
4432 @item minibuffer window | |
4433 The one line window at the bottom of a frame where messages and prompts | |
4434 are displayed. | |
4435 | |
4436 @cindex minibuffer menu | |
4437 @item minibuffer menu | |
4438 A Hyperbole menu displayed in the minibuffer window. Each menu item | |
4439 within a minibuffer menu begins with a different letter that can be used | |
4440 to invoke the item (case doesn't matter). Items that display other | |
4441 menus end with a forward slash, /. | |
4442 | |
4443 @cindex mouse button | |
4444 @item mouse button | |
4445 @item mouse key | |
4446 See @emph{Smart Key}. | |
4447 | |
4448 @cindex node | |
4449 @item node | |
4450 See @emph{link} or @emph{cell}. | |
4451 | |
4452 @cindex outline | |
4453 @item outline | |
4454 See @emph{koutline}. | |
4455 | |
4456 @cindex parent | |
4457 @item parent | |
4458 Any koutline cell which has children. | |
4459 | |
4460 @cindex predecessor | |
4461 @item predecessor | |
4462 The previous same level koutline cell with the same parent. | |
4463 | |
4464 @cindex predicate | |
4465 @item predicate | |
4466 A boolean (nil = false, non-nil = true) Lisp expression typically | |
4467 evaluated as part of a conditional expression. | |
4468 | |
4469 @cindex referent | |
4470 @item referent | |
4471 See @emph{link}. | |
4472 | |
4473 @cindex rolodex | |
4474 @item rolodex | |
4475 Wrolo, the Hyperbole rolodex, provides rapid lookup of multi-line, | |
4476 hierarchically ordered free form text records. | |
4477 | |
4478 @cindex root cell | |
4479 @item root cell | |
4480 A koutline cell which has cells below it. All such cells share the same | |
4481 root cell. | |
4482 | |
4483 @cindex Smart Key | |
4484 @vindex smart-scroll-proportional | |
4485 @cindex proportional scrolling | |
4486 @cindex scrolling | |
4487 @item Smart Key | |
4488 A context-sensitive key used within Hyperbole and beyond. Actually, | |
4489 there are two Smart Keys, the Action Key and the Assist Key. The | |
4490 Action Key, typically bound to the shift-middle mouse key (or shift-left | |
4491 mouse key on a 2-button mouse), activates Hyperbole buttons and scrolls | |
4492 the current buffer line to the top of the window when pressed at the end | |
4493 of a line. The Assist Key, typically bound to the shift-right mouse | |
4494 key, explains what a Hyperbole button does or scrolls the current line | |
4495 to the bottom of the window when pressed at the end of a line. (See the | |
4496 documentation for the variable, @var{smart-scroll-proportional}, for | |
4497 information on how to make these keys scroll forward and backward a | |
4498 windowful at a time). | |
4499 | |
4500 To see what a Smart Key will do within a particular context, depress and | |
4501 hold the key at the point desired and depress the other Smart Key. A | |
4502 buffer containing a description of its contextual function will then be | |
4503 displayed. You may release the two keys in any order after you have | |
4504 them both depressed. A press of the Assist Key in an unsupported | |
4505 context displays a summary of Smart Key functions in each context, as | |
4506 does the Doc/SmartKy menu item. | |
4507 | |
4508 @cindex source buffer | |
4509 @cindex source file | |
4510 @item source buffer / file | |
4511 The buffer or file within which a Hyperbole button is embedded. | |
4512 | |
4513 @cindex subtree | |
4514 @item subtree | |
4515 All of the cells in a koutline which share the same root cell, excluding | |
4516 the root cell. | |
4517 | |
4518 @cindex successor | |
4519 @item successor | |
4520 The next same level koutline cell with the same parent. | |
4521 | |
4522 @cindex system encapsulation | |
4523 @item system encapsulation | |
4524 Use of Hyperbole to provide an improved or simply consistent user | |
4525 interface to another system. Typically, implicit button types are | |
4526 defined to recognize and activate button-type constructs managed by the | |
4527 other system. | |
4528 | |
4529 @cindex tree | |
4530 @item tree | |
4531 The set of cells in a koutline that share a common root cell, including | |
4532 the root cell. | |
4533 | |
4534 @cindex view | |
4535 @item view | |
4536 A perspective on some information. A view can affect the extent of the | |
4537 information displayed, its format, modes used to operate on it, its | |
4538 display location and so forth. | |
4539 | |
4540 @cindex view spec | |
4541 @item view spec | |
4542 A terse (and to the uninitiated, cryptic) string that specifies a | |
4543 particular view of koutline or a link referent. If a view spec is in | |
4544 use in a buffer, the view spec appears in the modeline delimited by | |
4545 <|view spec>. | |
4546 | |
4547 @end table | |
4548 | |
4549 @node Smart Key Reference, Outliner Keys, Glossary, Top | |
4550 @appendix Smart Key Reference | |
4551 | |
4552 This appendix supplies complete documentation on Smart Key operation. It is | |
4553 quite extensive and is meant for reference rather than sequential reading. | |
4554 @xref{Smart Keys}, for a description of the Smart Keys. That section also | |
4555 describes how to get context-sensitive Smart Key help, with which you can | |
4556 explore Smart Key operation bit by bit. | |
4557 | |
4558 Smart Key operations are context-sensitive. Contexts are described herein as | |
4559 conditionals, e.g@. when depressed here, if this is true, etc. Each Smart | |
4560 Key context is listed in the order in which it will be checked. The first | |
4561 matching context is always the one applied. Within each context, the | |
4562 actions performed by the Action and Assist Keys are listed. | |
4563 | |
4564 @menu | |
4565 * Smart Mouse Keys:: | |
4566 * Smart Keyboard Keys:: | |
4567 @end menu | |
4568 | |
4569 @node Smart Mouse Keys, Smart Keyboard Keys, Smart Key Reference, Smart Key Reference | |
4570 @section Smart Mouse Keys | |
4571 | |
4572 @cindex Smart Mouse Keys | |
4573 Smart Key drags and modeline presses can only be used when running under | |
4574 a window system with mouse key support. So keep in mind that the | |
4575 operations in this section apply only if you have mouse support within | |
4576 Hyperbole. The Smart Key operations in, @ref{Smart Keyboard Keys}, | |
4577 apply to both mouse and keyboard Smart Key usage. | |
4578 | |
4579 @format | |
4580 @group | |
4581 @cindex drag, side edge | |
4582 @cindex side drag | |
4583 If dragged from a side-by-side window edge or from the immediate left of | |
4584 a vertical scroll bar: | |
4585 ACTION or ASSIST | |
4586 Resizes adjacent window sides to the point of drag release. | |
4587 @end group | |
4588 @end format | |
4589 | |
4590 @format | |
4591 @group | |
4592 @cindex drag, between windows | |
4593 If dragged from inside one window to another: | |
4594 ACTION | |
4595 Creates a new link button at the drag start location, linked to the | |
4596 drag end location. If drag start position is within a button, | |
4597 modifies the button to link to drag end location. | |
4598 ASSIST | |
4599 Swaps buffers in the two windows. | |
4600 @end group | |
4601 @end format | |
4602 | |
4603 @page | |
4604 @format | |
4605 @group | |
4606 @cindex drag, horizontal | |
4607 @cindex horizontal drag | |
4608 If dragged horizontally within a single window while depressed | |
4609 (hmouse-x-drag-sensitivity sets the minimal horizontal movement which | |
4610 registers a drag): | |
4611 ACTION | |
4612 Goes to buffer end if drag was to the right, otherwise goes to beginning. | |
4613 ASSIST | |
4614 Splits window vertically if drag was to the right, otherwise deletes | |
4615 window. | |
4616 @end group | |
4617 @end format | |
4618 | |
4619 @format | |
4620 @group | |
4621 @cindex depress, modeline | |
4622 @cindex modeline depress | |
4623 If depressed within a window mode line: | |
4624 ACTION | |
4625 (1) clicked on left edge of a window's modeline, | |
4626 window's buffer is buried (placed at bottom of buffer list); | |
4627 (2) clicked on right edge of a window's modeline, | |
4628 the Info buffer is displayed, or if already displayed and the | |
4629 modeline clicked belongs to a window displaying Info, the Info | |
4630 buffer is hidden; | |
4631 (3) clicked anywhere in the middle of a window's modeline, | |
4632 the functions listed in 'assist-key-modeline-hook' are | |
4633 called; | |
4634 (4) dragged vertically from modeline to within a window, | |
4635 the modeline is moved to point of key release, thereby resizing | |
4636 its window and potentially its vertical neighbors. | |
4637 ASSIST | |
4638 (1) clicked on left edge of a window's modeline, | |
4639 bottom buffer in buffer list is unburied and placed in window; | |
4640 (2) clicked on right edge of a window's modeline, | |
4641 the summary of Smart Key behavior is displayed, or if already | |
4642 displayed and the modeline clicked belongs to a window displaying | |
4643 the summary, the summary buffer is hidden; | |
4644 (3) clicked anywhere in the middle of a window's modeline, | |
4645 a popup menu (if available) is displayed; | |
4646 (4) dragged vertically from modeline to within a window, | |
4647 the modeline is moved to point of key release, thereby resizing | |
4648 its window and potentially its vertical neighbors. | |
4649 @end group | |
4650 @end format | |
4651 | |
4652 @page | |
4653 @format | |
4654 @group | |
4655 @cindex drag, vertical | |
4656 @cindex vertical drag | |
4657 If dragged vertically within a single window while depressed | |
4658 (hmouse-y-drag-sensitivity sets the minimal vertical movement which | |
4659 registers a drag): | |
4660 ACTION or ASSIST | |
4661 Splits current window into two side-by-side windows. | |
4662 @end group | |
4663 @end format | |
4664 | |
4665 @format | |
4666 @group | |
4667 @cindex drag, diagonal | |
4668 @cindex diagonal drag | |
4669 If dragged diagonally within a single window while depressed | |
4670 (hmouse-x-diagonal-sensitivity and hmouse-y-diagonal-sensitivity set the | |
4671 minimal diagonal movement which registers a drag): | |
4672 ACTION | |
4673 Save current window configuration onto a ring of window configurations. | |
4674 ASSIST | |
4675 Restores prior window configuration from ring. A prefix argument N | |
4676 specifies the Nth prior configuration from the ring. | |
4677 @end group | |
4678 @end format | |
4679 | |
4680 @page | |
4681 | |
4682 @node Smart Keyboard Keys, , Smart Mouse Keys, Smart Key Reference | |
4683 @section Smart Keyboard Keys | |
4684 | |
4685 @cindex Smart Keyboard Keys | |
4686 @format | |
4687 @group | |
4688 When prompting for a Hyperbole argument, a press in the minibuffer: | |
4689 ACTION | |
4690 Terminates this minibuffer argument. | |
4691 ASSIST | |
4692 Offers completion help for current minibuffer argument. | |
4693 @end group | |
4694 @end format | |
4695 | |
4696 @format | |
4697 @group | |
4698 When reading a Hyperbole menu item or a Hyperbole completion-based argument: | |
4699 ACTION | |
4700 Returns value selected at point if any, else nil. If | |
4701 value is the same as the contents of the minibuffer, it is used as the | |
4702 current minibuffer argument, otherwise, the minibuffer is erased and | |
4703 value is inserted there. | |
4704 | |
4705 ASSIST | |
4706 Displays Hyperbole menu item help when item is selected. | |
4707 @end group | |
4708 @end format | |
4709 | |
4710 @vindex smart-scroll-proportional | |
4711 @cindex proportional scrolling | |
4712 @cindex scrolling | |
4713 @format | |
4714 @group | |
4715 @cindex click, end of line | |
4716 @cindex end of line click | |
4717 When pressed at the end of a line but not the end of a buffer: | |
4718 ACTION | |
4719 Scrolls up according to value of smart-scroll-proportional. If | |
4720 smart-scroll-proportional is nil or if point is on the top | |
4721 window line, scrolls up (forward) a windowful. Otherwise, tries to | |
4722 bring current line to top of window. Leaves point at end of line and | |
4723 returns t if scrolled, nil if not. | |
4724 ASSIST | |
4725 Scrolls down according to value of smart-scroll-proportional. If | |
4726 smart-scroll-proportional is nil or if point is on the | |
4727 bottom window line, scrolls down (backward) a windowful. Otherwise, | |
4728 tries to bring current line to bottom of window. Leaves point at end of | |
4729 line and returns t if scrolled, nil if not. | |
4730 @end group | |
4731 @end format | |
4732 | |
4733 @format | |
4734 @group | |
4735 @cindex click, button | |
4736 @cindex button click | |
4737 When pressed on a Hyperbole button: | |
4738 ACTION | |
4739 Activates button. | |
4740 ASSIST | |
4741 Displays help for button, typically a summary of its attributes. | |
4742 @end group | |
4743 @end format | |
4744 | |
4745 @format | |
4746 @group | |
4747 If pressed within a buffer in View major or minor mode: | |
4748 ACTION | |
4749 Scrolls buffer forward a windowful and quits from view mode when at | |
4750 the last line of the buffer. | |
4751 ASSIST | |
4752 Scrolls buffer backward a windowful. | |
4753 @end group | |
4754 @end format | |
4755 | |
4756 @format | |
4757 @group | |
4758 When pressed within a Hyperbole outliner buffer (kotl-mode): | |
4759 ACTION | |
4760 (1) at the end of buffer, uncollapse and unhide all cells in view; | |
4761 (2) within a cell, if its subtree is hidden then show it, | |
4762 otherwise hide it; | |
4763 (3) between cells or within the read-only indentation region to the | |
4764 left of a cell, then move point to prior location and begin | |
4765 creation of a klink to some other outline cell; hit the Action | |
4766 Key twice to select the link referent cell; | |
4767 (4) anywhere else, scroll up a windowful. | |
4768 ASSIST | |
4769 (1) at the end of buffer, collapse all cells and hide all non-level-one | |
4770 cells; | |
4771 (2) on a header line but not at the beginning or end, display | |
4772 properties of each cell in kotl beginning at point; | |
4773 (3) between cells or within the read-only indentation region to the | |
4774 left of a cell, then move point to prior location and prompt to | |
4775 move one tree to a new location in the outline; hit the Action | |
4776 Key twice to select the tree to move and where to move it; | |
4777 (4) anywhere else, scroll down a windowful. | |
4778 @end group | |
4779 @end format | |
4780 | |
4781 @format | |
4782 @group | |
4783 When pressed on a Smart Menu item: | |
4784 ACTION | |
4785 Activates item. | |
4786 ASSIST | |
4787 Displays help for item. | |
4788 @end group | |
4789 @end format | |
4790 | |
4791 @page | |
4792 @format | |
4793 @group | |
4794 When pressed at the end of a Help buffer: | |
4795 ACTION or ASSIST | |
4796 Restores window configuration prior to help display. | |
4797 @end group | |
4798 @end format | |
4799 | |
4800 @format | |
4801 @group | |
4802 When pressed within an OO-Browser listing window: | |
4803 ACTION | |
4804 (1) in a blank buffer or at the end of a buffer, browser help | |
4805 information is displayed in the viewer window; | |
4806 (2) at the beginning of a (non-single char) class name, the class' | |
4807 ancestors are listed; | |
4808 (3) at the end of an entry line, scrolls listing up; | |
4809 (4) on the '...', following a class name, point is moved to the class | |
4810 descendency expansion; | |
4811 (5) before an element name, the implementor classes of the name are | |
4812 listed; | |
4813 (6) anywhere else on an entry line, the source is displayed for editing. | |
4814 ASSIST | |
4815 (1) in a blank buffer, a selection list of buffer files is displayed; | |
4816 (2) at the beginning of a (non-single char) entry, the class' | |
4817 descendants are listed; | |
4818 (3) at the end of an entry line, scrolls listing down; | |
4819 (4) on the '...', following a class name, point is moved to the class | |
4820 expansion; | |
4821 (5) anywhere else on a class entry line, lists the class' elements; | |
4822 (6) anywhere else on an element line, lists the element's implementor | |
4823 classes; | |
4824 (7) on a blank line following all entries, the current listing buffer | |
4825 is exited. | |
4826 @end group | |
4827 @end format | |
4828 | |
4829 @format | |
4830 @group | |
4831 When pressed within an OO-Browser Command Help Menu buffer: | |
4832 ACTION | |
4833 Executes an OO-Browser command whose key binding is at point. | |
4834 ASSIST | |
4835 Displays help for an OO-Browser command whose key binding is at point. | |
4836 @end group | |
4837 @end format | |
4838 | |
4839 @format | |
4840 @group | |
4841 When pressed on an identifier within an OO-Browser source file: | |
4842 ACTION | |
4843 Tries to display identifier definition. | |
4844 ASSIST | |
4845 Not applicable. | |
4846 @end group | |
4847 @end format | |
4848 | |
4849 @page | |
4850 @format | |
4851 @group | |
4852 When pressed within a C source code file: | |
4853 ACTION | |
4854 Jumps to the definition of selected C construct: | |
4855 (1) on a '#include' statement, the include file is displayed; | |
4856 Look for include file in directory lists | |
4857 'smart-c-cpp-include-dirs' and 'smart-c-include-dirs'. | |
4858 (2) on a C identifier, the identifier definition is displayed, | |
4859 assuming the identifier is found within an 'etags' generated tag file | |
4860 in the current directory or any of its ancestor directories. | |
4861 (3) if 'smart-c-use-lib-man' is non-nil, the C identifier is | |
4862 recognized as a library symbol, and a man page is found for the | |
4863 identifier, then the man page is displayed. | |
4864 ASSIST | |
4865 Jumps to the next tag matching an identifier at point. | |
4866 @end group | |
4867 @end format | |
4868 | |
4869 @format | |
4870 @group | |
4871 When pressed within an assembly source code file: | |
4872 ACTION | |
4873 Jumps to the definition of selected assembly construct: | |
4874 (1) on an include statement, the include file is displayed; | |
4875 Look for include file in directory list | |
4876 'smart-asm-include-dirs'. | |
4877 (2) on an identifier, the identifier definition is displayed, | |
4878 assuming the identifier is found within an 'etags' generated | |
4879 tag file in the current directory or any of its ancestor | |
4880 directories. | |
4881 ASSIST | |
4882 Jumps to the next tag matching an identifier at point. | |
4883 @end group | |
4884 @end format | |
4885 | |
4886 @page | |
4887 @format | |
4888 @group | |
4889 When pressed within a C++ source code file: | |
4890 ACTION | |
4891 Jumps to the definition of selected C+ construct: | |
4892 (1) on a '#include' statement, the include file is displayed; | |
4893 Look for include file in directory lists | |
4894 'smart-c-cpp-include-dirs' and 'smart-c-include-dirs'. | |
4895 (2) on a C++ identifier, the identifier definition is displayed, | |
4896 assuming the identifier is found within an 'etags' generated tag file | |
4897 in the current directory or any of its ancestor directories. | |
4898 (3) if 'smart-c-use-lib-man' is non-nil, the C++ identifier is | |
4899 recognized as a library symbol, and a man page is found for the | |
4900 identifier, then the man page is displayed. | |
4901 ASSIST | |
4902 Jumps to the next tag matching an identifier at point. | |
4903 @end group | |
4904 @end format | |
4905 | |
4906 @format | |
4907 @group | |
4908 When pressed within a Objective-C source code file: | |
4909 ACTION | |
4910 Jumps to the definition of selected C+ construct: | |
4911 (1) on a '#include' statement, the include file is displayed; | |
4912 Look for include file in directory lists | |
4913 'smart-c-cpp-include-dirs' and 'smart-c-include-dirs'. | |
4914 (2) on an Objective-C identifier, the identifier definition is displayed, | |
4915 assuming the identifier is found within an 'etags' generated tag file | |
4916 in the current directory or any of its ancestor directories. | |
4917 (3) if 'smart-c-use-lib-man' is non-nil, the Objective-C identifier is | |
4918 recognized as a library symbol, and a man page is found for the | |
4919 identifier, then the man page is displayed. | |
4920 ASSIST | |
4921 Jumps to the next tag matching an identifier at point. | |
4922 @end group | |
4923 @end format | |
4924 | |
4925 @page | |
4926 @format | |
4927 @group | |
4928 When pressed on a Lisp symbol within a Lisp code buffer: | |
4929 ACTION | |
4930 Jumps to the definition of any selected Lisp construct. | |
4931 If on an Emacs Lisp require, load, or autoload clause and 'find-library' | |
4932 from load-library package by Hallvard Furuseth <hallvard@@ifi.uio.no> has | |
4933 been loaded, jumps to library source, if possible. | |
4934 ASSIST | |
4935 Jumps to the next tag matching an identifier at point or if using the | |
4936 "wtags" package and identifier is an Emacs Lisp symbol, then displays | |
4937 documentation for the symbol. | |
4938 @end group | |
4939 @end format | |
4940 | |
4941 @format | |
4942 @group | |
4943 When the OO-Browser has been loaded and the press is within a C++ buffer: | |
4944 ACTION or ASSIST | |
4945 Jumps to the definition of selected C++ construct via OO-Browser support. | |
4946 (1) on a '#include' statement, the include file is displayed; | |
4947 Look for include file in directory lists | |
4948 'smart-c-cpp-include-dirs' and 'smart-c-include-dirs'. | |
4949 (2) within a method declaration, its definition is displayed; | |
4950 (3) on a class name, the class definition is shown. | |
4951 @end group | |
4952 @end format | |
4953 | |
4954 @format | |
4955 @group | |
4956 When the OO-Browser has been loaded and the press is within a | |
4957 Objective-C buffer: | |
4958 ACTION or ASSIST | |
4959 Jumps to the definition of selected Objective-C construct via | |
4960 OO-Browser support. | |
4961 (1) on a '#include' statement, the include file is displayed; | |
4962 Look for include file in directory lists | |
4963 'smart-c-cpp-include-dirs' and 'smart-c-include-dirs'. | |
4964 (2) within a method declaration, its definition is displayed; | |
4965 (3) on a class name, the class definition is shown. | |
4966 @end group | |
4967 @end format | |
4968 | |
4969 @format | |
4970 @group | |
4971 When pressed within an occur-mode or moccur-mode buffer: | |
4972 ACTION or ASSIST | |
4973 Jumps to the source buffer and line of the current occurrence. | |
4974 @end group | |
4975 @end format | |
4976 | |
4977 @page | |
4978 @format | |
4979 @group | |
4980 When pressed within a calendar-mode buffer: | |
4981 ACTION | |
4982 (1) at the end of the buffer, the calendar is scrolled forward 3 months; | |
4983 (2) to the left of any dates on a calendar line, the calendar is scrolled | |
4984 backward 3 months; | |
4985 (3) on a date, the diary entries for the date, if any, are displayed. | |
4986 ASSIST | |
4987 (1) at the end of the buffer, the calendar is scrolled backward 3 months; | |
4988 (2) to the left of any dates on a calendar line, the calendar is scrolled | |
4989 forward 3 months; | |
4990 (3) anywhere else, all dates with marking diary entries are marked in the | |
4991 calendar window. | |
4992 @end group | |
4993 @end format | |
4994 | |
4995 @format | |
4996 @group | |
4997 When pressed within a man page apropos buffer: | |
4998 ACTION | |
4999 (1) on a UNIX man apropos entry, the man page for that entry is | |
5000 displayed in another window; | |
5001 (2) on or after the last line, the buffer in the other window is | |
5002 scrolled up a windowful. | |
5003 ASSIST | |
5004 (1) on a UNIX man apropos entry, the man page for that entry is | |
5005 displayed in another window; | |
5006 (2) on or after the last line, the buffer in the other window is | |
5007 scrolled down a windowful. | |
5008 @end group | |
5009 @end format | |
5010 | |
5011 @format | |
5012 @group | |
5013 If Smart Menu package has been loaded and 'hkey-always-display-menu' is | |
5014 non-nil: | |
5015 ACTION or ASSIST | |
5016 Pops up a window with a Smart Menu of commands. | |
5017 Menu displayed is selected by (smart-menu-choose-menu). | |
5018 @end group | |
5019 @end format | |
5020 | |
5021 @page | |
5022 @format | |
5023 @group | |
5024 If pressed within an outline-mode buffer or when 'selective-display' is | |
5025 non-nil: | |
5026 ACTION | |
5027 Collapses, expands, and moves outline entries. | |
5028 (1) after an outline heading has been cut via the Action Key, then paste | |
5029 the cut heading at point; | |
5030 (2) at the end of buffer, show all buffer text | |
5031 (3) at the beginning of a heading line, cut the headings subtree from the | |
5032 buffer; | |
5033 (4) on a header line but not at the beginning or end, if headings | |
5034 subtree is hidden then show it, otherwise hide it; | |
5035 (5) anywhere else, scroll up a windowful. | |
5036 ASSIST | |
5037 (1) after an outline heading has been cut via the Action Key, allow | |
5038 multiple pastes throughout the buffer (last paste should be done | |
5039 with the Action Key, not the Assist Key); | |
5040 (2) at the end of buffer, hide all bodies in buffer; | |
5041 (3) at the beginning of a heading line, cut the current heading (sans | |
5042 subtree) from the buffer; | |
5043 (4) on a header line but not at the beginning or end, if heading body is | |
5044 hidden then show it, otherwise hide it; | |
5045 (5) anywhere else, scroll down a windowful. | |
5046 @end group | |
5047 @end format | |
5048 | |
5049 @format | |
5050 @group | |
5051 @cindex click, Info | |
5052 @cindex Info browsing | |
5053 If pressed within an Info manual node: | |
5054 ACTION | |
5055 (1) the first line of an Info Menu Entry or Cross Reference, the desired | |
5056 node is found; | |
5057 (2) the Up,Next,or Previous entries of a Node Header (first line), | |
5058 the desired node is found; | |
5059 (3) the File entry of a Node Header (first line), | |
5060 the 'Top' node within that file is found; | |
5061 (4) at the end of the current node, the Next node is found (this will | |
5062 descend subtrees if the function 'Info-global-next' is bound); | |
5063 (5) anywhere else (e.g@. at the end of a line), the current node entry is | |
5064 scrolled up a windowful. | |
5065 ASSIST | |
5066 (1) the first line of an Info Menu Entry or Cross Reference, the desired | |
5067 node is found; | |
5068 (2) the Up,Next,or Previous entries of a Node Header (first line), | |
5069 the last node in the history list is found; | |
5070 (3) the File entry of a Node Header (first line), | |
5071 the 'DIR' root-level node is found; | |
5072 (4) at the end of the current node, the Previous node is found (this will | |
5073 return from subtrees if the function 'Info-global-prev is bound); | |
5074 (5) anywhere else (e.g@. at the end of a line), the current node entry is | |
5075 scrolled down a windowful. | |
5076 @end group | |
5077 @end format | |
5078 | |
5079 @page | |
5080 @format | |
5081 @group | |
5082 If pressed within a Hyperbole-supported mail reader, 'hmail:reader', or mail | |
5083 summary mode, 'hmail:lister', buffer at: | |
5084 ACTION | |
5085 (1) a msg buffer, within the first line or at the end of a message, | |
5086 the next undeleted message is displayed; | |
5087 (2) a msg buffer within the first line of an Info cross reference, the | |
5088 reference is followed; | |
5089 (3) anywhere else in a msg buffer, the window is scrolled up one | |
5090 windowful; | |
5091 (4) a msg summary buffer on a header entry, the message corresponding to | |
5092 the header is displayed in the msg window; | |
5093 (5) a msg summary buffer, on or after the last line, the messages marked | |
5094 for deletion are expunged. | |
5095 ASSIST | |
5096 (1) a msg buffer, within the first line or at the end of a message, | |
5097 the previous undeleted message is displayed; | |
5098 (2) a msg buffer within the first line of an Info cross reference, the | |
5099 reference is followed; | |
5100 (3) anywhere else in a msg buffer, the window is scrolled down one | |
5101 windowful; | |
5102 (4) a msg summary buffer on a header entry, the message corresponding to | |
5103 the header is marked as deleted; | |
5104 (5) a msg summary buffer, on or after the last line, all messages are | |
5105 marked undeleted. | |
5106 @end group | |
5107 @end format | |
5108 | |
5109 @format | |
5110 @group | |
5111 @cindex click, GNUS | |
5112 @cindex GNUS browsing | |
5113 If pressed within a GNUS listing of newsgroups buffer at: | |
5114 ACTION | |
5115 (1) a GNUS-GROUP line, that newsgroup is read; | |
5116 (2) to the left of any GNUS-GROUP line, on any of the whitespace, the | |
5117 current group is unsubscribed or resubscribed; | |
5118 (3) at the end of the GNUS-GROUP buffer, after all lines, checks for new | |
5119 news. | |
5120 ASSIST | |
5121 (1) a GNUS-GROUP line, that newsgroup is read; | |
5122 (2) to the left of any GNUS-GROUP line, on any of the whitespace, the | |
5123 user is prompted for a group name to subscribe or unsubscribe to; | |
5124 (3) at the end of the GNUS-GROUP buffer, after all lines, quits from the | |
5125 newsreader. | |
5126 @end group | |
5127 @end format | |
5128 | |
5129 @page | |
5130 @format | |
5131 @group | |
5132 If pressed within a GNUS newsreader subject listing buffer at: | |
5133 ACTION | |
5134 (1) a GNUS-SUBJECT line, that article is read, marked deleted, and | |
5135 scrolled forward; | |
5136 (2) at the end of the GNUS-SUBJECT buffer, the next undeleted article | |
5137 is read or the next group is entered. | |
5138 ASSIST | |
5139 (1) a GNUS-SUBJECT line, that article is read and scrolled backward; | |
5140 (2) at the end of the GNUS-SUBJECT buffer, the subject is exited, the | |
5141 user is returned to group mode. | |
5142 @end group | |
5143 @end format | |
5144 | |
5145 @format | |
5146 @group | |
5147 If pressed within a GNUS newsreader article buffer at: | |
5148 ACTION | |
5149 (1) the first line or end of an article, the next unread message is | |
5150 displayed; | |
5151 (2) the first line of an Info cross reference, the reference is followed; | |
5152 (3) anywhere else, the window is scrolled up a windowful. | |
5153 ASSIST | |
5154 (1) the first line or end of an article, the previous message is | |
5155 displayed; | |
5156 (2) the first line of an Info cross reference, the reference is followed; | |
5157 (3) anywhere else, the window is scrolled down a windowful. | |
5158 @end group | |
5159 @end format | |
5160 | |
5161 @page | |
5162 @format | |
5163 @group | |
5164 @cindex click, buffer menu | |
5165 @cindex buffer menu | |
5166 If pressed within a listing of buffers (Buffer-menu-mode): | |
5167 ACTION | |
5168 (1) on the first column of an entry, the selected buffer is marked for | |
5169 display; | |
5170 (2) on the second column of an entry, the selected buffer is marked to be | |
5171 saved; | |
5172 (3) anywhere else within an entry line, all saves and deletes are done, | |
5173 and selected buffers are displayed, including the one just clicked | |
5174 on (if in the OO-Browser, only the selected buffer is displayed); | |
5175 (4) on or after the last line in the buffer, all saves and deletes are | |
5176 done. | |
5177 ASSIST | |
5178 (1) on the first or second column of an entry, the selected buffer is | |
5179 unmarked for display and for saving or deletion; | |
5180 (2) anywhere else within an entry line, the selected buffer is marked for | |
5181 deletion; | |
5182 (3) on or after the last line in the buffer, all display, save, and delete | |
5183 marks on all entries are undone. | |
5184 @end group | |
5185 @end format | |
5186 | |
5187 @format | |
5188 @group | |
5189 @cindex click, dired | |
5190 @cindex dired browsing | |
5191 If pressed within a dired-mode buffer: | |
5192 ACTION | |
5193 (1) within an entry line, the selected file/directory is displayed | |
5194 for editing in the other window; | |
5195 (2) on or after the last line in the buffer, if any deletes are to be | |
5196 performed, they are executed after user verification, otherwise, this | |
5197 dired invocation is quit. | |
5198 ASSIST | |
5199 (1) on a '~' character, all backup files in the directory are marked for | |
5200 deletion; | |
5201 (2) on a '#' character, all auto-save files in the directory are marked | |
5202 for deletion; | |
5203 (3) anywhere else within an entry line, the current entry is marked for | |
5204 deletion; | |
5205 (4) on or after the last line in the buffer, all delete marks on all | |
5206 entries are undone. | |
5207 @end group | |
5208 @end format | |
5209 | |
5210 @page | |
5211 @format | |
5212 @group | |
5213 @cindex click, tar | |
5214 @cindex tar archive browsing | |
5215 @cindex extracting from tar files | |
5216 If pressed within a tar-mode buffer: | |
5217 ACTION | |
5218 (1) within an entry line, the selected file/directory is displayed | |
5219 for editing in the other window; | |
5220 (2) on or after the last line in the buffer, if any deletes are to be | |
5221 performed, they are executed after user verification, otherwise, this | |
5222 tar file browser is quit. | |
5223 ASSIST | |
5224 (1) on an entry line, the current entry is marked for deletion; | |
5225 (2) on or after the last line in the buffer, all delete marks on all | |
5226 entries are undone. | |
5227 @end group | |
5228 @end format | |
5229 | |
5230 @format | |
5231 @group | |
5232 @cindex man page references | |
5233 If pressed on a cross reference within a man page entry section labeled | |
5234 NAME, SEE ALSO, or PACKAGES USED, or within a man page C routine | |
5235 specification (see 'smart-man-c-routine-ref') and man page buffer | |
5236 has either an attached file or else a @var{man-path} local variable | |
5237 containing its pathname: | |
5238 ACTION or ASSIST | |
5239 Displays man page or source code for cross reference. | |
5240 @end group | |
5241 @end format | |
5242 | |
5243 @format | |
5244 @group | |
5245 @cindex click, world-wide web | |
5246 @cindex W3 | |
5247 @cindex URL | |
5248 @cindex world-wide web | |
5249 If pressed on a world-wide web universal resource locator: | |
5250 ACTION | |
5251 Displays the URL referent at point. | |
5252 ASSIST | |
5253 Goes back to a previously displayed web page. | |
5254 @end group | |
5255 @end format | |
5256 | |
5257 @format | |
5258 @group | |
5259 @cindex game, gomoku | |
5260 @cindex gomoku | |
5261 If pressed in a Gomoku game buffer. | |
5262 ACTION | |
5263 Makes a move at the space pointed to. | |
5264 ASSIST | |
5265 Takes back a prior move made at the space pointed to. | |
5266 @end group | |
5267 @end format | |
5268 | |
5269 @format | |
5270 @group | |
5271 @cindex click, wrolo matches | |
5272 @cindex wrolo matches | |
5273 If pressed within an entry in the wrolo match display buffer: | |
5274 ACTION or ASSIST | |
5275 The entry is edited in the other window. | |
5276 @end group | |
5277 @end format | |
5278 | |
5279 @node Outliner Keys, Suggestion or Bug Reporting, Smart Key Reference, Top | |
5280 @appendix Outliner Keys | |
5281 | |
5282 @cindex outliner keys | |
5283 This appendix summarizes the specialized key bindings available when | |
5284 editing an outline with Hyperbole. Each key is shown together with its | |
5285 command binding and the documentation for that command. Normal emacs | |
5286 editing keys are modified to account for the structure within outlines. | |
5287 An outliner command which overloads an Emacs command named @emph{cmd} | |
5288 would be named @emph{kotl-mode:cmd}. | |
5289 | |
5290 @table @code | |
5291 | |
5292 @findex kfile:write | |
5293 @item kfile:write @{@kbd{C-x C-w}@} | |
5294 Write current outline to FILE. | |
5295 | |
5296 @findex klink:create | |
5297 @item klink:create @{@kbd{C-c l}@} | |
5298 Insert at point an implicit link to REFERENCE. | |
5299 REFERENCE should be a cell-ref or a string containing "filename, cell-ref". | |
5300 See documentation for @code{kcell:ref-to-id} for valid cell-ref formats. | |
5301 | |
5302 @findex kotl-mode:add-cell | |
5303 @item kotl-mode:add-cell @{@key{LFD}@} | |
5304 Add a cell following current cell at optional RELATIVE-LEVEL with CONTENTS string. | |
5305 Optional prefix arg RELATIVE-LEVEL means add as sibling if nil or >= 0, as child | |
5306 if equal to universal argument, @kbd{C-u}, and as sibling of current cell's | |
5307 parent, otherwise. If added as sibling of current level, RELATIVE-LEVEL is | |
5308 used as a repeat count for the number of cells to add. | |
5309 | |
5310 Return last newly added cell. | |
5311 | |
5312 @findex kotl-mode:add-child | |
5313 @item kotl-mode:add-child @{@kbd{C-c a}@} | |
5314 Add a new cell to current kview as first child of current cell. | |
5315 | |
5316 @findex kotl-mode:add-parent | |
5317 @item kotl-mode:add-parent @{@kbd{C-c p}@} | |
5318 Add a new cell to current kview as sibling of current cell's parent. | |
5319 | |
5320 @findex kotl-mode:append-cell | |
5321 @item kotl-mode:append-cell @{@kbd{C-c +}@} | |
5322 Append CONTENTS-CELL to APPEND-TO-CELL. | |
5323 APPEND-TO-CELL is refilled if neither cell has a no-fill property and | |
5324 kotl-mode:refill-flag is enabled. | |
5325 | |
5326 @findex kotl-mode:back-to-indentation | |
5327 @item kotl-mode:back-to-indentation @{@kbd{M-m}@} | |
5328 Move point to the first non-read-only non-whitespace character on this line. | |
5329 | |
5330 @findex kotl-mode:backward-cell | |
5331 @item kotl-mode:backward-cell @{@kbd{C-c C-b}@} | |
5332 Move to prefix ARGth prior cell (same level) within current view. | |
5333 Return number of cells left to move. | |
5334 | |
5335 @findex kotl-mode:backward-char | |
5336 @item kotl-mode:backward-char @{@kbd{C-b}@} | |
5337 Move point backward ARG (or 1) characters and return point. | |
5338 | |
5339 @findex kotl-mode:backward-kill-word | |
5340 @item kotl-mode:backward-kill-word @{@kbd{M-DEL}@} | |
5341 Kill up to prefix ARG words preceding point within a single cell. | |
5342 | |
5343 @findex kotl-mode:backward-sentence | |
5344 @item kotl-mode:backward-sentence @{@kbd{M-a}@} | |
5345 Move point backward ARG (or 1) sentences and return point. | |
5346 | |
5347 @findex kotl-mode:backward-word | |
5348 @item kotl-mode:backward-word @{@kbd{M-b}@} | |
5349 Move point backward ARG (or 1) words and return point. | |
5350 | |
5351 @findex kotl-mode:beginning-of-buffer | |
5352 @item kotl-mode:beginning-of-buffer @{@kbd{M-<}@} | |
5353 Move point to beginning of buffer and return point. | |
5354 | |
5355 @findex kotl-mode:beginning-of-cell | |
5356 @item kotl-mode:beginning-of-cell @{@kbd{C-c ,}@} | |
5357 Move point to beginning of current or ARGth - 1 prior cell and return point. | |
5358 | |
5359 @findex kotl-mode:beginning-of-line | |
5360 @item kotl-mode:beginning-of-line @{@kbd{C-a}@} | |
5361 Move point to beginning of current or ARGth - 1 line and return point. | |
5362 | |
5363 @findex kotl-mode:beginning-of-tree | |
5364 @item kotl-mode:beginning-of-tree @{@kbd{C-c ^}@} | |
5365 Move point to the level 1 root of the current cell's tree. | |
5366 Leave point at the start of the cell. | |
5367 | |
5368 @findex kotl-mode:center-line | |
5369 @item kotl-mode:center-line @{@kbd{M-s}@} | |
5370 @vindex fill-column | |
5371 Center the line point is on, within the width specified by @var{fill-column}. | |
5372 This means adjusting the indentation so that it equals the distance between | |
5373 the end of the text and @var{fill-column}. | |
5374 | |
5375 @findex kotl-mode:center-paragraph | |
5376 @item kotl-mode:center-paragraph @{@kbd{M-S}@} | |
5377 Center each nonblank line in the paragraph at or after point. | |
5378 See @code{center-line} for more info. | |
5379 | |
5380 @findex kotl-mode:copy-after | |
5381 @item kotl-mode:copy-after @{@kbd{C-c c}@} | |
5382 Copy tree rooted at FROM-CELL-REF to follow tree rooted at TO-CELL-REF. | |
5383 If prefix arg CHILD-P is non-nil, make FROM-CELL-REF the first child of | |
5384 TO-CELL-REF, otherwise make it the sibling following TO-CELL-REF. | |
5385 | |
5386 Leave point at the start of the root cell of the new tree. | |
5387 | |
5388 @findex kotl-mode:copy-before | |
5389 @item kotl-mode:copy-before @{@kbd{C-c C-c}@} | |
5390 Copy tree rooted at FROM-CELL-REF to precede tree rooted at TO-CELL-REF. | |
5391 If prefix arg PARENT-P is non-nil, make FROM-CELL-REF the first child of | |
5392 TO-CELL-REF's parent, otherwise make it the preceding sibling of TO-CELL-REF. | |
5393 | |
5394 Leave point at the start of the root cell of the new tree. | |
5395 | |
5396 @findex kotl-mode:copy-to-buffer | |
5397 @item kotl-mode:copy-to-buffer @{@kbd{C-c M-c}@} | |
5398 Copy outline tree rooted at CELL-REF to a non-koutline BUFFER. | |
5399 Use 0 to copy the whole outline buffer. | |
5400 | |
5401 @findex kotl-mode:copy-to-register | |
5402 @item kotl-mode:copy-to-register @{@kbd{C-x x}@} | |
5403 Copy into REGISTER the region START to END. | |
5404 With optional prefix arg DELETE-FLAG, delete region. | |
5405 | |
5406 @findex kotl-mode:delete-backward-char | |
5407 @item kotl-mode:delete-backward-char @{@kbd{DEL}@} | |
5408 Delete up to the preceding prefix ARG characters. | |
5409 Return number of characters deleted. | |
5410 Optional KILL-FLAG non-nil means save in kill ring instead of deleting. | |
5411 Does not delete across cell boundaries. | |
5412 | |
5413 @findex kotl-mode:delete-blank-lines | |
5414 @item kotl-mode:delete-blank-lines @{@kbd{C-x C-o}@} | |
5415 On blank line within a cell, delete all surrounding blank lines, leaving just one. | |
5416 On isolated blank line, delete that one. | |
5417 On nonblank line, delete all blank lines that follow it. | |
5418 | |
5419 If nothing but whitespace follows point until the end of a cell, delete all | |
5420 whitespace at the end of the cell. | |
5421 | |
5422 @findex kotl-mode:delete-char | |
5423 @item kotl-mode:delete-char @{@kbd{C-d}@} | |
5424 Delete up to prefix ARG characters following point. | |
5425 Return number of characters deleted. | |
5426 Optional KILL-FLAG non-nil means save in kill ring instead of deleting. | |
5427 Does not delete across cell boundaries. | |
5428 | |
5429 @findex kotl-mode:delete-indentation | |
5430 @item kotl-mode:delete-indentation @{@kbd{M-^}@} | |
5431 Join this line to previous and fix up whitespace at join. | |
5432 If there is a fill prefix, delete it from the beginning of this line. | |
5433 With argument, join this line to following line. | |
5434 | |
5435 @findex kotl-mode:demote-tree | |
5436 @vindex kotl-mode:refill-flag | |
5437 @item kotl-mode:demote-tree @{@kbd{TAB}@} | |
5438 Move current kotl a maximum of prefix ARG levels lower in current view. | |
5439 Each cell is refilled iff its @emph{no-fill} attribute is nil and | |
5440 @var{kotl-mode:refill-flag} is non-nil. With prefix ARG = 0, cells are | |
5441 demoted up to one level and kotl-mode:refill-flag is treated as true. | |
5442 | |
5443 @findex kotl-mode:down-level | |
5444 @item kotl-mode:down-level @{@kbd{C-c C-d}@} | |
5445 Move down prefix ARG levels lower within current tree. | |
5446 | |
5447 @findex kotl-mode:end-of-buffer | |
5448 @item kotl-mode:end-of-buffer @{@kbd{M->}@} | |
5449 Move point to end of buffer and return point. | |
5450 | |
5451 @findex kotl-mode:end-of-cell | |
5452 @item kotl-mode:end-of-cell @{@kbd{C-c .}@} | |
5453 Move point to end of current or ARGth - 1 succeeding cell and return point. | |
5454 | |
5455 @findex kotl-mode:end-of-line | |
5456 @item kotl-mode:end-of-line @{@kbd{C-e}@} | |
5457 Move point to end of current or ARGth - 1 line and return point. | |
5458 | |
5459 @findex kotl-mode:end-of-tree | |
5460 @item kotl-mode:end-of-tree @{@kbd{C-c $}@} | |
5461 Move point to the last cell in tree rooted at the current cell. | |
5462 Leave point at the start of the cell. | |
5463 | |
5464 @findex kotl-mode:exchange-cells | |
5465 @item kotl-mode:exchange-cells @{@kbd{C-c e}@} | |
5466 Exchange CELL-REF-1 with CELL-REF-2 in current view. Don't move point. | |
5467 | |
5468 @findex kotl-mode:fill-cell | |
5469 @item kotl-mode:fill-cell @{@kbd{C-c M-j}@} | |
5470 Fill current cell within current view if it does not have the 'no-fill attribute. | |
5471 With optional JUSTIFY, justify cell as well. | |
5472 IGNORE-COLLAPSED-P is used when caller has already expanded cell, indicating | |
5473 it is not collapsed. | |
5474 | |
5475 @findex kotl-mode:fill-paragraph | |
5476 @item kotl-mode:fill-paragraph @{@kbd{C-x f}@} | |
5477 Fill current paragraph within cell. With optional JUSTIFY, justify | |
5478 paragraph as well. Ignore any non-nil no-fill attribute attached to the | |
5479 cell. | |
5480 | |
5481 @findex kotl-mode:fill-tree | |
5482 @item kotl-mode:fill-tree @{@kbd{C-M-j}@} | |
5483 Refill each cell within the tree whose root is at point. | |
5484 | |
5485 @findex kotl-mode:first-sibling | |
5486 @item kotl-mode:first-sibling @{@kbd{C-c <}@} | |
5487 Move point to the first sibling of the present cell. | |
5488 Leave point at the start of the cell or at its present position if it is | |
5489 already within the first sibling cell. | |
5490 | |
5491 @findex kotl-mode:fkey-backward-char | |
5492 @item kotl-mode:fkey-backward-char @{@kbd{left}@} | |
5493 Move point backward ARG (or 1) characters and return point. | |
5494 | |
5495 @findex kotl-mode:fkey-forward-char | |
5496 @item kotl-mode:fkey-forward-char @{@kbd{right}@} | |
5497 Move point forward ARG (or 1) characters and return point. | |
5498 | |
5499 @findex kotl-mode:fkey-next-line | |
5500 @item kotl-mode:fkey-next-line @{@kbd{down}@} | |
5501 Move point to ARGth next line and return point. | |
5502 | |
5503 @findex kotl-mode:fkey-previous-line | |
5504 @item kotl-mode:fkey-previous-line @{@kbd{up}@} | |
5505 Move point to ARGth previous line and return point. | |
5506 | |
5507 @findex kotl-mode:forward-cell | |
5508 @item kotl-mode:forward-cell @{@kbd{C-c C-f}@} | |
5509 Move to prefix ARGth following cell (same level) within current view. | |
5510 Return number of cells left to move. | |
5511 | |
5512 @findex kotl-mode:forward-char | |
5513 @item kotl-mode:forward-char @{@kbd{C-f}@} | |
5514 Move point forward ARG (or 1) characters and return point. | |
5515 | |
5516 @findex kotl-mode:forward-para | |
5517 @item kotl-mode:forward-para @{@kbd{M-n}@} | |
5518 Move to prefix ARGth next cell (any level) within current view. | |
5519 | |
5520 @findex kotl-mode:forward-paragraph | |
5521 @item kotl-mode:forward-paragraph @{@kbd{M-]}@} | |
5522 Move to prefix ARGth next cell (any level) within current view. | |
5523 | |
5524 @findex kotl-mode:forward-sentence | |
5525 @item kotl-mode:forward-sentence @{@kbd{M-e}@} | |
5526 Move point forward ARG (or 1) sentences and return point. | |
5527 | |
5528 @findex kotl-mode:forward-word | |
5529 @item kotl-mode:forward-word @{@kbd{M-f}@} | |
5530 Move point forward ARG (or 1) words and return point. | |
5531 | |
5532 @findex kotl-mode:goto-cell | |
5533 @item kotl-mode:goto-cell @{@kbd{C-c g}@} | |
5534 Move point to start of cell given by CELL-REF. (See 'kcell:ref-to-id'.) | |
5535 Return point iff CELL-REF is found within current view. | |
5536 With a prefix argument, CELL-REF is assigned the argument value for use | |
5537 as an idstamp. | |
5538 | |
5539 Optional second arg, ERROR-P, non-nil means signal an error if CELL-REF is | |
5540 not found within current view. Will signal same error if called | |
5541 interactively when CELL-REF is not found. | |
5542 | |
5543 @findex kotl-mode:hide-sublevels | |
5544 @item kotl-mode:hide-sublevels @{@kbd{C-X $}@} | |
5545 Hide all cells in outline at levels deeper than LEVELS-TO-KEEP (a | |
5546 number). Shows any hidden cells within LEVELS-TO-KEEP. 1 is the first | |
5547 level. | |
5548 | |
5549 @findex kotl-mode:hide-subtree | |
5550 @item kotl-mode:hide-subtree @{@kbd{C-M-h}@} | |
5551 Hide subtree, ignoring root, at optional CELL-REF (defaults to cell at | |
5552 point). | |
5553 | |
5554 @findex kotl-mode:hide-tree | |
5555 @item kotl-mode:hide-tree @{@kbd{C-c BS}@} | |
5556 Collapse kotl rooted at optional CELL-REF (defaults to cell at point). | |
5557 | |
5558 @findex kotl-mode:insert-file | |
5559 @item kotl-mode:insert-file @{@kbd{C-x i}@} | |
5560 Insert each paragraph in IMPORT-FROM as a separate cell in the current view. | |
5561 Insert as sibling cells following the current cell. IMPORT-FROM may be a | |
5562 buffer name or file name (file name completion is provided). | |
5563 | |
5564 @findex kotl-mode:insert-register | |
5565 @item kotl-mode:insert-register @{@kbd{C-c r i}@} | |
5566 Insert contents of register REGISTER at point in current cell. | |
5567 REGISTER is a character naming the register to insert. | |
5568 Normally puts point before and mark after the inserted text. | |
5569 If optional second arg is non-nil, puts mark before and point after. | |
5570 Interactively, second arg is non-nil if prefix arg is supplied. | |
5571 | |
5572 @findex kotl-mode:just-one-space | |
5573 @item kotl-mode:just-one-space @{@kbd{M-\}@} | |
5574 Delete all spaces and tabs around point and leave one space. | |
5575 | |
5576 @findex kotl-mode:kcell-help | |
5577 @item kotl-mode:kcell-help @{@kbd{C-c h}@} | |
5578 Display a temporary buffer with CELL-REF's properties. | |
5579 CELL-REF defaults to current cell. | |
5580 Optional prefix arg CELLS-FLAG selects the cells to print: | |
5581 If = 1, print CELL-REF's cell only; | |
5582 If > 1, print CELL-REF's visible kotl (the tree rooted at CELL-REF); | |
5583 If < 1, print all visible cells in current view (CELL-REF is not used). | |
5584 | |
5585 See also the documentation for @code{kotl-mode:properties}. | |
5586 | |
5587 @findex kotl-mode:kill-contents | |
5588 @item kotl-mode:kill-contents @{@kbd{C-c k}@} | |
5589 Kill contents of cell from point to cell end. | |
5590 With prefix ARG, kill entire cell contents. | |
5591 | |
5592 @findex kotl-mode:kill-line | |
5593 @item kotl-mode:kill-line @{@kbd{C-k}@} | |
5594 Kill ARG lines from point. | |
5595 | |
5596 @findex kotl-mode:kill-region | |
5597 @item kotl-mode:kill-region @{@kbd{C-w}@} | |
5598 Kill region between START and END within a single kcell. | |
5599 With optional COPY-P equal to 't, copy region to kill ring but does not | |
5600 kill it. With COPY-P any other non-nil value, return region as a | |
5601 string without affecting kill ring. | |
5602 | |
5603 If the buffer is read-only and COPY-P is nil, the region will not be deleted | |
5604 but it will be copied to the kill ring and then an error will be signaled. | |
5605 | |
5606 @findex kotl-mode:kill-ring-save | |
5607 @item kotl-mode:kill-ring-save @{@kbd{M-w}@} | |
5608 Copy region between START and END within a single kcell to kill ring. | |
5609 | |
5610 @findex kotl-mode:kill-sentence | |
5611 @item kotl-mode:kill-sentence @{@kbd{M-k}@} | |
5612 Kill up to prefix ARG (or 1) sentences following point within a single cell. | |
5613 | |
5614 @findex kotl-mode:kill-tree | |
5615 @item kotl-mode:kill-tree @{@kbd{C-c C-k}@} | |
5616 Kill ARG following trees starting with tree rooted at point. | |
5617 If ARG is not a non-positive number, nothing is done. | |
5618 | |
5619 @findex kotl-mode:kill-word | |
5620 @item kotl-mode:kill-word @{@kbd{M-d}@} | |
5621 Kill up to prefix ARG words following point within a single cell. | |
5622 | |
5623 @findex kotl-mode:last-sibling | |
5624 @item kotl-mode:last-sibling @{@kbd{C-c >}@} | |
5625 Move point to the last sibling of the present cell. | |
5626 Leave point at the start of the cell or at its present position if it is | |
5627 already within the last sibling cell. | |
5628 | |
5629 @findex kotl-mode:mail-tree | |
5630 @item kotl-mode:mail-tree @{@kbd{C-c @@}@} | |
5631 Mail outline tree rooted at CELL-REF. Use "0" for whole outline buffer. | |
5632 | |
5633 @findex kotl-mode:move-after | |
5634 @item kotl-mode:move-after @{@kbd{C-c m}@} | |
5635 Move tree rooted at FROM-CELL-REF to follow tree rooted at TO-CELL-REF. | |
5636 If prefix arg CHILD-P is non-nil, make FROM-CELL-REF the first child of | |
5637 TO-CELL-REF, otherwise make it the sibling following TO-CELL-REF. | |
5638 With optional COPY-P, copies tree rather than moving it. | |
5639 | |
5640 Leave point at original location but return the tree's new start point. | |
5641 | |
5642 @findex kotl-mode:move-before | |
5643 @item kotl-mode:move-before @{@kbd{C-c RET}@} | |
5644 Move tree rooted at FROM-CELL-REF to precede tree rooted at TO-CELL-REF. | |
5645 If prefix arg PARENT-P is non-nil, make FROM-CELL-REF the first child of | |
5646 TO-CELL-REF's parent, otherwise make it the preceding sibling of TO-CELL-REF. | |
5647 With optional COPY-P, copies tree rather than moving it. | |
5648 | |
5649 Leave point at original location but return the tree's new start point. | |
5650 | |
5651 @findex kotl-mode:newline | |
5652 @item kotl-mode:newline @{@kbd{RET}@} | |
5653 Insert a newline. With ARG, insert ARG newlines. | |
5654 In Auto Fill mode, if no numeric arg, break the preceding line if it is | |
5655 too long. | |
5656 | |
5657 @findex kotl-mode:next-cell | |
5658 @item kotl-mode:next-cell @{@kbd{C-c C-n}@} | |
5659 Move to prefix ARGth next cell (any level) within current view. | |
5660 | |
5661 @findex kotl-mode:next-line | |
5662 @item kotl-mode:next-line @{@kbd{C-n}@} | |
5663 Move point to ARGth next line and return point. | |
5664 | |
5665 @findex kotl-mode:open-line | |
5666 @item kotl-mode:open-line @{@kbd{C-o}@} | |
5667 Insert a newline and leave point before it. | |
5668 With arg N, insert N newlines. | |
5669 | |
5670 @findex kotl-mode:overview | |
5671 @item kotl-mode:overview @{@kbd{C-c C-o}@} | |
5672 Show only the first line of each cell in the current outline. | |
5673 | |
5674 @findex kotl-mode:previous-cell | |
5675 @item kotl-mode:previous-cell @{@kbd{C-c C-p}@} | |
5676 Move to prefix ARGth previous cell (any level) within current view. | |
5677 | |
5678 @findex kotl-mode:previous-line | |
5679 @item kotl-mode:previous-line @{@kbd{C-p}@} | |
5680 Move point to ARGth previous line and return point. | |
5681 | |
5682 @findex kotl-mode:promote-tree | |
5683 @vindex kotl-mode:refill-flag | |
5684 @item kotl-mode:promote-tree @{@kbd{M-TAB}@} | |
5685 Move current kotl a maximum of prefix ARG levels higher in current view. | |
5686 Each cell is refilled iff its @emph{no-fill} attribute is nil and | |
5687 @var{kotl-mode:refill-flag} is non-nil. With prefix ARG = 0, cells are | |
5688 promoted up to one level and kotl-mode:refill-flag is treated as true. | |
5689 | |
5690 @findex kotl-mode:scroll-down | |
5691 @item kotl-mode:scroll-down @{@kbd{M-v}@} | |
5692 Scroll text of current window downward ARG lines; or a windowful if no ARG. | |
5693 | |
5694 @findex kotl-mode:scroll-up | |
5695 @item kotl-mode:scroll-up @{@kbd{C-v}@} | |
5696 Scroll text of current window upward ARG lines; or a windowful if no ARG. | |
5697 | |
5698 @findex kotl-mode:set-cell-attribute | |
5699 @item kotl-mode:set-cell-attribute @{@kbd{C-c C-i}@} | |
5700 Include ATTRIBUTE VALUE with the current cell or the cell at optional POS. | |
5701 Replaces any existing value that ATTRIBUTE has. | |
5702 When called interactively, it displays the setting in the minibuffer as | |
5703 confirmation. | |
5704 | |
5705 @findex kotl-mode:set-fill-prefix | |
5706 @item kotl-mode:set-fill-prefix @{@kbd{C-x l}@} | |
5707 Sets fill prefix to line up to point. | |
5708 With prefix arg TURN-OFF or at begin of line, turns fill prefix off. | |
5709 | |
5710 @findex kotl-mode:show-all | |
5711 @item kotl-mode:show-all @{@kbd{C-c C-a}@} | |
5712 Show (expand) all cells in current view. | |
5713 | |
5714 @findex kotl-mode:show-subtree | |
5715 @item kotl-mode:show-subtree | |
5716 Show subtree, ignoring root, at optional CELL-REF (defaults to cell at | |
5717 point). | |
5718 | |
5719 @findex kotl-mode:show-tree | |
5720 @item kotl-mode:show-tree @{@kbd{C-c C-s}@} | |
5721 Display fully expanded kotl rooted at CELL-REF. | |
5722 | |
5723 @findex kotl-mode:split-cell | |
5724 @item kotl-mode:split-cell @{@kbd{C-c s}@} | |
5725 Split cell into two cells and move to new cell. | |
5726 Cell contents after point become part of newly created cell. | |
5727 Default is to create new cell as sibling of current cell. | |
5728 With optional universal ARG, @kbd{C-u}, new cell is added as child of | |
5729 current cell. | |
5730 | |
5731 @findex kotl-mode:top-cells | |
5732 @item kotl-mode:top-cells @{@kbd{C-c C-t}@} | |
5733 Collapse all level 1 cells in view and hide any deeper sublevels. | |
5734 | |
5735 @findex kotl-mode:transpose-cells | |
5736 @item kotl-mode:transpose-cells @{@kbd{C-c t}@} | |
5737 Exchange current and previous visible cells, leaving point after both. | |
5738 If no previous cell, exchange current with next cell. | |
5739 With prefix ARG, take current cell and move it past ARG cells. | |
5740 With prefix ARG = 0, interchange the cell that contains point with the cell | |
5741 that contains mark. | |
5742 | |
5743 @findex kotl-mode:transpose-chars | |
5744 @item kotl-mode:transpose-chars @{@kbd{C-t}@} | |
5745 Interchange characters around point, moving forward one character. | |
5746 With prefix ARG, take character before point and drag it forward past ARG | |
5747 other characters (backward if ARG negative). | |
5748 If no prefix ARG and at end of line, the previous two characters are | |
5749 exchanged. | |
5750 | |
5751 @findex kotl-mode:transpose-lines | |
5752 @item kotl-mode:transpose-lines @{@kbd{C-x C-t}@} | |
5753 Exchange current line and previous line, leaving point after both. | |
5754 If no previous line, exchange current with next line. | |
5755 With prefix ARG, take previous line and move it past ARG lines. | |
5756 With prefix ARG = 0, interchange the line that contains point with the line | |
5757 that contains mark. | |
5758 | |
5759 @findex kotl-mode:transpose-words | |
5760 @item kotl-mode:transpose-words @{@kbd{M-t}@} | |
5761 Interchange words around point, leaving point after both words. | |
5762 With prefix ARG, take word before or around point and drag it forward past | |
5763 ARG other words (backward if ARG negative). If ARG is zero, the words around | |
5764 or after point and around or after mark are interchanged. | |
5765 | |
5766 @findex kotl-mode:up-level | |
5767 @item kotl-mode:up-level @{@kbd{C-c C-u}@} | |
5768 Move up prefix ARG levels higher in current outline view. | |
5769 | |
5770 @findex kotl-mode:yank | |
5771 @item kotl-mode:yank @{@kbd{C-y}@} | |
5772 Reinsert the last stretch of killed text. | |
5773 More precisely, reinsert the stretch of killed text most recently | |
5774 killed OR yanked. Put point at end, and set mark at beginning. | |
5775 With just C-u as argument, same but put point at beginning (and mark at end). | |
5776 With argument N, reinsert the Nth most recently killed stretch of killed | |
5777 text. | |
5778 See also the command M-x kotl-mode:yank-pop. | |
5779 | |
5780 @findex kotl-mode:yank-pop | |
5781 @item kotl-mode:yank-pop @{@kbd{M-y}@} | |
5782 Replace just-yanked stretch of killed text with a different stretch. | |
5783 This command is allowed only immediately after a @code{yank} or a | |
5784 @code{yank-pop}. At such a time, the region contains a stretch of | |
5785 reinserted previously-killed text. @code{yank-pop} deletes that text | |
5786 and inserts in its place a different stretch of killed text. | |
5787 | |
5788 With no argument, the previous kill is inserted. | |
5789 With argument N, insert the Nth previous kill. | |
5790 If N is negative, this is a more recent kill. | |
5791 | |
5792 The sequence of kills wraps around, so that after the oldest one | |
5793 comes the newest one. | |
5794 | |
5795 @findex kotl-mode:zap-to-char | |
5796 @item kotl-mode:zap-to-char @{@kbd{M-z}@} | |
5797 Kill up to and including prefix ARG'th occurrence of CHAR. | |
5798 Goes backward if ARG is negative; error if CHAR not found. | |
5799 | |
5800 @findex kview:set-label-type | |
5801 @item kview:set-label-type @{@kbd{C-c C-l}@} | |
5802 Change kview's label display type to NEW-TYPE, updating all displayed labels. | |
5803 See documentation for variable, kview:default-label-type, for | |
5804 valid values of NEW-TYPE. | |
5805 | |
5806 @findex kvspec:activate | |
5807 @item kvspec:activate @{@kbd{C-c C-v}@} | |
5808 Activate optional VIEW-SPEC or existing view spec in the current koutline. | |
5809 VIEW-SPEC is a string. See <$@{hyperb:dir@}/kotl/EXAMPLE.kotl, 2b17=048> for | |
5810 details on valid view specs. | |
5811 | |
5812 @findex kvspec:toggle-blank-lines | |
5813 @item kvspec:toggle-blank-lines @{@kbd{C-c b}@} | |
5814 Toggle blank lines between cells on or off. | |
5815 | |
5816 @end table | |
5817 | |
5818 @node Suggestion or Bug Reporting, Questions and Answers, Outliner Keys, Top | |
5819 @appendix Suggestion or Bug Reporting | |
5820 | |
5821 @xref{Mail Lists}, for complete details on Hyperbole mailing lists and | |
5822 how to subscribe. | |
5823 | |
5824 @cindex version description | |
5825 @cindex Hyperbole version | |
5826 If you find any errors in Hyperbole's operation or documentation, feel | |
5827 free to report them to the Hyperbole discussion list: | |
5828 <hyperbole@@hub.ucsb.edu>. Be sure to use the Msg/Compose-Hypb-Mail | |
5829 minibuffer menu item whenever you send a message to the mail list since | |
5830 it will insert important system version information for you. | |
5831 | |
5832 If you use Hyperbole mail or news support, @ref{Buttons in Mail}, a | |
5833 click with your Action Key on the Hyperbole mail list address | |
5834 will insert a description of your Hyperbole configuration information | |
5835 into your outgoing message, so that you do not have to type it. This is | |
5836 useful when composing a reply for the Hyperbole mail list. Otherwise, | |
5837 be sure to include your Emacs, Hyperbole and window system versions in | |
5838 your message. Your Hyperbole version number can be found in the | |
5839 top-level Hyperbole menu. | |
5840 | |
5841 Please use your subject line to state the position that your message | |
5842 takes on the topic that it addresses, e.g@. send "Subject: Basic bug in | |
5843 top-level Hyperbole menu." rather than "Subject: Hyperbole bug". This | |
5844 simple rule makes all e-mail communication much easier. | |
5845 | |
5846 If you have suggestions on how to improve Hyperbole, send them to the | |
5847 same address. Here are some issues you might address: | |
5848 | |
5849 @itemize @bullet | |
5850 @item | |
5851 What did you like and dislike about the system? | |
5852 @item | |
5853 What kinds of tasks, if any, does it seem to help you with? | |
5854 @item | |
5855 What did you think of the Emacs-based user interface? | |
5856 @item | |
5857 How was the Hyperbole Manual and other documentation? | |
5858 @item | |
5859 Was the setup trivial, average or hard? | |
5860 @item | |
5861 What areas of Hyperbole would you like to see expanded/added? | |
5862 @item | |
5863 How does it compare to other hypertext tools you have used? | |
5864 @item | |
5865 Was it easy or difficult to create your own types? Why? | |
5866 @item | |
5867 Did you get any use out of the external system encapsulations? | |
5868 @end itemize | |
5869 | |
5870 @node Questions and Answers, Future Work, Suggestion or Bug Reporting, Top | |
5871 @appendix Questions and Answers | |
5872 | |
5873 @table @emph | |
5874 @cindex Smart Key | |
5875 @cindex mouse key bindings | |
5876 @findex hmouse-setup | |
5877 @findex hmouse-get-bindings | |
5878 @vindex file, hmouse-sh.el | |
5879 @vindex file, hmouse-reg.el | |
5880 @item How can I change the Smart Mouse Key bindings? | |
5881 @findex hmouse-shift-buttons | |
5882 Since the Smart Mouse Keys are set up for use under five different Emacs | |
5883 configurations, there is no easy way to provide user level | |
5884 customization. The command, @code{hmouse-shift-buttons}, can be used to | |
5885 select between shifted and unshifted Smart Mouse Keys. Any other mouse | |
5886 key binding changes must be done by editing the @code{hmouse-setup} and | |
5887 @code{hmouse-get-bindings} functions in the @file{hmouse-sh.el} and | |
5888 @file{hmouse-reg.el} files. | |
5889 | |
5890 @vindex file, hmouse-key.el | |
5891 @vindex file, hui-window.el | |
5892 @vindex hkey-alist | |
5893 @vindex hmouse-alist | |
5894 The @var{hkey-alist} and @var{hmouse-alist} variable | |
5895 settings in @file{hui-mouse.el} and @file{hui-window.el} must be altered | |
5896 if you want to change what the Smart Keys do in particular contexts. | |
5897 You should then update the Smart Key summary documentation in the file, | |
5898 @file{hypb-mouse.txt}, and potentially the same summary in this manual. | |
5899 | |
5900 | |
5901 @item Missing Action Types | |
5902 | |
5903 What if someone sends a mail message with a button for which I do | |
5904 not have the action type? Or a button whose link referent I can't access? | |
5905 | |
5906 You receive an error that an action type is not defined or a link | |
5907 referent is not accessible/readable if you try to use the button. This | |
5908 is hardly different than trying to get through a locked door without a | |
5909 key; you try the doorknob, find that it is locked, and then realize that | |
5910 you need to take a different approach or else give up. | |
5911 | |
5912 Like all communication, people need to coordinate, which usually | |
5913 requires an iterative process. If you get a mail message with a button | |
5914 for which you don't have the action type, you mail the sender and | |
5915 request it. | |
5916 | |
5917 @cindex global button, modify | |
5918 @item How can I modify a number of global buttons in succession? | |
5919 | |
5920 Rather than typing the name for each, it is quicker to jump to the | |
5921 global button file and edit the buttons there as you would any explicit | |
5922 buttons. By default, the ButFile/PersonalFile menu item takes you to | |
5923 the file where global buttons are saved. | |
5924 | |
5925 @item Why is all the button data scattered across directories? | |
5926 | |
5927 When you think of a hyper-space that you depend on every day, you don't | |
5928 want to have a single point of failure make you incapable of doing work. | |
5929 With Hyperbole, if some directories become unavailable for a particular | |
5930 time (e.g@. the filesystems on which they reside are dismounted) you can | |
5931 still work elsewhere with minimal effect. We believe this to be a | |
5932 compelling factor to leave the design with external button data storage. | |
5933 | |
5934 This design also permits the potential addition of buttons to read-only | |
5935 media. | |
5936 | |
5937 @item Why are action types defined separately from their implicit button types? | |
5938 | |
5939 Any category of button can make use of an action type. Some action types | |
5940 are useful as behavior definitions for a variety of button categories, | |
5941 so all action types are defined separately to give them independence | |
5942 from those types which apply them. | |
5943 | |
5944 For implicit button types that require a lot of code, it is useful to | |
5945 add a module that includes the implicit button type definition, its | |
5946 action type definition and supporting code. | |
5947 | |
5948 @end table | |
5949 | |
5950 | |
5951 @node Future Work, References, Questions and Answers, Top | |
5952 @appendix Future Work | |
5953 | |
5954 @noindent | |
5955 This appendix is included for a number of reasons: | |
5956 | |
5957 @itemize @bullet | |
5958 @item | |
5959 to better allow you to assess whether to work with Hyperbole by | |
5960 providing sketches of possible additions: | |
5961 @item | |
5962 to direct further development effort towards known needs; | |
5963 @item | |
5964 and to acknowledge known weaknesses in the current system. | |
5965 @end itemize | |
5966 | |
5967 @table @asis | |
5968 | |
5969 Note that due to a lack of volunteers to further develop Hyperbole, much | |
5970 of this work may not be done. So if you want to see these features, | |
5971 encourage qualified people to volunteer. | |
5972 | |
5973 @item Button Copying, Killing, and Yanking | |
5974 There is as yet no means of transferring explicit buttons among buffers. | |
5975 We realize this is a critical need. Users should be able to manipulate | |
5976 text with embedded buttons in ordinary ways. This will probably be | |
5977 implemented only for versions of Emacs 19 and higher. It will store the | |
5978 button attributes as text attributes within the buffers so that if a | |
5979 button is copied, its attributes follow. When a buffer is saved, the | |
5980 attributes also will be saved. | |
5981 | |
5982 @item Trails | |
5983 Trails are an extension to the basic history mechanism presently offered | |
5984 by Hyperbole. Trails will allow a user to capture, edit and store a | |
5985 specific sequence and set of views of information for later replay by | |
5986 other users. Conditional branching may also be supported. | |
5987 | |
5988 @item Outliner View Mode | |
5989 This will complement the outliner editing mode by using simple one | |
5990 character keys that normally insert characters to instead modify the | |
5991 view of an outline and to move around in it, for ease of study. | |
5992 Switching between view and edit modes will also be simple. | |
5993 | |
5994 @item Storage of button data within button source files | |
5995 The current design choice of storing buttons external to the source file | |
5996 was made under the assumption that people should be able to look at | |
5997 files that contain Hyperbole buttons with any standard editor or tool | |
5998 and not be bothered by the ugly button data (since they won't be able to | |
5999 utilize the buttons anyway, they don't need to see or have access to | |
6000 them). | |
6001 | |
6002 In many contexts, embedding the button data within the source files may | |
6003 be a better choice, so a provision which would allow selection of either | |
6004 configuration may be added. Here are some of the PROs and CONs of both | |
6005 design choices: | |
6006 @sp 1 | |
6007 | |
6008 @example | |
6009 @group | |
6010 POSITIVE NEGATIVE | |
6011 | |
6012 Button data in source file | |
6013 Documents can stand alone. All edit operators have | |
6014 Normal file operations apply. to account for file | |
6015 structure and hide | |
6016 Simplifies creation and internal components. | |
6017 facility expansion for | |
6018 structured and multi-media | |
6019 files. | |
6020 | |
6021 Button data external to source file | |
6022 Files can be displayed and Currently, bdata for | |
6023 printed exactly as they look. whole directory is | |
6024 No special display formatting locked when any bdata | |
6025 is necessary. entry is locked. | |
6026 | |
6027 Button-based searches and | |
6028 database-type lookup operations | |
6029 need only search one file | |
6030 per directory. | |
6031 @end group | |
6032 @end example | |
6033 @sp 2 | |
6034 | |
6035 @item Forms-based Interfaces | |
6036 | |
6037 This will allow one to create buttons more flexibly. For example, button | |
6038 attributes could be given in any order. Entry of long code sequences, | |
6039 quick note taking and cross-referencing would also be made easier. | |
6040 | |
6041 @item Collaboration Support | |
6042 | |
6043 From the early stages of Hyperbole design, collaborative work | |
6044 environments have been considered. A simple facility has demonstrated | |
6045 broadcast of button activations to a number of workstations on a local | |
6046 area network, so that one user can lead others around an information | |
6047 space, as during an online design review. (This facility was never | |
6048 adapted to the current Hyperbole release, however.) We shall do some | |
6049 work in specific collaborative mechanisms, but we also expect that | |
6050 others who concentrate in collaborative work will provide more extensive | |
6051 capabilities. | |
6052 | |
6053 @end table | |
6054 | |
6055 @node References, Key Binding Index, Future Work, Top | |
6056 @appendix References | |
6057 | |
6058 @table @b | |
6059 @item [AkMcYo88] | |
6060 Akscyn, R. M., D. L. McCracken and E. A. Yoder. KMS: A | |
6061 Distributed Hypermedia System for Managing Knowledge in Organizations. | |
6062 @emph{Communications of the ACM}, Vol. 31, No. 7, July 1988, pp. 820-835. | |
6063 | |
6064 @item [Bro87] | |
6065 Brown, P. J. Turning Ideas into Products: The Guide System. | |
6066 @emph{Proceedings of Hypertext '87}, November 13-15, 1987, Chapel Hill, NC. | |
6067 ACM: NY, NY, pp. 33-40. | |
6068 | |
6069 @item [Con87] | |
6070 Conklin, Jeff. Hypertext: An Introduction and Survey. @emph{IEEE | |
6071 Computer}, Vol. 20, No. 9, September 1987, pp. 17-41. | |
6072 | |
6073 @item [Eng68] | |
6074 Engelbart, D., and W. English. A research center for augmenting | |
6075 human intellect. @emph{Proceedings of the Fall Joint Computer Conference}, | |
6076 33, 1, AFIPS Press: Montvale, NJ, 1968, pp. 395-410. | |
6077 | |
6078 @item [Eng84a] | |
6079 Engelbart, D. C. Authorship Provisions in Augment. | |
6080 @emph{Proceedings of the 1984 COMPCON Conference (COMPCON '84 Digest)}, | |
6081 February 27-March 1, 1984, San Francisco, CA. IEEE Computer Society Press, | |
6082 Spring, 1984. 465-472. (OAD,2250,) | |
6083 | |
6084 @item [Eng84b] | |
6085 Engelbart, D. C. Collaboration Support Provisions in Augment. | |
6086 @emph{Proceedings of the AFIPS Office Automation Conference (OAC '84 Digest)}, | |
6087 February, 1984, Los Angeles, CA, 1984. 51-58. (OAD,2221,) | |
6088 | |
6089 @item [Fos88] | |
6090 Foss, C. L. Effective Browsing in Hypertext Systems. | |
6091 @emph{Proceedings of the Conference on User-Oriented Content-Based Text and | |
6092 Image Handling (RIAO 88)}, March 21-24, MIT, Cambridge MA. Centre de Hautes | |
6093 Etudes Internationales d'Informatique Documentaire, 1988, pp. 82-98. | |
6094 | |
6095 @item [GaSmMe86] | |
6096 Garrett, N., K. E. Smith and N. Meyrowitz. Intermedia: Issues, | |
6097 Strategies, and Tactics in the Design of a Hypermedia Document System. | |
6098 @emph{Computer-Supported Cooperative Work (CSCW '86) Proceedings}, December | |
6099 3-5, Austin, TX, 1986, pp. 163-174. | |
6100 | |
6101 @item [HaMoTr87] | |
6102 Halasz, F. G., T. P. Moran and R. H. Trigg. NoteCards in a | |
6103 Nutshell. @emph{Proceedings of the CHI and GI '87 Conference on Human Factors | |
6104 in Computing Systems}, Toronto, J. M. Carroll and P. P. Tanner, (editors), | |
6105 ACM: NY, NY, April 1987, pp. 45-52. | |
6106 | |
6107 @item [Har88] | |
6108 Harvey, G. @emph{Understanding HyperCard.} Alameda, CA: SYBEX, Inc., | |
6109 1988. | |
6110 | |
6111 @item [KaCaLoLa92] | |
6112 Kaplan, S., A. M. Carroll, C. Love and D. M. LaLiberte. | |
6113 @emph{Epoch 4.0 Manual.} Department of Computer Science, University of | |
6114 Illinois, Urbana, March 1992. | |
6115 | |
6116 @item [KaKaBeLaDr90] | |
6117 Kaplan, S. J., M. D. Kapor, E. J. Belove, R. A. Landsman, and | |
6118 T. R. Drake. AGENDA: A personal Information Manager. @emph{Communications | |
6119 of the ACM}, No. 33, July 1990, pp. 105-116. | |
6120 | |
6121 @item [Nel87a] | |
6122 Nelson, T. H. @emph{Computer Lib/Dream Machines.} MicroSoft Press, | |
6123 Redmond, WA, 1987. | |
6124 | |
6125 @item [Nel87b] | |
6126 Nelson, T. H. @emph{Literary Machines, Edition 87.1}. Available | |
6127 from the Distributors, 702 South Michigan, South Bend, IN 46618, 1987. | |
6128 | |
6129 @item [NoDr86] | |
6130 Norman, D. A. and S. W. Draper, editors. @emph{User Centered System | |
6131 Design.} Lawrence Erlbaum Associates: Hillsdale, New Jersey, 1986. | |
6132 | |
6133 @item [Shn82] | |
6134 Shneiderman, B. The future of interactive systems and the emergence | |
6135 of direct manipulation. @emph{Behavior and Information Technology}, Vol. 1, | |
6136 1982, pp. 237-256. | |
6137 | |
6138 @item [Sta87] | |
6139 Stallman, R. @emph{GNU Emacs Manual.} Free Software Foundation, | |
6140 Cambridge: MA, March 1987. | |
6141 | |
6142 @item [Tri86] | |
6143 Trigg, R., L. Suchman, and F. Halasz. Supporting collaboration in | |
6144 NoteCards. @emph{Proceedings of the CSCW '86 Conference}, Austin, TX, | |
6145 December 1986, pp. 147-153. | |
6146 | |
6147 @item [TrMoHa87] | |
6148 Trigg, R. H., T. P. Moran and F. G. Halasz. Adaptability and | |
6149 Tailorability in NoteCards. @emph{Proceedings of INTERACT '87}, Stuttgart, | |
6150 West Germany, September 1987. | |
6151 | |
6152 @item [Wei92] | |
6153 Weiner, B. @emph{PIEmail: A Personalized Information Environment | |
6154 Mail Tool.} Department of Computer Science Masters Project, Brown | |
6155 University: Providence, RI, May 10, 1992. | |
6156 | |
6157 @item [YaHaMeDr88] | |
6158 Yankelovich, N., B. J. Haan, N. Meyrowitz and S. M. Drucker. | |
6159 Intermedia: The Concept and the Construction of a Seamless Information | |
6160 Environment. @emph{IEEE Computer}, Vol. 21, No. 1, January 1988, pp. 81-96. | |
6161 | |
6162 @item [YoAkMc89] | |
6163 Yoder, E. A., R. M. Akscyn and D. L. McCracken. Collaboration in | |
6164 KMS, A Shared Hypermedia System. @emph{Proceedings of the 1989 ACM Conference | |
6165 on Human Factors in Computer Systems (CHI '89)}, April 30-May 4, 1989, | |
6166 Austin, TX, ACM: NY,NY, 1989, pp. 37-42. | |
6167 | |
6168 @end table | |
6169 | |
6170 | |
6171 @c *************************** | |
6172 @c Indices | |
6173 @c *************************** | |
6174 | |
6175 @node Key Binding Index, Code and File Index, References, Top | |
6176 @unnumbered Key Binding Index | |
6177 | |
6178 @printindex ky | |
6179 | |
6180 @node Code and File Index, Concept Index, Key Binding Index, Top | |
6181 @unnumbered Code and File Index | |
6182 | |
6183 @printindex fn | |
6184 | |
6185 @node Concept Index, , Code and File Index, Top | |
6186 @unnumbered Concept Index | |
6187 | |
6188 @printindex cp | |
6189 | |
6190 @page | |
6191 @summarycontents | |
6192 @contents | |
6193 @bye |