[go: up one dir, main page]

Menu

[d3a740]: / docs / overview.txt  Maximize  Restore  History

Download this file

47 lines (31 with data), 4.6 kB

 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
This document provides a simple overview to the Ket program. Bear in mind that it is still under active development so things will change.
The program is aimed at a simple algebra manipulation program as a substitute to a piece of paper and pen. In addition to working towards a paperless office (algebra historically being easier to write on paper than on computer), the program seeks to enable better organization and dissemination of mathematical expressions as well as to provide speed and concision to algebraic manipulation.
The most significant feature of the program is its modal interface, which has a steep learning curve, but afterwards should provide the most efficient method of interaction. The interface is deliberate similarit to the Vim text editor, both in order to reduce learning time, but also because many features such as multiple clipboards, and separating editing, insert and visual modes are naturally adaptable from a text editor interface with minimum modification. Each mode offers a different approach to interacting with a given algebraic expression, or to move between expressions.
The internal data structure of the model consists of an ordered list of equations that are displayed vertically. Each equation is modelled as an equation tree. That is, there is a root branch. Branches denote a mathematical operation such as multiplication or integration and each child is an argument. Arguments can be Tokens such as variables, symbols, numbers or other branches.
Each equation is displayed as a separate line of coloured HTML text, or explicitly as a tree. At present the expressions are largely displayed using plane text rather than symbols for simplicity in implementation, but the expressions can be converted to LaTeX expressions whereupon they may then be typeset.
The user interface allows for simple navigation using direction keys: 'j' and 'k' to move to the next and previous equations while 'J' and 'K' moves the current equation up or down the list. An equation may be deleted using the 'x' command.
Internal movement is made possible using the 'i' and 'o' commands to move from a branch to its first/last child. Movement between siblings is performed using 'j' and 'l' to move to the next or previous argument. In order to move back up a level in the tree from an argument to its parent branch, <space> may be used.
The visual equation mode, 'V', allows for multiple equations to be selected and deleted. Otherwise in normal mode (the default, returned to using <Esc>), a single argument in the equation may be selected at any time. Insert branch or symbol modes only update the last line of the display in which text may be entered like in an ordinary text editor. Inputted equations are parsed and the new argument or operator is used to update the currently selected argument, or its family.
In normal mode, various edits may be made. These include changing the operation associated with a given branch, 'q', or adding a parent branch 'Q'.
Multiple clipboards also exist (selected using "<letter> eg "a, "b etc) and may be pasted as a new child, 'p', to replace the current argument 'P' or as a parent branch 'gp'. Deletion is also possible, the current branch and all children are deleted using 'x', the current branch is deleted using 'X' which replaces it with its children and its parent is deleted using 'gp'. Arguments may be replaced using the 'r' command.
Additionally there is a basic undo option, 'u', which pastes the previous versions of the current equation above it. The equation stack is of finite length, and a copy of the current equation is pushed to before every time a modifying operation is performed.
Summary:
Movement:
i o first child last child
h l left right
<space> move to parent
Equation:
...
parent
...
previous
current
first child
...
last child
next
...
delete: parent 'gx'; current 'X'; current and children 'x'
rename: parent 'R'; current <none>; current and children 'r'
branch-rename: current 'q'
branch-addition: add parent 'Q'