blinking cursor and SGR 1006 mode
[nikiroo-utils.git] / README.md
index 24b437a65a4dee26b1392ddda1033bc40860f3d8..1e1bb544bbaa83f05eda45babc25eef10c57b1dc 100644 (file)
--- a/README.md
+++ b/README.md
@@ -16,9 +16,9 @@ Two 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.
 
 * Java Swing UI.  This backend can be selected by setting
   jexer.Swing=true.  The default window size for Swing is 132x40,
@@ -110,15 +110,52 @@ ambiguous.  This section describes such issues.
     input (see the ENABLE_LINE_INPUT flag for GetConsoleMode() and
     SetConsoleMode()).
 
+  - 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.
+
   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.
+
+  - Java's InputStreamReader 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.
+
+  Use of 'stty'
+  -------------
+
+  - 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().  The terminal is (blindly!) put back 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.
 
 
 
@@ -129,15 +166,7 @@ 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
-- Document any properties used
-  - Expose use of 'stty'
 
 0.0.3: FINISH PORTING
 
@@ -145,6 +174,7 @@ Many tasks remain before calling this version 1.0:
   - Also add keyboard navigation
 - TDirectoryList
   - Also add keyboard navigation
+- TFileOpen
 
 0.0.4: NEW STUFF
 
@@ -157,8 +187,6 @@ Many tasks remain before calling this version 1.0:
 0.0.5: BUG HUNT
 
 - TSubMenu keyboard mnemonic not working
-- ECMA48Terminal
-  - Mode 1006 mouse coordinates
 
 0.1.0: BETA RELEASE
 
@@ -188,4 +216,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.")
-