Documentation
parent
d2024d1a02
commit
fab43de821
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
TECOC - TECO Editor
|
||||||
|
===================
|
||||||
|
|
||||||
|
Teco is a text editor written by Dan Murphy in 1962. It differs from
|
||||||
|
other editors in several ways as follows:
|
||||||
|
|
||||||
|
1. Character oriented
|
||||||
|
|
||||||
|
Vi and Emacs are screen oriented editors. You view the text on the whole
|
||||||
|
window or screen, and you edit the text right where you see it. Changes take
|
||||||
|
affect immediately.
|
||||||
|
|
||||||
|
ed, ex, edlin are line oriented editors. Edited text is viewed,
|
||||||
|
referenced, and edited by line.
|
||||||
|
|
||||||
|
Teco is character oriented. This means the unit of reference is a
|
||||||
|
single character. On one hand, this may make teco cumbersome to use,
|
||||||
|
but on the other hand, it gives teco very fine control over what is
|
||||||
|
happening.
|
||||||
|
|
||||||
|
Teco does have a video mode, however text is still edited with
|
||||||
|
commands on a character basis. The screen is simply updated once a
|
||||||
|
command is completed to give the user a visual representation of where
|
||||||
|
they are. Text is not edited in the screen view area.
|
||||||
|
|
||||||
|
2. Macros
|
||||||
|
|
||||||
|
In general, vi, ed, and edlin are not programmable. This means you
|
||||||
|
have the functions the editor provides and that is all you can do.
|
||||||
|
However, teco is highly programmable. Programs that you write are
|
||||||
|
called macros. In fact, the original version of Emacs was written as
|
||||||
|
teco macros. Also, "emacs" actually means "Editing Macros".
|
||||||
|
|
||||||
|
|
||||||
|
The original versions of Teco were written in the machine languages of
|
||||||
|
the machines it operated on. As newer machines and editor arose, teco
|
||||||
|
fell into increasing disuse and obscurity.
|
||||||
|
|
||||||
|
In the early '80's Pete Siemsen, a long-time teco user, created a
|
||||||
|
portable version of Teco in the C language called "tecoc". Rather
|
||||||
|
than create a new editor, Pete's goal was to duplicate the original teco
|
||||||
|
as closely as possible.
|
||||||
|
|
||||||
|
As time wore on, Tom Almy, Blake McBride, and others increasingly
|
||||||
|
assisted in tecoc's maintenance (porting, bug fixes, etc.).
|
||||||
|
Eventually, tecoc found a new home and principal support at Tom
|
||||||
|
Almy's home page where Tom kept up with ports to Windows, Mac, and
|
||||||
|
Linux.
|
||||||
|
|
||||||
|
Most recently, Blake McBride:
|
||||||
|
|
||||||
|
1. Merged Tom Almy's various ports along with work done by Blake
|
||||||
|
2. renewed the Windows, Mac, and Linux ports
|
||||||
|
3. re-enabled video support (on Mac & Linux)
|
||||||
|
4. bug fixes and speed improvements
|
||||||
|
5. tested on 64 bit machines
|
||||||
|
|
||||||
|
This latest work is available on github at:
|
||||||
|
|
||||||
|
https://github.com/blakemcbride/Tecoc
|
||||||
|
|
||||||
|
Other documents in the "doc" directory provide complete documentation.
|
||||||
|
See the following files in the "doc" directory:
|
||||||
|
|
||||||
|
BUILD.txt Build and setup instructions
|
||||||
|
INTRO.txt Introduction to using the tecoc
|
||||||
|
teco-manual.txt Complete manual
|
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
TECOC build & setup instructions
|
||||||
|
|
||||||
|
Please note my use of "teco" and "tecoc". "teco" refers to the editor
|
||||||
|
in general, and "tecoc" refers to the particular "tecoc"
|
||||||
|
implementation of teco.
|
||||||
|
|
||||||
|
TECOC has been tested on 64 bit Linux, 64 bit Mac, and 64 bit Windows
|
||||||
|
OSs that were current as of 2015. In the past, this system was build on
|
||||||
|
32 and even 16 bit machines, so I have every reason to believe that it
|
||||||
|
would build as-is on 32 bit environments.
|
||||||
|
|
||||||
|
I used GCC on Linux and Mac, and I used the Microsoft 2013 C compiler
|
||||||
|
on Windows. On the Mac, GCC came automatically when I installed the
|
||||||
|
Apple development kit. I did no special setup.
|
||||||
|
|
||||||
|
The Linux and Mac versions support video and non-video modes. The
|
||||||
|
Windows version only supports non-video mode. (Porting Windows to
|
||||||
|
video using ncurses would probably be pretty simple.) As-shipped, the
|
||||||
|
Linux and Mac versions are setup to build the video versions. This
|
||||||
|
can be controlled by editing their associated makefiles. Linux and
|
||||||
|
Mac machine would need to install the ncurses development library.
|
||||||
|
|
||||||
|
To build, go to the "src" directory and type:
|
||||||
|
|
||||||
|
Linux: make -f makefile.linux
|
||||||
|
|
||||||
|
Mac: make -f makefile.osx
|
||||||
|
|
||||||
|
Windows: nmake -f makefile.win
|
||||||
|
|
||||||
|
You will end up with an executable names "tecoc". That is all you
|
||||||
|
need from this directory.
|
||||||
|
|
||||||
|
Historically, the teco environment included a handful of utilities
|
||||||
|
including:
|
||||||
|
|
||||||
|
teco
|
||||||
|
munge
|
||||||
|
inspect
|
||||||
|
Make
|
||||||
|
|
||||||
|
Tecoc includes all of this functionality in the single tecoc
|
||||||
|
executable. Tecoc has two ways of determining which functionality you
|
||||||
|
desire as follows:
|
||||||
|
|
||||||
|
1. On file systems that have links, one can create an entry with one
|
||||||
|
of the above names that links to the tecoc executable.
|
||||||
|
|
||||||
|
2. Alternatively (especially on Windows), if you execute the tecoc
|
||||||
|
executable directly, then the first argument must be one of the
|
||||||
|
utility names above. "teco" is what you'd mainly use.
|
||||||
|
|
||||||
|
As mentioned, teco supports the ability to create your own macros.
|
||||||
|
User added macros would exist in files named XX.tec
|
||||||
|
where XX is the name of the macro. It need not be two characters long.
|
||||||
|
These macro files must exist somewhere tecoc can find them. To this end,
|
||||||
|
tecoc supports an environment variable named TEC_LIBRARY
|
||||||
|
You should set that environment variable to the directory (full path)
|
||||||
|
where the macros are to exist. Note that TEC_LIBRARY must contain a
|
||||||
|
trailing slash.
|
||||||
|
|
||||||
|
Lastly, the "tec" file extension means "teco macro". There is also a
|
||||||
|
file type "tes". That stands for "teco macro source". Generally, if you
|
||||||
|
have a small macro, you'd just put it in a .tec file. Larger macros
|
||||||
|
would be written in a .tes file allowing comments and space. Later
|
||||||
|
the squeeze function can be used to convery a .tes file into a .tec
|
||||||
|
file.
|
|
@ -0,0 +1,145 @@
|
||||||
|
|
||||||
|
Introduction to using tecoc
|
||||||
|
|
||||||
|
Evocation
|
||||||
|
---------
|
||||||
|
As stated in BUILD.txt, tecoc can either be executed directly, or a
|
||||||
|
file link can be created, or a batch file or shell script can be
|
||||||
|
created. For example, if you want to edit a file name MyFile.txt,
|
||||||
|
if you have a link setup like:
|
||||||
|
|
||||||
|
teco -> tecoc
|
||||||
|
|
||||||
|
then you could execute:
|
||||||
|
|
||||||
|
teco MyFile.txt
|
||||||
|
|
||||||
|
However, if you want to run tecoc directly, you'd have to do:
|
||||||
|
|
||||||
|
tecoc teco MyFile.txt
|
||||||
|
|
||||||
|
The extra, and first, argument, "teco", tells tecoc what mode to run
|
||||||
|
under. The remainder of this document will assume you have the link
|
||||||
|
setup.
|
||||||
|
|
||||||
|
If you have video mode configured, tecoc nevertheless starts in non-video
|
||||||
|
mode by default. To start tecoc in video mode you could do:
|
||||||
|
|
||||||
|
teco -scroll:5 MyFile.txt
|
||||||
|
|
||||||
|
This would make the bottom 5 lines used for commands, and the remaining
|
||||||
|
lines above to be the video display area.
|
||||||
|
|
||||||
|
Additionally, video mode can be turned on or off while editing a file,
|
||||||
|
regardless of the startup parameters. See "video.txt"
|
||||||
|
|
||||||
|
Importantly, the command to save the file and exit is:
|
||||||
|
|
||||||
|
EX followed by two escape key presses
|
||||||
|
|
||||||
|
To exit the edit session without saving, do:
|
||||||
|
|
||||||
|
-1EX followed by two escape key presses
|
||||||
|
|
||||||
|
Commands
|
||||||
|
--------
|
||||||
|
|
||||||
|
Teco is a character based editor. This means that teco keeps track of
|
||||||
|
what character you are at, and not what line you are on. One normally
|
||||||
|
edits a file by positioning the point and editing there.
|
||||||
|
|
||||||
|
The "$" character functions as the "escape key". A single $ is used
|
||||||
|
to separate multiple commands. Two consecutive escapes, $$, cause
|
||||||
|
teco to execute all of the commands up to that point.
|
||||||
|
|
||||||
|
Other characters, besides $, each have a meaning to teco. Some
|
||||||
|
commands consist of more than one character. Teco commands are
|
||||||
|
case-insensitive. This means that "m" and "M" mean the same thing.
|
||||||
|
In this text I will show the commands in uppercase simply to avoid
|
||||||
|
confusion between such letters as ell and one.
|
||||||
|
|
||||||
|
For example, the "L" command causes teco to move its pointer to the
|
||||||
|
following line. If you type "L", nothing happens until you tell teco
|
||||||
|
to execute is by following the "L" with "$$". So,
|
||||||
|
|
||||||
|
L$$
|
||||||
|
|
||||||
|
will cause teco to go to the next line.
|
||||||
|
|
||||||
|
You may have any number of commands specified before executing them,
|
||||||
|
for example:
|
||||||
|
|
||||||
|
LLL$$
|
||||||
|
|
||||||
|
will go down three lines.
|
||||||
|
|
||||||
|
Also, commands may take numeric arguments. For example,
|
||||||
|
|
||||||
|
3L$$
|
||||||
|
|
||||||
|
will go down 3 lines.
|
||||||
|
|
||||||
|
Commands may also be negative, so the following:
|
||||||
|
|
||||||
|
-4L$$
|
||||||
|
|
||||||
|
will cause teco to go up 4 lines. Also, since the default argument is one,
|
||||||
|
|
||||||
|
-L$$
|
||||||
|
|
||||||
|
is the same as -1L$$
|
||||||
|
|
||||||
|
In video mode, you will see the changes occur as soon as you execute $$.
|
||||||
|
In non-video mode, you see nothing unless you ask teco to display a
|
||||||
|
portion of the text. For example, if you type:
|
||||||
|
|
||||||
|
V$$
|
||||||
|
|
||||||
|
you will see the line you are on.
|
||||||
|
|
||||||
|
The current character position is always available vie the "." command.
|
||||||
|
There is also the "=" command that causes teco to display a value, thus:
|
||||||
|
|
||||||
|
.=$$
|
||||||
|
|
||||||
|
causes teco to display the current character position.
|
||||||
|
|
||||||
|
Teco has many, many powerful commands. It has loops, conditionals,
|
||||||
|
variables, etc.. Each letter has a different function. See the
|
||||||
|
included documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Macros
|
||||||
|
------
|
||||||
|
|
||||||
|
A series of commands, since they are only letters, may be entered into
|
||||||
|
a text file. A user may tell teco to read and execute the commands in
|
||||||
|
one of those files. The name associated to that set of commands is the name of
|
||||||
|
the file they are located in (minus the .tec extension). The command
|
||||||
|
used to execute a macro file is "EI", thus, for example, if you have a
|
||||||
|
macro file named "ab.tec" located in the TEC_LIBRARY directory,
|
||||||
|
executing:
|
||||||
|
|
||||||
|
EIab$$
|
||||||
|
|
||||||
|
will cause teco to execute the commands located in that file.
|
||||||
|
|
||||||
|
In this example, the command is "EI". It takes a trailing string argument
|
||||||
|
"ab", and the "$$" means execute it.
|
||||||
|
|
||||||
|
|
||||||
|
Moving On
|
||||||
|
---------
|
||||||
|
|
||||||
|
To learn more, I suggest you read the following, included, documents in
|
||||||
|
the order shown:
|
||||||
|
|
||||||
|
Summary.pdf
|
||||||
|
blake-notes.txt
|
||||||
|
teco-manual.txt
|
||||||
|
wchart.txt
|
||||||
|
|
||||||
|
Many of the other documentation files are either historical or provide
|
||||||
|
greater, tecoc specific, information.
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,48 @@
|
||||||
|
|
||||||
|
Blake's Tecoc notes
|
||||||
|
|
||||||
|
.TES Teco source file
|
||||||
|
.TEC Teco macro file (compressed .TES file)
|
||||||
|
|
||||||
|
The distribution has a lib directory that has some teco macros. The
|
||||||
|
SQU macro used to squeze / compress teco source files is included
|
||||||
|
there.
|
||||||
|
|
||||||
|
= display value
|
||||||
|
|
||||||
|
Use /nomemory to avoid memory files
|
||||||
|
|
||||||
|
mung is just a link to teco
|
||||||
|
|
||||||
|
To compile / compress a teco macro file do (np.tes to np.tec):
|
||||||
|
|
||||||
|
mung squ np.tec=np.tes/D:N/L:Y/B:Y/T:Y/C:Y/W:N/A:Y/E:N
|
||||||
|
|
||||||
|
My macros
|
||||||
|
|
||||||
|
bl beginning of line
|
||||||
|
bw beginning of word
|
||||||
|
cls clear screen
|
||||||
|
dw delete word
|
||||||
|
el end of line
|
||||||
|
ew end of word
|
||||||
|
jmp jump to line
|
||||||
|
np next page - display and move forward one screen
|
||||||
|
pp previous page - display and move back one screen
|
||||||
|
|
||||||
|
0^X case insensitive search mode (default)
|
||||||
|
-1^X case sensitive search mode
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Video mode of tecoc
|
||||||
|
|
||||||
|
5,7:w to evoke video display (5 command lines at bottom)
|
||||||
|
0,7:w video mode off
|
||||||
|
-4:w to redraw screen
|
||||||
|
^w put current line at top of screen
|
||||||
|
|
||||||
|
|
||||||
|
A file can be started in video mode with:
|
||||||
|
|
||||||
|
teco -scroll:5 myfile on linux or Mac
|
|
@ -0,0 +1 @@
|
||||||
|
-ll ! goto the beginning of a line !
|
|
@ -0,0 +1 @@
|
||||||
|
[0+0U0Q0"E1U0'Q0">Q0<<0A"R|0;'C><0A"R0;'C>>|-Q0<<-A"R0;'-C><-A"R|0;'-C>>']0
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
! Clear Screen !
|
||||||
|
|
||||||
|
26<
|
||||||
|
>
|
|
@ -0,0 +1,101 @@
|
||||||
|
|
||||||
|
|
||||||
|
TECO COMMANDS
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
File Commands
|
||||||
|
------------------------------------
|
||||||
|
EX save file - exit
|
||||||
|
EBfile open file for input/output with backup
|
||||||
|
ERfile open input file for reading
|
||||||
|
EWfile open output file for writing
|
||||||
|
EC save buffer - clear buffer - close input/output files
|
||||||
|
EF close output file
|
||||||
|
EK kill current output file (abort edit)
|
||||||
|
Y read the next page
|
||||||
|
P save page - read next page
|
||||||
|
nP perform n Ps
|
||||||
|
|
||||||
|
|
||||||
|
Positioning Commands
|
||||||
|
------------------------------------
|
||||||
|
J jump to beginning of buffer
|
||||||
|
nJ jump to character position n
|
||||||
|
L beginning of next line
|
||||||
|
nL move n relative lines (0 means beginning of line)
|
||||||
|
C move forward one character
|
||||||
|
nC move n characters
|
||||||
|
R move reverse one character
|
||||||
|
nR move n relative characters
|
||||||
|
Stext$ search buffer for text (position after search string)
|
||||||
|
(if no text use previous search text)
|
||||||
|
Ntext$ search entire file from current position
|
||||||
|
nS search for the nth occurance (negative n means reverse)
|
||||||
|
nN search for the nth occurance (all pages)
|
||||||
|
|
||||||
|
|
||||||
|
Type Commands
|
||||||
|
-------------------------------------
|
||||||
|
T type current position to EOL
|
||||||
|
nT type n relative lines (0 means from BOL)
|
||||||
|
HT type whole buffer
|
||||||
|
V view whole current line
|
||||||
|
nV view n lines around current line
|
||||||
|
|
||||||
|
|
||||||
|
Text modification commands
|
||||||
|
-----------------------------------------
|
||||||
|
Itext$ insert text
|
||||||
|
@I/txt/ insert txt (may contain escapes)
|
||||||
|
K kill to EOL
|
||||||
|
nK kill n relative lines (0 meands BOL to current position)
|
||||||
|
HK kill whole buffer
|
||||||
|
D delete one character
|
||||||
|
nD delete n relative characters
|
||||||
|
FDtext$ find and delete text
|
||||||
|
FKtext$ find and kill from initial location to final location
|
||||||
|
FRtext$ replace last found text with text
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Constants & Misc. Commands
|
||||||
|
------------------------------------
|
||||||
|
Z number of characters in the buffer
|
||||||
|
B 0
|
||||||
|
H B,Z
|
||||||
|
. current position
|
||||||
|
= display value
|
||||||
|
n<cmd> execute command string cmd n times
|
||||||
|
n^Q convert line offset (from 0) to character offset
|
||||||
|
(only works when starting from beginning of buffer)
|
||||||
|
|
||||||
|
|
||||||
|
Command Line
|
||||||
|
--------------------------------------
|
||||||
|
^U erase command line
|
||||||
|
*q put last command line into q register q
|
||||||
|
|
||||||
|
|
||||||
|
Q Register Commands
|
||||||
|
----------------------------------------
|
||||||
|
nUq put n into q register q
|
||||||
|
Qq get value from q register q
|
||||||
|
^Uqstr put string str into q register q
|
||||||
|
nXq copy next n (default 1) lines into q register q
|
||||||
|
n:Xq append next n lines into q register q
|
||||||
|
Gq get text in q register q and insert into buffer
|
||||||
|
Mq execute macro commands in q register q
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
[0+0U0Q0"E1U0'Q0">Q0<<0A"R0;'D><0A"R|0;'D>>|-Q0<<-A"R0;'-D><-A"R|0;'-D>>']0
|
|
@ -0,0 +1 @@
|
||||||
|
l-2c ! goto the end of a line !
|
|
@ -0,0 +1 @@
|
||||||
|
[0+0U0Q0"E1U0'Q0">Q0<<0A"R0;'C><0A"R|0;'C>>|-Q0<<-A"R|0;'-C><-A"R0;'-C>>']0
|
|
@ -0,0 +1 @@
|
||||||
|
[0-1U0JQ0J]0
|
|
@ -0,0 +1 @@
|
||||||
|
ei20l-20t ! macro to display the next screen full !
|
|
@ -0,0 +1 @@
|
||||||
|
-20l20t ! display previous screen !
|
|
@ -0,0 +1,4 @@
|
||||||
|
-1^x ! enable case sensitive searches !
|
||||||
|
5*256+^^!ev ! display context before prompt !
|
||||||
|
0,16ed ! retain dot after failed searches !
|
||||||
|
$$
|
|
@ -1,70 +0,0 @@
|
||||||
Command line
|
|
||||||
------- ----
|
|
||||||
-NOPAGE
|
|
||||||
Don't separate input into pages. Instead, treat form feeds
|
|
||||||
as normal characters.
|
|
||||||
+nnn
|
|
||||||
where nnn is any number of digits. Go to line number nnn and
|
|
||||||
set NOPAGE. Note this uses the UNIX end of line convention
|
|
||||||
for use with cc output &c. The non-unix line termination will
|
|
||||||
still be used for nL and other intrinsic TECO commands, this just
|
|
||||||
controls the starting line AT INVOCATION.
|
|
||||||
-SCROLL:nnn
|
|
||||||
do nnn,7:w
|
|
||||||
-SCROLL:nnn:SEEALL
|
|
||||||
do nnn,7:W and 1,3:W
|
|
||||||
-INSPECT
|
|
||||||
Same as /INSPECT
|
|
||||||
-NOMEMORY
|
|
||||||
Same as /NOMEMORY
|
|
||||||
Video
|
|
||||||
-----
|
|
||||||
^W Immediate mode command - try to place line containing dot in
|
|
||||||
centre of scope window
|
|
||||||
-4W Complete redraw of screen
|
|
||||||
-1W Stop refreshing scope before each prompt
|
|
||||||
1W Start refreshing scope before each prompt
|
|
||||||
0W refresh scope
|
|
||||||
3:w Seeall Mode (set to 1 if SeeAll is on, 0 otherwise)
|
|
||||||
seeall is more unix style then you might expect
|
|
||||||
5:w Hold mode is not properly implemented. I don't like it anyway.
|
|
||||||
7:W Number of lines in command window. The size of the scope window
|
|
||||||
will be (Rows - 7:W (- 1 if ET&256))
|
|
||||||
8:w Attribute for special characters. This is highly implementation
|
|
||||||
dependent (curses implementation dependent). Under SUN OS 4.1
|
|
||||||
0 - no marking
|
|
||||||
1 - underline
|
|
||||||
2 - reverse
|
|
||||||
4 - blink
|
|
||||||
8 - dim
|
|
||||||
16 - bold
|
|
||||||
128 - ALT_CHARSET
|
|
||||||
currently controls marking of <CR> `
|
|
||||||
END OF PAGE (BTEE/+)
|
|
||||||
9:W Bit 0 - keypad support on
|
|
||||||
Bit 1 - do not do timeout escape sequence detection
|
|
||||||
ET&1 image mode - doesn't really do much with curses version
|
|
||||||
ET&2 use scope for delete and control-U
|
|
||||||
ET&4 accept lowercase input
|
|
||||||
ET&32 read with no wait on control-T (unimplemented - easy though)
|
|
||||||
ET&2048 reverse roles of BS and DEL (good if you use stty erase ^H,
|
|
||||||
in particular the key placement of BS is sometimes much easier
|
|
||||||
to get at then DEL). Should I have it detect the kill character
|
|
||||||
and automatically set this?
|
|
||||||
ET&8192 accept ` as escape (for VT220 terminals)
|
|
||||||
ET&16384 special VT200 mode
|
|
||||||
ET&32768 trap control-C
|
|
||||||
EZ&1 if false VMS style versioning for backup files (multiple backups)
|
|
||||||
if true only one backup level (foo, foo.bak)
|
|
||||||
EZ&8 if TRUE use LARROW (<) for CR, if false use `
|
|
||||||
EZ&16 if set then prefer audio beep else visual flash
|
|
||||||
EZ&32 winline divider for scope
|
|
||||||
EZ&128 if set DO NOT stop read on FF otherwise make pages as usual
|
|
||||||
EZ&256 UNIX NL-convert LF to <CR><LF> on input and invert on output
|
|
||||||
ED&512 controls scope display. If set will use VT100 line drawing
|
|
||||||
characters for CR and LF (in non-scope mode). May degrade
|
|
||||||
performance.
|
|
||||||
EZ&2048 if set use BTEE for end of buffer, else use DIAMOND
|
|
||||||
(desirable for pathological terminal types)
|
|
||||||
EZ&8192 don't show CR in scope - closer to TECO-11, but really
|
|
||||||
not as good in my opinion (Mark Henderson)
|
|
Loading…
Reference in New Issue