summaryrefslogtreecommitdiff
path: root/docs/further.rst
blob: 4847814f37625a9ed2342ee8ee8b8d2b968a25ea (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
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.