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.
 
 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
 
 * 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.
 
 
 * 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
 
 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.
 
 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
   - 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()).
 
     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:
 
 
 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
 0.0.3: FINISH PORTING
 
 - TTreeView
   - Also add keyboard navigation
 - TDirectoryList
   - Also add keyboard navigation
+- TFileOpen
 
 0.0.4: NEW STUFF
 
 
 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
 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
 
 
 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.")
 ![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.")
-