[Toybox] Editors and such.

Dennis McCunney dennis.mccunney at gmail.com
Tue Jul 17 20:58:40 PDT 2012


On 06/28/2012 05:31 PM, David Seikel wrote:

Coming late to this party, but..

> More importantly, the infrastructure is taking shape well.  So right
> now making a really cut down microemacs, wordstar, nano, or whatever is
> as simple as providing a different key to command mapping array, then
> calling the editLine() function.  New commands for a more feature full
> editor should be easy to add.

I wonder if it's really that simple?  Most of the discussion I've seen 
here seems to focus on how you display the text on screen, but that's 
only part of the issue.  Pagers like less simply read files from disk 
and put the results on screen, letting you scroll forward and backward. 
  Less was popular when it first came out because it simply started to 
read from disk and put up what it had, which could be a lot faster than 
using an editor like vi in read-only mode and needing to wait for the 
whole file to load.

But when you want to *edit* files, you start running into questions of 
how you will store the text to be edited in memory.  Storing it as one 
big blob may not be feasible when you are dealing with large files, and 
you have issues of how you handle things like copying, moving or 
deleting blocks.

Some editors have used linked lists or doubly linked lists, where the 
list is an array of lines.  What happens if the file you want to edit is 
one *very* long line?   Current practice seems to be using the "buffer 
gap" technique.  An outfit called Blue Mug software did a research paper 
on writing a word processor for handheld devices that might be a useful 
reference.  See http://goo.gl/bJtPt

Additional documentation that might be useful is here:
http://texteditors.org/cgi-bin/wiki.pl?DesigningTextEditors

Something else to look at might be Albrecht Kliene's e3 editor.  e3 is 
open source and cross platform, with X86 versions available for Linux, 
FreeBSD, NetBSD, OpenBSD, Win9x, QNX, Atheos, BeOS(TM), DOS and ELKS, 
and a version for ARM as well.  Significantly, they're written in NASM 
Assembler.  There is also a generic C version for other platforms.

e3 emulates a subset of the emacs, nedit, pico, vi, and WordStar command 
sets.  Which emulation it uses is determined by the name it is called 
by, and the usual installation practice is to hard link or symlink it to 
the desired names.  The 64 bit Linux executable is a whopping 17K in 
size here.

(Under DOS/Windows, there is a 4K stub and a 20K overlay.  On a 16 bit 
system it's possible to use just the 4K stub, which has WS keybindings 
and a 64K file size limit.)

e3 is at https://sites.google.com/site/e3editor/

Key bindings in vi mode:

<ESC>                   enter cmd mode
h,j,k,l,+,-,<Ret>,<SPC> move by chars&lines
^B,^F,^D,^U             move by [half]page
$,0,^,w,b,e,H,L,M,z.    move in line/screen
/,?,G                   srch fwd/bwd, go EOF
ma,'a                   set/go marker a
x,X,<Del>,dw,D          dele chr,word,EOL
S,C,dd,d'a,yy,y'a       subst,change,dele,yank
p,P                     paste
A,a,I,i,<Ins>,O,o       enter ins.mode
R,r                     enter ovw.mode,ovw.chr
J                       join lines
ZZ,^Z, u                save&quit,suspend, undo!
;,#                     E3 SPECIAL: set edit mode,calculate
:w,:wq,:x,:q,:q!,:e     ex mode:save,quit,save_as,edit other
:0,:$,:<line#>          ex mode:go BOF,EOF,line
:h                      ex mode:help
:<other cmd>            pipe buffer thru 'sed'


Key bindings in WS mode:

Files:  ^KR Insert      ^KS Save        ^KX Save&Exit   ^KQ Abort&Exit
         ^KD Save&Load   ^KP Pipe buffer thru 'sed'

Blocks: ^KB Start       ^KK End         ^KC Copy        ^KY Del
         ^KV Move        ^KW Write

Search: ^QF Find        ^L  Repeat      ^QA Srch&Repl

Move:   ^E  Up          ^X  Down        ^S  Left        ^D  Right
         ^R  Page Up     ^C  Page Dn     ^W  Scroll Up   ^Z  Scroll Dn

Quick-  ^QE Wnd Top     ^QX Wnd Bott    ^QS Home        ^QD End
-Move:  ^QR BOF         ^QC EOF         ^QB Blk Begin   ^QK Blk End
         ^F  Next Word   ^A  Prev Word   ^QI Line#       ^QV Last Find

Delete: ^T  Word        ^Y  Line        ^H  Left        ^G  Chr
         ^QY Line End    ^QDel,^QH Line Beg

Other:  ^KM Set mode    ^KN Numerics    ^KZ Suspend     ^U  Undo 



Key bindings in EMACS mode:

Files:  ^X^C Exit       ^XI  Insert     ^X^S Save       ^X^F Load New
         ^X^W Write new  ^X^H Help       ^X^P Pipe buffer thru 'sed'

Move:   ^P   Up         ^N  Down        ^B   Left       ^F   Right
         altV Pg up      ^V  Pg down     altB Left word  altF Right word
         ^A   Home       ^E  End         alt< BOF        alt> EOF
         altG Go line#   ^L  Center Pos

Search: ^S Find fwd     ^R Find bwd     alt% Search&Replace like WS

Buffer: altW Copy       ^Y Yank         ^<SPC> Mark     ^X^X Xchg Mark/Pt

Delete: ^K Line         ^W Region       ^H Left Chr     ^D This Chr

Other:  ^O Open line                    ^I Ins Tab      ^Q Quoted Ins
         ^M NL           ^J NL+indent    altX Set edit mode
         ^X^N Calculate                  ^Z Suspend      ^_  Undo


Key bindings in PICO mode:

Files:  ^XN ExitNoSave  ^XY Exit+Save   ^XL Save+Load New File
         ^O  Save        ^S  Save as     ^R  Read

Move:   ^P  Up          ^N  Down        ^B  Left        ^F  Right
         ^Y  Page up     ^V  Page down   ^QN Next word   ^QP Previous word
         ^A  Home        ^E  End         ^QS Start       ^QE EOF
         ^QT Top screen  ^QB Bottom scr  ^QL Line #      ^QF last Find

Search: ^W  Where is    ^T  Search&Repl ^JT Repeat Search & Replace

Delete: ^H  Left char   ^D  This char   ^K  Kill line/region
         ^JW Word        ^JL Line end    ^JH Line begin

Other:  ^U  Unkill      ^G  Help        ^^,^L,^<SPC> Mark region
         ^QM Set Edit Mode               ^JP Pipe buffer thru 'sed'
         ^QC Calculate                   ^Z Suspend      ^QU Undo


Key bindings in NEDIT mode:

Files:  ^QN Exit_NoSave ^QY Exit&Save   ^QL Save&Load new
         ^S  Save        ^W  WriteTo=SaveAs
Move:   ^L  Line#
         ^F  Find        ^R Search&Replace (like WS)
         ^G  Go repeat last ^F,^R

Select: ^<SPACE> begin&extend by cursor keys (like Emacs)
         ^A  All buffer
         ^X  Cut         ^C Copy         ^V Paste

Other:  ^E  Set edit mode
         ^K  Calculate
         altH Help       ^Z Suspend      ^U Undo



 1342583920.0


More information about the Toybox mailing list