summaryrefslogtreecommitdiff
path: root/docs/further.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/further.rst')
-rw-r--r--docs/further.rst106
1 files changed, 106 insertions, 0 deletions
diff --git a/docs/further.rst b/docs/further.rst
new file mode 100644
index 0000000..4847814
--- /dev/null
+++ b/docs/further.rst
@@ -0,0 +1,106 @@
+Further Reading
+===============
+
+As a developer's API, blessings is often bundled with frameworks and toolsets
+that dive deeper into Terminal I/O programming than :class:`~.Terminal` offers.
+Here are some recommended readings to help you along:
+
+- `terminfo(5)
+ <http://www.openbsd.org/cgi-bin/man.cgi?query=terminfo&apropos=0&sektion=5>`_
+ manpage of your preferred posix-like operating system. The capabilities
+ available as attributes of :class:`~.Terminal` are directly mapped to those
+ listed in the column **Cap-name**.
+
+- `termios(4)
+ <http://www.openbsd.org/cgi-bin/man.cgi?query=termios&apropos=0&sektion=4>`_
+ of your preferred posix-like operating system.
+
+- `The TTY demystified
+ <http://www.linusakesson.net/programming/tty/index.php>`_ by
+ Linus Ã…kesson.
+
+- `A Brief Introduction to Termios
+ <https://blog.nelhage.com/2009/12/a-brief-introduction-to-termios/>`_ by
+ Nelson Elhage.
+
+- Richard Steven's `Advance Unix Programming
+ <http://www.amazon.com/exec/obidos/ISBN=0201563177/wrichardstevensA/>`_
+ ("AUP") provides two very good chapters, "Terminal I/O" and
+ "Pseudo Terminals".
+
+- GNU's `The Termcap Manual
+ <https://www.gnu.org/software/termutils/manual/termcap-1.3/html_mono/termcap.html>`_
+ by Richard M. Stallman.
+
+- `Chapter 4 <http://compsci.hunter.cuny.edu/~sweiss/course_materials/unix_lecture_notes/chapter_04.pdf>`_
+ of CUNY's course material for *Introduction to System Programming*, by
+ `Stewart Weiss <http://compsci.hunter.cuny.edu/~sweiss/>`_
+
+- `Chapter 11
+ <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap11.html>`_
+ of the IEEE Open Group Base Specifications Issue 7, "General Terminal
+ Interface"
+
+- The GNU C Library documentation, section `Low-Level Terminal Interface
+ <http://www.gnu.org/software/libc/manual/html_mono/libc.html#toc-Low_002dLevel-Terminal-Interface-1>`_
+
+- The source code of many popular terminal emulators. If there is ever any
+ question of "the meaning of a terminal capability", or whether or not your
+ preferred terminal emulator actually handles them, read the source!
+
+ These are often written in the C language, and directly map the
+ "Control Sequence Inducers" (CSI, literally ``\x1b[`` for most modern
+ terminal types) emitted by most terminal capabilities to an action in a
+ series of ``case`` switch statements.
+
+ - Many modern libraries are now based `https://github.com/GNOME/vte
+ <libvte>`_ (or just 'vte'): Gnome Terminal, sakura, Terminator, Lilyterm,
+ ROXTerm, evilvte, Termit, Termite, Tilda, tinyterm, lxterminal.
+ - `Thomas E. Dickey <http://invisible-island.net/>` has been maintaining
+ `xterm <http://invisible-island.net/xterm/xterm.html>`_, as well as a
+ primary maintainer of many related packages such as `ncurses
+ <http://invisible-island.net/ncurses/ncurses.html>`_ for quite a long
+ while. There is often speculation and misinformation among developers of
+ terminal emulators and programs that interact with them. Thomas Dickey's
+ analysis is always thorough and complete.
+ - xterm, urxvt, SyncTerm, and EtherTerm.
+ - There are far too many to name, Chose one you like! Thomas Dickey
+
+
+- The source code of the tty(4), pty(4), and the given "console driver" for
+ any posix-like operating system. If you search thoroughly enough, you will
+ eventually discover a terminal sequence decoder, usually a ``case`` switch
+ that translates ``\x1b[0m`` into a "reset color" action towards the video
+ driver. Though ``tty.c`` is linked here (the only kernel file common among
+ them), it is probably not the most interesting, but it can get you started:
+
+ - `FreeBSD <https://github.com/freebsd/freebsd/blob/master/sys/kern/tty.c>`_
+ - `OpenBSD <http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/tty.c?content-type=text/plain>`_
+ - `Illumos (Solaris) <https://github.com/illumos/illumos-gate/blob/master/usr/src/uts/common/io/tty_common.c>`
+ - `Minix <https://github.com/minix3/minix/blob/master/minix/drivers/tty/tty/tty.c>`_
+ - `Linux <https://github.com/torvalds/linux/blob/master/drivers/tty/n_tty.c>`_
+
+ The TTY driver is a great introduction to Kernel and Systems programming,
+ because familiar components may be discovered and experimented with. It is
+ available on all operating systems (except windows), and because of its
+ critical nature, examples of efficient file I/O, character buffers (often
+ implemented as "ring buffers") and even fine-grained kernel locking can be
+ found.
+
+- `termcap & terminfo (O'Reilly Nutshell)
+ <http://www.amazon.com/termcap-terminfo-OReilly-Nutshell-Linda/dp/0937175226>`_
+ by Linda Mui, Tim O'Reilly, and John Strang.
+
+- Note that System-V systems, also known as `Unix98
+ <http://en.wikipedia.org/wiki/Single_UNIX_Specification>`_ (SunOS, HP-UX,
+ AIX and others) use a `Streams <http://en.wikipedia.org/wiki/STREAMS>`_
+ interface. On these systems, the `ioctl(2)
+ <http://pubs.opengroup.org/onlinepubs/009695399/functions/ioctl.html>`_
+ interface provides the ``PUSH`` and ``POP`` parameters to communicate with
+ a Streams device driver, which differs significantly from Linux and BSD.
+
+ Many of these systems provide compatible interfaces for Linux, but they may
+ not always be as complete as the counterpart they emulate, most especially
+ in regards to managing pseudo-terminals.
+
+