telnet daemon working
[nikiroo-utils.git] / README.md
index ee5a26543ff6436057ee4784a26be3ef42ec14b4..9ffed93744fd9fb9127e5991e32e0f397583a809 100644 (file)
--- a/README.md
+++ b/README.md
@@ -11,22 +11,38 @@ wishing to use the actual C++ Turbo Vision library, see [Sergio
 Sigala's updated version](http://tvision.sourceforge.net/) that runs
 on many more platforms.
 
-Two backends are available:
+Three backends are available:
 
 * System.in/out to a command-line ECMA-48 / ANSI X3.64 type terminal
   (tested on Linux + xterm).  I/O is handled through terminal escape
   sequences generated by the library itself: ncurses is not required
-  or linked to.  xterm mouse tracking using UTF8 coordinates is
-  supported.  For the demo application, this is the default backend on
-  non-Windows platforms.
+  or linked to.  xterm mouse tracking using UTF8 and SGR coordinates
+  are supported.  For the demo application, this is the default
+  backend on non-Windows platforms.
+
+* The same command-line ECMA-48 / ANSI X3.64 type terminal as above,
+  but to any general InputStream/OutputStream.  See the file
+  jexer.demos.Demo2 for an example of running the demo over a TCP
+  socket.
 
 * Java Swing UI.  This backend can be selected by setting
   jexer.Swing=true.  The default window size for Swing is 132x40,
   which is set in jexer.session.SwingSession.  For the demo
   application, this is the default backend on Windows platforms.
 
-The demo application showing the existing UI controls is available via
-'java -jar jexer.jar' or 'java -Djexer.Swing=true -jar jexer.jar' .
+The demo application showing the existing UI controls can be seen in
+three ways:
+
+  * 'java -jar jexer.jar' .  This will use System.in/out on
+    non-Windows, or Swing on Windows.
+
+  * 'java -Djexer.Swing=true -jar jexer.jar' .  This will always use
+    Swing.
+
+  * 'java -cp jexer.jar jexer.demos.Demo2 PORT' (where PORT is a
+    number to run the TCP daemon on).  This will use the telnet
+    protocol to establish an 8-bit clean channel and be aware of
+    screen size changes.
 
 Additional backends can be created by subclassing
 jexer.backend.Backend and passing it into the TApplication
@@ -82,7 +98,7 @@ public class MyApplication extends TApplication {
 }
 ```
 
-See the file demos/Demo1.java for detailed examples.
+See the files in jexer.demos for more detailed examples.
 
 
 
@@ -93,9 +109,6 @@ Some arbitrary design decisions had to be made when either the
 obviously expected behavior did not happen or when a specification was
 ambiguous.  This section describes such issues.
 
-  TTerminalWindow
-  ---------------
-
   - TTerminalWindow will hang on input from the remote if the
     TApplication is exited before the TTerminalWindow's process has
     closed on its own.  This is due to a Java limitation/interaction
@@ -110,15 +123,48 @@ ambiguous.  This section describes such issues.
     input (see the ENABLE_LINE_INPUT flag for GetConsoleMode() and
     SetConsoleMode()).
 
-  ECMA48 Backend
-  --------------
-  
-  - Mouse support for BackendType.ECMA48/XTERM currently requires UTF-8 
-    coordinates (1005 mode).  Terminals that support UTF-8 mouse coordinates
-    include xterm, rxvt-unicode, gnome-terminal, and konsole.  Due to Java's
-    InputStreamReader requirement of a valid UTF-8 stream, one must assume
-    the terminal will always generate correct UTF-8 bytes.  Mode 1006 (SGR)
-    will be supported in a future release.
+  - TTerminalWindow launches 'script -fqe /dev/null' on non-Windows
+    platforms.  This is a workaround for the C library behavior of
+    checking for a tty: script launches $SHELL in a pseudo-tty.  This
+    works on Linux but might not on other Posix-y platforms.
+
+  - Java's InputStreamReader as used by the ECMA48 backend requires a
+    valid UTF-8 stream.  The default X10 encoding for mouse
+    coordinates outside (160,94) can corrupt that stream, at best
+    putting garbage keyboard events in the input queue but at worst
+    causing the backend reader thread to throw an Exception and exit
+    and make the entire UI unusable.  Mouse support therefore requires
+    a terminal that can deliver either UTF-8 coordinates (1005 mode)
+    or SGR coordinates (1006 mode).  Most modern terminals can do
+    this.
+
+  - jexer.session.TTYSession calls 'stty size' once every second to
+    check the current window size, performing the same function as
+    ioctl(TIOCGWINSZ) but without requiring a native library.
+
+  - jexer.io.ECMA48Terminal calls 'stty' to perform the equivalent of
+    cfmakeraw() when using System.in/out.  System.out is also
+    (blindly!)  put in 'stty sane cooked' mode when exiting.
+
+
+
+System Properties
+-----------------
+
+The following properties control features of Jexer:
+
+  jexer.Swing
+  -----------
+
+  Used only by jexer.demos.Demo1.  If true, use the Swing interface
+  for the demo application.  Default: true on Windows platforms
+  (os.name starts with "Windows"), false on non-Windows platforms.
+
+  jexer.Swing.cursorStyle
+  -----------------------
+
+  Used by jexer.io.SwingScreen.  Selects the cursor style to draw.
+  Valid values are: underline, block, outline.  Default: underline.
 
 
 
@@ -127,31 +173,13 @@ Roadmap
 
 Many tasks remain before calling this version 1.0:
 
-0.0.2: STABILIZE EXISTING
-
-- TTerminalWindow
-  - Expose shell commands as properties
-- Swing:
-  - Blinking cursor
-  - Block cursor
-- ECMA48Backend running on socket
-- TFileOpen
-- Decide on naming convention: getText, getValue, getLabel: one or all
-  of them?
-- Refactor:
-  - TKeypress:
-    - getCh() --> getChar()
-    - getAlt/getCtrl/getShift --> isAltDown / isCtrlDown / isShiftDown
-  - Other boolean getters --> isSomething
-- Document any properties used
-  - Expose use of 'stty'
-
 0.0.3: FINISH PORTING
 
 - TTreeView
   - Also add keyboard navigation
 - TDirectoryList
   - Also add keyboard navigation
+- TFileOpen
 
 0.0.4: NEW STUFF
 
@@ -164,8 +192,7 @@ Many tasks remain before calling this version 1.0:
 0.0.5: BUG HUNT
 
 - TSubMenu keyboard mnemonic not working
-- ECMA48Terminal
-  - Mode 1006 mouse coordinates
+- Swing performance.  Even with double buffering it isn't great.
 
 0.1.0: BETA RELEASE
 
@@ -195,4 +222,3 @@ Screenshots
 ![Several Windows Open Including A Terminal](/screenshots/screenshot1.png?raw=true "Several Windows Open Including A Terminal")
 
 ![Yo Dawg...](/screenshots/yodawg.png?raw=true "Yo Dawg, I heard you like text windowing systems, so I ran a text windowing system inside your text windowing system so you can have a terminal in your terminal.")
-