Source

hyperbole / kotl / EXAMPLE.kotl

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
;; -*- Mode: kotl -*- 
"Kotl-4.0" ;; file-format

  1. The Koutliner is a part of the Hyperbole information management system.
     BeOpen.com is the developer and chief support organization for
     Hyperbole, InfoDock (a professional-quality turnkey software development
     and internet productivity suite) and the OO-Browser (the world's most
     flexible multi-language object-oriented code browser).  BeOpen.com
     sells high-quality yearly support plans for all of these packages.
     Contact us at <info@beopen.com> or visit our web site at
     http://www.beopen.com.

  2. The Koutliner produces hierarchically structured files consisting of
     trees of cells.

    2a. A cell is an element of the outline which has its own display label
        and unique, permanent identifier (idstamp).

    2b. Idstamps support the creation of hyperlinks to cells which are
        maintained as the structure of an outline changes.

  3. Features implemented include:

    3a. Full on screen editing (just like a Macintosh).  Click to type in a
        node (we call them cells) and just enter text.  Structure is
        automatically maintained for you.  All of the standard Emacs editor
        command set is supported both through keyboard, menu and mouse
        interaction.  Menu usage is documented in the Hyperbole Manual; this
        document discusses features and their associated keyboard commands
        only.

    3b. Advanced outline processing

      3b1. Autonumbering:  Full auto-numbering in Augment (1a2) or legal
           (1.1.2) formats.  Augment style is the default.  Single level
           autonumbering (only the last part of the level number is shown),
           as commonly seen in outliner products, is also available, though
           it has not been tested very much and so is not recommended.  Use
           {C-c C-l ?} to see the full set of label types and to select a
           different label type.

      3b2. Label Separators: By default, the outliner separates labels from
           cell contents by two spaces.  If you want to change the separator
           for the current outline, use {C-c M-l}.  {C-u C-c M-l} will
           additionally change the default separator value used when new
           outlines are created.  For example, use the value ". " to get a
           trailing period after each cell label.  The separator must be at
           least two characters long.

      3b3. Cell Creation: {C-j} adds a new cell as a sibling following the
           current cell.  A non-negative prefix argument, {C-u C-j} or {C-c
           a} adds the cell as a child of the current cell.  {C-c p} adds the
           cell as the sibling of the current cell's parent.

      3b4. Cell and Tree Deletion: {C-c C-k} kills the current cell and its
           entire subtree.  {C-c k} kills the contents of a cell from point
           through the end of the cell.  {C-u C-c k} kills the entire
           contents of the cell regardless of the location of point.  You may
           then yank the contents into another cell with {C-y}.

      3b5. Tree Demotion and Promotion: Trees may be demoted or promoted by
           hitting {TAB} or {M-TAB} respectively, as in most outliners today
           (their sub-levels move with them).  {M-0 TAB} and {M-0 M-TAB} will
           demote and promote trees and will additionally refill each cell
           which has not been specially marked to prevent refilling.
           
           You can also use a command line interface and either enter cell
           ids or select the cells to operate upon by using your mouse.
           
           {M-1 TAB} behaves specially.  It toggles the function of {TAB} and
           {M-TAB} so that they insert a tab character and remove the
           previous character, respectively.  Use {M-1 TAB} to toggle them
           back to promoting and demoting trees.

      3b6. Cell and Tree Filling: {M-q} or {M-j} refills a paragraph within a
           cell so that its lines wrap within the current margin settings.
           {C-c M-q} or {C-c M-j} refills all paragraphs within a cell.
           {C-M-q} or {C-M-j} refills all cells within a tree.
           
           Set the variable, kotl-mode:refill-flag, to t if you want moving,
           promoting, demoting, exchanging, splitting and appending cells to
           also automatically refill each cell.

      3b7. Cursor Movement:  In addition to normal Emacs movement commands,
           you can move within a cell or from one cell or tree to another.
           
            {C-c ,}       - Move to the beginning of the current cell.
            {C-c .}       - Move to the end of the current cell.
           
            {C-c C-n}     - Move to the next visible cell, regardless of level.
            {C-c C-p}     - Move to the prev visible cell, regardless of level.
           
            {C-c C-f}     - Move forward  to this cell's successor, if any.
            {C-c C-b}     - Move backward to this cell's predecessor, if any.
           
            {C-c C-d}     - Move to first child of current cell, if any.
           
            {C-c C-u}     - Move to parent cell of current cell, if any.
           
            {C-c <}       - Move to the first sibling at the current level.
            {C-c >}       - Move to the last  sibling at the current level.
           
            {C-c ^}       - Move to the level 1 root of the current tree.
            {C-c $}       - Move to the last cell in the tree rooted at point.

      3b8. Tree Movement and Copying: Entire outline trees can be moved or
           copied with single commands.  Simply invoke the desired command
           and then double click with the Action Key on the desired root cell
           for each argument for which you are prompted.
           
           Copying and moving only work within a single outline right now, so
           don't use them to move trees across different outline files.  You
           can, however, copy an outline tree to a non-outline buffer with:
            {C-c M-c}     - Copy a koutline tree to a non-koutline buffer.
            {C-c @}       - Copy a koutline tree to an outgoing mail message.
           
            {C-c c}       - Copy <tree> to follow as sibling of <cell>.
            {C-u C-c c}   - Copy <tree> to follow as first child of <cell>.
           
            {C-c C-c}     - Copy <tree> to precede <cell>.
            {C-u C-c C-c} - Copy <tree> as first child of the parent of <cell>.
           
            {C-c m}       - Move <tree> to follow as sibling of <cell>.
            {C-u C-c m}   - Move <tree> to follow as first child of <cell>.
           
            {C-c C-m}     - Move <tree> to precede <cell>.
            {C-u C-c C-m} - Move <tree> as first child of the parent of <cell>.
           
           If you have mouse support under Hyperbole, you can move entire
           trees with mouse clicks.  Simply click the Assist Key within the
           indentation to the left of a cell text and you will be prompted
           for a tree to move.  Double click the Action Key within the body
           of the root cell of the tree to move and then double click within
           the body of the root cell of the tree you want it to follow.

      3b9. Cell Transposition:  The move and copy commands rearrange entire
           trees.  The following two commands exchange the locations of two
           cells.

        3b9a. {C-c e} prompts for two cell addresses and exchanges the cells.

        3b9b. {C-c t} does not prompt.  It exchanges the current and
              preceding cells.  If there is no preceding cell it exchanges
              the current and next cell.
              
              {C-c t} with a prefix argument of zero exchanges the cells in
              which point and mark fall.
              
              {C-c t} with a non-zero numeric prefix argument, N, moves
              the current tree past maximally the next N visible cells.  If
              there are fewer visible, it makes the current cell the last
              cell in the outline.

     3b10. Cell Splitting: You can split one cell into two adjacent cells
           with {C-c s}.  This leaves the cell contents preceding point in
           the current cell, minus any trailing whitespace, and moves the
           contents following point to a new sibling cell which is inserted
           into the outline.  {C-u C-c s} adds the new cell as the first
           child of the original cell, rather than as its sibling.
           
           All cell attributes in the original cell are propagated to the new
           one.

     3b11. Cell Appending:  {C-c +} appends the contents of a specified cell
           to the end of another cell.

     3b12. Hiding and Showing:  Individual cells, branches, or particular
           levels in the outline may be hidden or shown.  These commands work
           even when an outline buffer is read-only, e.g. when its file is
           not checked out of a version control system yet.

       3b12a. {C-c C-h}  - Hide (collapse) tree rooted at point.
              {C-c C-s}  - Show (expand)   tree rooted at point.
              
              {C-c C-a}  - Show (expand) all cells in the outline.
              {C-x $}    - Show all cells down to a particular level.  The
                           user is prompted for the level or a prefix
                           argument may be given. 
                           
              {C-M-h}    - Hide subtree at point, excluding root. 
              {M-x kotl-mode:show-subtree RET} - Show subtree at point.
              
              {C-c C-o}  - Overview, show only first line of outline cells.
              {C-c C-t}  - Top-level, hide all cells below level 1 and show
                           only the first line of each level 1 cell.

       3b12b. A click or press of the Action Key within a cell's body, but
              not on a button, toggles between hiding and showing the tree
              rooted at point.

     3b13. Cell Identifiers:  Permanent ids are associated with each cell and
           can be used in hyperlinks that are maintained as cells are
           reordered in a file.  (These ids may also be displayed in place of
           the outline level relative ids.  Use {C-c C-l id RET}.)  Permanent
           ids are numbered from 0, where 0 is the root node of the entire
           outline.  This node is never visible within the outline.
           Permanent ids always begin with a 0, as in 012, to distinguish
           them from relative ids.

     3b14. Cell Attributes: Each cell has its own attribute list.  The
           attribute lists for the cells in the tree rooted at point can be
           displayed by pressing the Assist Key.  {C-c h} prompts for a kcell
           id and displays its attributes.  {C-u C-c h} prompts for a kcell
           id and displays the attributes for it and its subtree; use 0 as
           the kcell id to see attributes for all visible cells in the
           outline.
           
           Use {C-c C-i}  to add an attribute or to modify an existing
           attribute to the cell at point.

     3b15. File Insertion: The elements of another buffer or file may be
           inserted into a koutline as a set of cells by using the {C-x i}
           command.  When prompted, you may use a buffer name or file name
           from which to insert.

       3b15a. The cells will be inserted as the successors of the current
              cell unless {C-u C-x i} is used and then they are inserted as
              the initial children of the current cell.

       3b15b. See the documentation for the variables, kimport:mode-alist and
              kimport:suffix-alist, for information on mode and
              suffix-specific conversions performed on files before they are
              inserted.  This same conversion process applies if you invoke
              {M-x kotl-mode RET} in a non-koutline buffer or if you perform
              a generic file import as described in <@ 2b16>.

       3b15c. Use {M-x kotl-mode:insert-file-contents RET} to insert the
              entire contents of a file into the current cell at the location
              of point.

     3b16. File Importing: The outliner presently supports conversion of
           three types of files into koutline files.  You can choose to
           import a file into an existing koutline, following the tree at
           point, or to create a new koutline of the imported file contents.
           {M-x kimport:file RET} will select the importation type based on
           the buffer or file name suffix of the file to import.  Use one of
           the following commands if you want to control the type of
           importation explicitly.

       3b16a. Text Files

         3b16a1. In a text buffer, use {M-x kotl-mode RET} to convert
                 the buffer into a koutline in-place.  You will lose the old
                 format of the buffer when you do this.

         3b16a2. Use {M-x kimport:text RET} and you will be prompted for a
                 text buffer or file to import and the new koutline buffer or
                 file to create from its text.  It will also import the
                 contents, attributes and level structure of cells from a
                 koutline.
                 
                 With this command, your original file remains intact.

       3b16b. Star Outline Files: Star outlines are standard Emacs outlines
              where each entry begins with one or more asterisk characters.
              Use {M-x kimport:star-outline RET} and you will be prompted
              for the star outline buffer or file to import and the new
              koutline buffer or file to create.

       3b16c. Augment Files Numbered on the Right-Side: (Skip this if you are
              unfamiliar with this sort of file.)  Files exported from the
              Augment system as text often have alphanumeric statement
              identifiers on the right side.
              
              Use {M-x kimport:aug-post-outline RET} and you will be prompted
              for the augment buffer or file to import and the koutline to
              create.

     3b17. File Exporting: The Koutliner can produce a nicely indented HTML
           version of an outline with hyperlinks and hyperlink anchors
           intact.  Use {M-x kexport:html RET} to export a koutline file or
           existing buffer.

     3b18. View Specification: Flexible views of outlines may be specified
           with succinct single character codes.

       3b18a. The current view spec is shown in the modeline after the buffer
              name, delimited by <|>.

       3b18b. The current view spec is saved whenever the outline is saved.
              The next time the outline is read in, this will be the initial
              view.  The standard initial viewspec is <|ben>.

       3b18c. {C-c C-v} prompts for a view spec string in which the following
              codes are valid.  Any invalid characters in a view spec are
              ignored.

         3b18c1. a:  Show all cell levels and all lines in cells.

         3b18c2. b:  Turn on blank lines between cells.  Without this code,
                 blank lines will be turned off.  You can also use the
                 {C-c b} key binding to toggle line numbers on and off
                 independent of any other view settings.

         3b18c3. cN: Hide any lines greater than N in each cell.  0 means
                 don't cutoff any lines.

         3b18c4. e:  Show ellipses when some content is hidden.

         3b18c5. lN: Hide cells at levels deeper than N.  0 means don't hide
                 any cells.

         3b18c6. n:  Turn on the default label type.
                 n0: Display idstamps.
                 n1: Display alpha labels.
                 n2: Display partial alpha labels (don't use this).
                 n.: Display legal labels.
                 n*: Display star labels.
                 n~: Turn off labels.  (n viewspec is removed from modeline).

       3b18d. Try a view spec of `c2l1' to turn off blank lines, to clip each
              cell after its second line, and to hide all cells below level
              one.

    3c. Hyperlinks may be embedded in cells and may refer to other cells.
        Explicit Hyperbole buttons may be created as usual via mouse drags,
        see "(hyperbole.info)By Dragging".  A klink is a special implicit
        link button that jumps to a specific outline cell.

      3c1. Here are three klink examples:

        3c1a. <@ 3b=06> jumps to the cell within this outline which has
              permanent id `06' and relative id `2b', namely the preceding
              sibling of this cell's parent.  <@ 06> does the same thing, as
              does <@ 2b>, though this latter form will not maintain the link
              properly if the cell is moved elsewhere within the outline.

        3c1b. <EXAMPLE.kotl, 4=012 |c1e> displays the named file, starting at
              the unimplemented features section whose permanent identifer is
              012, with the view specification of: blank lines turned off,
              cutoff after one line per cell, and show ellipses for cells or
              trees which are clipped.

        3c1c. <|ben> is a klink consisting of just a view specification.
              When activated, it sets the view in the current outline to
              display blank lines, ellipses following collapsed lines and
              standard alphanumeric numbering.

      3c2. There are a number of easy ways to insert klinks into koutlines.
           If you have mouse support under Hyperbole, simply click the Action
           Key within the indentation to the left of a cell text.  If you
           then double click on some cell, a link to that cell will be
           inserted where you started.  From a keyboard, use {C-c l} when in
           a koutline or {C-h h o l} when not in a koutline to insert a
           klink.

    3d. The outliner code runs on virtually any UNIX system.  It supports dumb
        terminal, X window, and NEXTSTEP (Display Postscript) displays.

  4. Features left to be implemented:

    4a. Branch handling commands (all cells at same level).

    4b. Copying a single cell without its subtree.

    4c. Replacing one cell or one tree with another.

    4d. Transposing two trees, rather than two cells.

    4e. A small amount of work remains to enable setting different per level
        fonts and colors, so that outline levels are visually easy to
        distinguish.

    4f. Flexible view handling has been only partially implemented.


"ben" ;; kvspec:current
77 ;; id-counter
alpha ;; label-type
3 ;; label-min-width
". " ;; label-separator
3 ;; level-indent

;; depth-first kcell attributes
[[0
  (creator "weiner@altrasoft.com" create-time "19990715:17:14:17" id-counter 77 file "/home/weiner/hyperbole/kotl/EXAMPLE.kotl")]
 [20
  (creator "weiner@beopen.com" create-time "19940104:17:38:28" no-fill t)]
 [75
  (idstamp 20 creator "weiner@beopen.com" create-time "19940104:17:38:28" no-fill t)]
 [34
  (creator "weiner@beopen.com" create-time "19940610:16:43:55")]
 [35
  (creator "weiner@beopen.com" create-time "19940610:16:44:03")]
 [4
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [5
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [6
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [14
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [67
  (creator "weiner@beopen.com" create-time "19951028:04:29:13" no-fill t)]
 [15
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [31
  (creator "weiner@beopen.com" create-time "19940306:18:11:43")]
 [7
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [46
  (creator "weiner@beopen.com" create-time "19950614:21:35:17")]
 [43
  (creator "weiner@beopen.com" create-time "19940610:22:00:46")]
 [22
  (creator "weiner@beopen.com" create-time "19940127:22:41:42")]
 [32
  (creator "weiner@beopen.com" create-time "19940610:16:31:28")]
 [41
  (creator "weiner@beopen.com" create-time "19940610:18:55:09")]
 [42
  (creator "weiner@beopen.com" create-time "19940610:18:55:57")]
 [33
  (creator "weiner@beopen.com" create-time "19940610:16:31:29")]
 [47
  (creator "weiner@beopen.com" create-time "19951022:22:59:26" no-fill t)]
 [8
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [28
  (creator "weiner@beopen.com" create-time "19940128:22:50:44")]
 [29
  (creator "weiner@beopen.com" create-time "19940128:22:50:54")]
 [10
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [30
  (creator "weiner@beopen.com" create-time "19940129:00:27:59")]
 [62
  (creator "weiner@beopen.com" create-time "19951026:08:32:57" no-fill t)]
 [70
  (creator "weiner@beopen.com" create-time "19951030:19:18:49" no-fill t)]
 [71
  (creator "weiner@beopen.com" create-time "19951030:19:19:40" no-fill t)]
 [73
  (creator "weiner@beopen.com" create-time "19951030:19:23:09" no-fill t)]
 [63
  (creator "weiner@beopen.com" create-time "19951026:19:31:34" no-fill t)]
 [64
  (creator "weiner@beopen.com" create-time "19951026:19:33:01" no-fill t)]
 [69
  (creator "weiner@beopen.com" create-time "19951029:06:24:35" no-fill t)]
 [68
  (creator "weiner@beopen.com" create-time "19951029:06:24:27" no-fill t)]
 [65
  (creator "weiner@beopen.com" create-time "19951026:19:33:08" no-fill t)]
 [66
  (creator "weiner@beopen.com" create-time "19951026:19:33:15" no-fill t)]
 [77
  (creator "weiner@beopen.com" create-time "19980226:19:54:44" no-fill t)]
 [48
  (creator "weiner@beopen.com" create-time "19951023:05:55:19" no-fill t)]
 [57
  (creator "weiner@beopen.com" create-time "19951023:10:07:06" no-fill t)]
 [58
  (creator "weiner@beopen.com" create-time "19951023:10:07:26" no-fill t)]
 [49
  (creator "weiner@beopen.com" create-time "19951023:05:55:55" no-fill t)]
 [55
  (creator "weiner@beopen.com" create-time "19951023:08:56:41" no-fill t)]
 [50
  (creator "weiner@beopen.com" create-time "19951023:05:57:26" no-fill t)]
 [51
  (creator "weiner@beopen.com" create-time "19951023:05:58:31" no-fill t)]
 [56
  (creator "weiner@beopen.com" create-time "19951023:08:57:09" no-fill t)]
 [52
  (creator "weiner@beopen.com" create-time "19951023:05:59:59" no-fill t)]
 [53
  (creator "weiner@beopen.com" create-time "19951023:06:00:48" no-fill t)]
 [54
  (creator "weiner@beopen.com" create-time "19951023:06:05:50" no-fill t)]
 [26
  (creator "weiner@beopen.com" create-time "19940128:03:56:23")]
 [27
  (creator "weiner@beopen.com" create-time "19940128:22:36:54")]
 [59
  (creator "weiner@beopen.com" create-time "19951024:03:40:05" no-fill t)]
 [60
  (creator "weiner@beopen.com" create-time "19951024:03:40:13" no-fill t)]
 [61
  (creator "weiner@beopen.com" create-time "19951024:03:40:42" no-fill t)]
 [1
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [11
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [12
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [44
  (creator "weiner@beopen.com" create-time "19940728:21:56:49")]
 [36
  (creator "weiner@beopen.com" create-time "19940610:16:49:34")]
 [37
  (creator "weiner@beopen.com" create-time "19940610:16:50:02")]
 [38
  (creator "weiner@beopen.com" create-time "19940610:16:50:13")]
 [13
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 [16
  (creator "weiner@beopen.com" create-time "19940104:17:38:29")]
 nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.