editorF :: F EditCmd EditEvt editorF' :: (EditorF -> EditorF) -> F EditCmd EditEvt data EditorF = Pars [Pars] instance HasFontSpec EditorF selectall :: [EditCmd] loadEditor :: String -> [EditCmd] setEditorCursorPos :: (Int, Int) -> [EditCmd] data EditCmd = EditShowCursor Bool | EditMove EditStop IsSelect | EditReplace String | EditGetText | EditGetField | EditGetSelection | EditUndo | EditRedo data EditEvt = EditText String | EditField (String, String, String) | EditCursor Rect | EditChange (InputMsg String) instance Eq EditEvt instance Ord EditEvt data EditStop = EditStopFn EditStopFn | EditPoint Point | EditLine EDirection type EditStopFn = String -> String -> EditStopChoice data EditStopChoice = EdGo EDirection EditStopFn | EdStop data EDirection = ELeft | ERight instance Eq EDirection instance Ord EDirection
editorF
is a multi-line text editor which supports simple
text editing. Key bindings are in an Emacs-like fashion. It also
supports cut/copy/paste of selections.
data EditCmd = EditShowCursor Bool | EditMove EditStop IsSelect | EditReplace String | EditGetText | EditGetField | EditGetSelection | EditUndo | EditRedo
data EditEvt = EditText String | EditField (String, String, String) | EditCursor Rect | EditChange (InputMsg String)
EditReplace r
will replace the selected text in the editor with
r
. The value selectall
can be used to first select all
the text. These two are put together in loadEditor
which replaces the
current text with a new text. The message setEditorCursorPos (row,col)
moves the cursor to a particular row and column, which are numbered from 1
and up.
As a response to EditGetText
, the editor will output
its content r
as EditorText r
. The other constructors can be used to control the
editor. (more documentation needed about this!)
The editor understands the following keys (in Emacs notation):
Cursor movements:
Arrow keys move the cursor one char, as well as C-p,C-n,C-f,C-v
M-Left,M-Right, M-f, M-b moves one word.
The cursor can also be moved with mouse button 1.
Selecting text:
By holding down Shift, the cursor movement keys will also select the text.
By Shift-clicking with mouse button 1, or dragging with mouse button 1, text is selected.
Inserting/deleting text:
By typing text, the selected text is replaced by the typed text. Pressing \key{DEL} will remove the selected text, or if no text is selected, remove the character to the left of the cursor. If no text is selected, M-\key{DEL} will delete the word to the left of the cursor.
Cut/Copy/Paste:
A menu with these commands will popup when mouse button 3 is pressed:
Cut: The selected text is made into the current selection (selection in the X Windows sense), and deleted.
Copy: The selected text is made into the current selection.
Paste: The selected text is replaced by the current selection.
Undo/Redo:
Undo: C-/. Redo: C-?
The undo buffer is by default infinite (thus producing a memory leak).
This can be changed by the command line argument -undodepth
. By
specifying -undodepth 0
, there is no undo available.