about summary refs log tree commit diff
path: root/README.md
diff options
context:
space:
mode:
authorSören Tempel <soeren+git@soeren-tempel.net>2021-05-16 03:03:57 +0200
committerSören Tempel <soeren+git@soeren-tempel.net>2021-05-16 03:03:57 +0200
commitcdb4103fb134eb43b26a680d0787e0263a13054a (patch)
tree2d1fd73ba5e0075dc04fa0bd822caf4adc5ab856 /README.md
parentd71f702779acbb08b9d96811999043f36e37e580 (diff)
README.md: Expand
Diffstat (limited to 'README.md')
-rw-r--r--README.md72
1 files changed, 69 insertions, 3 deletions
diff --git a/README.md b/README.md
index c4eb59c..4f70a35 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,49 @@
 # saneterm
 
-A sane terminal emulator for the 21th century.
+Line-based terminal emulator without support for ANSI escape sequences.
 
 ## Motivation
 
-To-Do.
+Mainstream terminal emulators (urxvt, xterm, alacritty, …) support a
+standard known as [ANSI escape sequences][wikipedia ansi]. This standard
+defines several special byte sequences to provide special control
+functions for terminals emulators. This includes control of the cursor,
+support for different colors, et cetera. They are often used to
+implement TUIs (e.g. using the [ncurses][ncurses web] library).
+
+Many of these escape sequences operate on rows and columns and therefore
+require terminal emulators to be built around a character grid were
+individual cells can be modified. Historically, this was very useful to
+implement UIs on physical terminals like the VT100. Nowadays this
+approach feels dated and causes a variety of problems. For instance, the
+concept of grapheme cluster as used in [Unicode][unicode web] is largely
+incompatible with fixed-size columns. For this reason, terminal
+emulator supporting the aforementioned escape sequences can never fully
+support Unicode.
+
+On the other hand, a terminal emulator not supporting ANSI escape
+sequences can never support TUIs. However, the idea behind `saneterm` is
+that terminals shouldn't be used to implement TUIs and should instead
+focus on line-based CLIs.
+
+## Status
+
+Silly, buggy, and incomplete prototype implementation.
+
+## Features
+
+By focusing on line-based input in the terminal emulator a variety of
+things can be simplified and improved. `saneterm` is presently just a
+prototype and currently provides only the following features:
+
+* Full Unicode support
+* Support for [readline][readline web]-like line editing
+
+Planned features include:
+
+* Editing history support directly in the terminal emulator
+* Features to replace pagers (search for strings, …)
+* And more (see `TODO.txt`)
 
 ## Installation
 
@@ -20,10 +59,30 @@ If these are installed run the following command to install `saneterm`:
 
 For development setups just run `python3 saneterm/__main__.py`.
 
-## FAQ
+## Usage
 
 To-Do.
 
+## FAQ
+
+**Q:** How do I edit text on remote machines over SSH if my terminal
+emulator doesn't support visual editors?
+
+**A:** This is an interesting problem since a lot of software
+relies on TUIs to be used over PTYs and SSH on remote machines. This is
+mostly also an inherit flaw of Unix as it hasn't been designed with
+networking and GUIs in mind. Plan 9 solves this problem through 9P file
+servers, but unfortunately it has not been widely adapted and we are
+stuck with Unix. In the Unix world potential solutions include
+CLI-based editors (e.g. [ed][wikipedia ed]) or network protocols
+tunneled over SSH connections (e.g.  [Emacs Tramp Mode][emacs tramp mode]).
+
+**Q:** Why is this written in Python and not X?
+
+**A:** This software is presently just a silly prototype, Python is good
+for prototyping. Furthermore, Python has decent, somewhat well-documented
+bindings for Gtk.
+
 ## License
 
 This program is free software: you can redistribute it and/or modify it
@@ -39,7 +98,14 @@ Public License for more details.
 You should have received a copy of the GNU General Public License along
 with this program. If not, see <http://www.gnu.org/licenses/>.
 
+[ncurses web]: https://invisible-island.net/ncurses/
+[wikipedia ansi]: https://en.wikipedia.org/wiki/ANSI_escape_code
+[wikipedia zwj]: https://en.wikipedia.org/wiki/Zero-width_joiner
+[unicode web]: https://www.unicode.org/
+[readline web]: https://tiswww.case.edu/php/chet/readline/rltop.html
 [python web]: https://www.python.org/
 [PyGObject web]: https://pygobject.readthedocs.io/en/latest/
 [gtk web]: https://gtk.org/
 [setuptools web]: https://pygobject.readthedocs.io/en/latest/
+[wikipedia ed]: https://en.wikipedia.org/wiki/Ed_(text_editor)
+[emacs tramp mode]: https://www.emacswiki.org/emacs/TrampMode