Tioga Input Virtual Machine Description.
[IVY]<McGregor>Tioga>TiogaInput.atoms; Edit by McGregor,  2-Jul-81 14:03:52

This file contains a description of the virtual interface supported by Tioga for input events received through the CedarDocs Input Focus mechanism.  It is intended as a reference guide for expert users of Tioga who wish to alter their Tioga TIP table to experiment with user interface design, but not as a detailed description of the input primitive semantics.  For more information on TIP tables in general, see [IVY]<McGregor>TIP>TIP.documentation.  For an example of a TIP table used by Tioga, see [IVY]<McGregor>Tioga>Tioga.tip.

Listed below are the set of atoms that are understood by the Tioga input dispatcher, some of which have side effects and set state within the Tioga editor, others assume preceeding parameters.  By convention below, operations are grouped by both function and type.  The last parenthetical list following the first operation in each group describes the group as either a set of operations or as modifiers for operations that follow.  A sticky modifier is one whose effect persist after the particular TIP event has been executed and must be reset with the inverse operation.  Those atoms followed by an asterisk are not fully implemented at the time this version of the document was created.



Mouse Selection Related Operators:

The first group of the following atoms causes Tioga to make a selection.  All require the current mouse coordinates as input preceeding the operator (the TIP reserved word "Coords").  Optionally, any of the operators may be preceeded by any of the modifiers following.

$SelAll*	-- Select the entire document in node granularity.
$SelChar	-- Selects the nearest character (operation).
$SelLine*	-- Selects a single line as displayed.
$SelNode	-- Selects the indicated node.
$SelPoint*	-- Places an insertion caret.
$SelSent*	-- Selects a "sentence" with the delimiter(s) included.
$SelWord	-- Selects a "word" with the delimiter included.
$SelClick*	-- Selects a character, or expands the selection to the next larger selection
		-- granularity if clicked again over the same "spot" (see spot ops below).
$SelExtend	-- Extend the nearest end of the current selection to the object indicated,
		-- using the current granularity.
$SelUpdate	-- Alter the current selection to the object indicated, using the current
		-- granularity.
$SelExchange	-- Exchanges the primary and secondary selections.

$SelRight*	-- Move the insertion caret to the right of the selection (operation).
$SelLeft*	-- Move the insertion caret to the left of the selection.

$SelPrimary	-- Make a primary selection (default) (modifier, non-sticky).
$SelSecondary	-- Make a secondary selection.
$SelPendDel*	-- Make selection "Laurel-style" pending delete.
$SelInvert*	-- Inverted highlighting (default for primary selections).
$SelUnderline*	-- Underlined selection (default for secondary selections).
$SelDotUnder*	-- Dotted-underlined selection.

$SelCharSpots*	-- Affects $SelClick; set spot to original character (default) (modifier, sticky).
$SelSelSpots*	-- Affects $SelClick; set spot to include anything in existing selection.
$SelDelims*	-- Affects $SelWord and $SelSent; include delimiters (default).
$SelNoDelims*	-- Affects $SelWord and $SelSent; do not include delimiting punctuation.



Text Operators:

These operations are modeless and most require no other parameters.  Unary operators act on the current primary selection whereas binary operators use both primary and secondary selections.  The $SelSecondary operation may be supplied ahead of a text operation to unary operators to act on the secondary selection, and binary operators to act on both primary and secondary selections except with the target and destination reversed.

$AllCaps	-- Force selection to upper case letters.
$AllLower	-- Force selection to lower case letters.
$InitialCaps	-- Force initial letters of selected words to upper case.
$ControlChar*	-- Add control bit to selected char(s).
$OctalChar*	-- Interpret selection as octal number and replace with corrresponding character.

$ApplyLook*	-- Takes a numeric parameter and apply mapped looks to selection.
$RemoveLook*	-- Takes a numeric parameter and remove mapped looks from selection.
$CaretLook*	-- Takes a numeric parameter and apply mapped looks to caret.
$NodeType*	-- Takes a numeric parameter and set selected node to mapped type.

$BackSpace	-- Delete character to left of insertion caret.
$BackWord*	-- Delete word to left of insertion caret.
$BSRight*	-- Delete character to right of insertion caret.
$BWRight*	-- Delete word to right of insertion caret.

$MakeNode*	-- Make a new (type=text?) node.
$MergeNodes*	-- Merge two adjacent nodes of the same type.
$SplitNode*	-- Split a node into two nodes at the insertion caret.

$Copy		-- Binary: Copies secondary selection to primary.
$Delete		-- Deletes selection.
$Move		-- Binary: Moves secondary selection to primary.
$Replace*	-- Binary: Replace primary selection with secondary selection.
$Transpose	-- Binary: Exchanges contents of primary and secondary selections.

$Get		-- Load a new file.  File parameter is current selection.
$Put		-- Save the current edits.  File parameter is fixed at "Get" time.
$Include*	-- Insert subfile.  File parameter is tbd.

$Undo*		-- Undoes last text editing command (atomicity issue need resolution here).
$Again*		-- Repeat the "previous action" on a possbily new selection.
$Stop*		-- Stop any ongoing editing command.
$Eval*		-- Evaluate the selection in some novel way yet to be designed.

$Jump*		-- There are many flavors of jump and find not yet designed.
$Scroll*	-- There are many flavors of scroll not yet designed.
$Focus*		-- There are many flavors of focus not yet designed.

$Subst*		-- Some flavor(s) of substitute not yet designed.
$Sort*		-- Some flavor(s) of sort not yet designed.

$InqNodeType*	-- Somewhere display the type of the selected node.
$ShowEditHist*	-- Somewhere display the edit history of the selected document.

$ReadProfile	-- Instantiate and push a new copy of Tioga.tip.



Implementor's testing hacks:

Use at your own risk.

$Paint		-- Call CedarDocs.PaintDocument on the current InputFocus owner.
$GetIndent	-- Like Get, but calls TextEdit.GetIndent to create nodes for paragraphs.