aboutsummaryrefslogtreecommitdiffhomepage
path: root/README
blob: 0bb199d2a18beed37c986346f955d32bcf0d7331 (plain)
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
[![Continuous Integration](https://github.com/rhaberkorn/sciteco/actions/workflows/ci.yml/badge.svg)](https://github.com/rhaberkorn/sciteco/actions/workflows/ci.yml)
[![Nightly Builds](https://github.com/rhaberkorn/sciteco/actions/workflows/nightly.yml/badge.svg)](https://github.com/rhaberkorn/sciteco/releases/tag/nightly)

Overview
========

SciTECO is an interactive TECO dialect, similar to Video TECO.
It also adds features from classic TECO-11, as well as unique new ideas.

The basic approach to text editing is both radically different and surprisingly similar to popular
editors like Vi or EMacs. Instead of using mostly keyboard commands to modify text in a visual
manner, in SciTECO you edit a program (called macro) using very few keyboard commands (called
immediate editing commands). This program edits text for the user and is executed immediately,
as far as possible. For instance, moving the cursor to the right can be done immediatly via the
"C" command which is a part of the editor language. The language is the editor so to speak.
When you delete a character from the end of the command line macro (called rubout), the
side-effects of that character which may be a command or part of a command, are undone.

![SciTECO demo](https://sciteco.sf.net/screenshots/v2.1-dev-freebsd-ncurses.gif)

SciTECO uses the [Scintilla](https://www.scintilla.org/) editor component and supports
GTK+ 3 as well as Curses frontends (using [Scinterm](https://foicica.com/scinterm/)).

The Curses frontend is verified to work with [ncurses](https://www.gnu.org/software/ncurses/),
[NetBSD Curses](https://github.com/sabotage-linux/netbsd-curses),
[PDCurses/XCurses](https://github.com/wmcbrine/PDCurses),
[PDCursesMod](https://github.com/Bill-Gray/PDCursesMod) and
[EMCurses](https://github.com/rhaberkorn/emcurses).
All X/Open-compatible libraries should be supported.
SVr4 curses without enhanced definitions is **not** supported.

Linux, FreeBSD, [Mac OS X](https://github.com/rhaberkorn/sciteco/wiki/Mac-OS-Support),
Windows (MinGW 32/64) ~~and [Haiku](https://www.haiku-os.org/) (gcc4)~~ are tested and supported.
SciTECO compiles with both GCC and Clang.
SciTECO should compile just fine on other UNIX-compatible platforms.
However UNIX-compatibility is not strictly required:
Since SciTECO primarily depends on [glib](https://developer.gnome.org/glib/) and
some implementation of Curses, it should be easy to port to even more exotic platforms.

__Warning: The SciTECO language is work in progress and has not yet fully stabilized.
It may change drastically and in backwards-incompatible ways in the repository's
master branch and between releases until version 3.0 is released.__

Features
========

* Supports most of the [Video TECO](http://www.copters.com/teco.html) commands.
* Improved parser compared to classic TECOs, making SciTECO
  more similar to other imperative languages.
* Operator precedence in arithmetic expressions and an argument stack that may be modified
  by the user (commands may have more than two arguments)
* Extended Q-Register namespace (arbitrary strings): Can be used to build libraries and
  can be abused as a data structure.
* Quick access to the system clipboard via special `~` registers, even on ncurses!
* Make use of your keyboard's function keys by assigning them to strings inserted into
  the command stream.
  This also enables navigating with function keys (e.g. cursor keys) as demonstrated
  by the standard library `fnkeys.tes`.
  In fact, all keys with printable representation and control keys can be remapped using
  key macros - and they can be context-sensitive as well!
* There is scriptable mouse support via the key macro mechanism (see also `fnkeys.tes`).
  Autocompletion popups can also be scrolled and clicked.
* Many TECO-11 features, like that most commands have a colon-modified form, string-building
  characters, exotic match characters...
* Interactivity: Immediate searching (similar to search-as-you-type) and
  context-sensitive immediate editing commands.
  In fact almost everything is done on-the-fly, giving immediate interactive feedback.
  This also means that commands can fail immediately and will not even be accepted into
  the command line, making it harder to write incorrect interactive macros.
  Context-sensitive immediate editing commands also make it much harder to destroy a day's
  work by accident than in classic TECOs.
  Also, SciTECO supports many types of context-sensitive auto-completions (i.e. the Tab-key):
  Q-Register names, file names, directories, goto labels, help topics...
* Command rubout: SciTECO can undo almost every side effect, including file writes
  (`EW` command).
  This makes it even harder to destroy work by accident than in most other
  editors.
  Rubbed out commands can be re-inserted (redo).
* Munging: Macros may be munged, that is executed in batch mode. In other words, SciTECO
  can be used for scripting.
  By default, a profile is munged.
* Full Unicode (UTF-8) support: The document is still represented as a random-accessible
  codepoint sequence.
  While SciTECO macros can be written in plain ASCII - even in its printable subset -
  Unicode glyphs can be used everywhere, where a single character is accepted, for instance
  in single letter Q-Register names.
* 8-bit clean: SciTECO can be used to edit binary files if the encoding is changed to
  ANSI and automatic EOL conversion is turned off (easiest with `--8bit`).
* Self-documenting: An integrated indexed help system allows browsing formatted documentation
  about commands, macros and concepts within SciTECO (`?` command).
  Macro packages can be documented with the `tedoc` tool, generating man pages.
  Man pages and [GNU troff](https://www.gnu.org/software/groff/) markup in general
  can be compiled into documents loadable by SciTECO using the `grosciteco` post-processor.
* Cross platform: Builds on a wide variety of platforms. While being focused on UNIX
  and drawing some inspiration from it, other platforms (esp. Windows) are fully
  supported. It is made sure that SciTECO integrates well into all supported
  platforms even without an UNIX-like environment.
* SciTECO is console and command-line friendly.
  Besides running under Curses and being a scripting language, it is written
  to be used interactively on system terminals, can be integrated into
  UNIX pipelines and can be extended with external command-line tools
  (see `EC` command).
* Themeability and consistency: Color settings (or schemes) are applied consistenly
  across all supported platforms. Gtk+ builds allow further customization using CSS.
  The user interface is kept minimalistic and is consistent in spirit across the
  different platforms.
* Syntax highlighting, styles, line numbers, etc. thanks to Scintilla, Lexilla and Scintillua.
  Low-level Scintilla commands can also be accessed to extend SciTECO.
  SciTECO even syntax highlights code, written in the SciTECO language itself.
* A growing standard library of macros with frameworks for color schemes, syntax highlighting
  and buffer sessions.
  Optimized for hack-ability rather than completeness.

Download
========

There are prebuilt binary packages and source bundles for your convenience:

* [Github Releases](https://github.com/rhaberkorn/sciteco/releases)
* [Download Archive at Sourceforge](https://sourceforge.net/projects/sciteco/files/)
* [FreeBSD port](https://www.freshports.org/editors/sciteco/)
  [![FreeBSD port](https://repology.org/badge/version-for-repo/freebsd/sciteco-curses.svg?header=PACKAGE)](https://repology.org/project/sciteco-curses/versions)
* [Ubuntu PPA](https://launchpad.net/~robin-haberkorn/+archive/sciteco)
* [Arch User Repository](https://aur.archlinux.org/packages/sciteco-git)
  [![AUR package](https://repology.org/badge/version-for-repo/aur/sciteco.svg?header=PACKAGE)](https://repology.org/project/sciteco/versions)
* [Alpine Linux package](https://pkgs.alpinelinux.org/package/edge/testing/x86_64/sciteco)
  [![Alpine Linux Edge package](https://repology.org/badge/version-for-repo/alpine_edge/sciteco.svg?header=PACKAGE)](https://repology.org/project/sciteco/versions)
* [Chocolatey package](https://community.chocolatey.org/packages/SciTECO)
  for Windows users
  [![Chocolatey package](https://repology.org/badge/version-for-repo/chocolatey/sciteco.svg?header=PACKAGE)](https://repology.org/project/sciteco/versions)
* Yocto/OpenEmbedded users should try the
  [`sciteco` package from this layer](https://github.com/rhaberkorn/meta-rhaberkorn).
* Users of OpenWrt may try to install the
  [`sciteco` package of this feed](https://github.com/rhaberkorn/nanonote-ports).

These releases may be quite outdated and not all of them are provided or tested by the author.
So you may also try out the [nightly builds](https://github.com/rhaberkorn/sciteco/releases/tag/nightly) -
they represent the repository's HEAD commit but may well be unstable.
Both ncurses and Gtk+ packages are provided for Ubuntu, generic Linux
(in the form of [AppImages](https://appimage.org/)) and Windows.
For [Mac OS X](https://github.com/rhaberkorn/sciteco/wiki/Mac-OS-Support),
we currently only provide *experimental* ncurses builds.

If everything fails, you can try building from source.
See [`INSTALL`](https://github.com/rhaberkorn/sciteco/blob/master/INSTALL) for more details.

Community
=========

* Join our new [IRC chatroom](https://web.libera.chat/#sciteco): #sciteco at irc.libera.chat
* Report [bugs via Github](https://github.com/rhaberkorn/sciteco/issues)
  if you can (or write an E-Mail to the author).
* You can also use [Github Discussions](https://github.com/rhaberkorn/sciteco/discussions)
  for asking questions.
* We are also present in the [alt.lang.teco](https://newsgrouper.org.uk/alt.lang.teco) Usenet group,
  but it is not restricted to SciTECO.

Additional Documentation
========================

* Online manpages:
  [__sciteco__(1)](https://rhaberkorn.github.io/sciteco/sciteco.1.html),
  [__sciteco__(7)](https://rhaberkorn.github.io/sciteco/sciteco.7.html),
  [__grosciteco.tes__(1)](https://rhaberkorn.github.io/sciteco/grosciteco.tes.1.html),
  [__tedoc.tes__(1)](https://rhaberkorn.github.io/sciteco/tedoc.tes.1.html)
* [Cheat Sheet and Language Overview](https://sciteco.sf.net/manuals/cheat-sheet.pdf).
  This can be printed on an A4 sheet of paper.
* [Wiki at Github](https://github.com/rhaberkorn/sciteco/wiki)
* A [short presentation](https://sciteco.sf.net/manuals/presentation.pdf)
  (in German!) hold at [Netz39](https://www.netz39.de/).

<p align="center"><img alt="SciTECO icon" src="https://github.com/rhaberkorn/sciteco/raw/master/ico/sciteco-48.png"/></p>