Browse Source

Updates v1.7 docs (#1919)

* updated readmes

* Updated doc visual style & regenerated

* updated relnotes
Tig Kindel 3 years ago
parent
commit
7e2e7b9d2d

+ 18 - 69
README.md

@@ -10,43 +10,20 @@
 
 A toolkit for building rich console apps for .NET, .NET Core, and Mono that works on Windows, the Mac, and Linux/Unix.
 
-![Sample app](https://raw.githubusercontent.com/gui-cs/Terminal.Gui/docfx/sample.gif)
-
-## Controls and Views
-
-*Terminal.Gui* provides a rich set of views and controls for building terminal user interfaces:
-
-* [Button](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Button.html) - A View that provides an item that invokes an System.Action when activated by the user.
-* [CheckBox](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.CheckBox.html) - Shows an on/off toggle that the user can set.
-* [ColorPicker](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ColorPicker.html) - Enables to user to pick a color.
-* [ComboBox](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ComboBox.html) - Provides a drop-down list of items the user can select from.
-* [Dialog](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Dialog.html) - A pop-up Window that contains one or more Buttons.
-  * [OpenDialog](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.OpenDialog.html) - A Dialog providing an interactive pop-up Window for users to select files or directories.
-  * [SaveDialog](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.SaveDialog.html) - A Dialog providing an interactive pop-up Window for users to save files.
-* [FrameView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.FrameView.html) - A container View that draws a frame around its contents. Similar to a GroupBox in Windows.
-* [GraphView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.GraphView.html) - A View for rendering graphs (bar, scatter etc).
-* [Hex viewer/editor](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.HexView.html) - A hex viewer and editor that operates over a file stream. 
-* [Label](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Label.html) - Displays a string at a given position and supports multiple lines.
-* [ListView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ListView.html) - Displays a scrollable list of data where each item can be activated to perform an action.
-* [MenuBar](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.MenuBar.html) - Provides a menu bar with drop-down and cascading menus.
-* [MessageBox](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.MessageBox.html) - Displays a modal (pup-up) message to the user, with a title, a message and a series of options that the user can choose from. 
-* [ProgressBar](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ProgressBar.html) - Displays a progress Bar indicating progress of an activity.
-* [RadioGroup](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.RadioGroup.html) - Displays a group of labels each with a selected indicator. Only one of those can be selected at a given time
-* [ScrollView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ScrollView.html) - Present a window into a virtual space where subviews are added. Similar to the iOS UIScrollView.
-* [ScrollBarView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.ScrollBarView.html) - display a 1-character scrollbar, either horizontal or vertical.
-* [StatusBar](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.StatusBar.html) - A View that snaps to the bottom of a Toplevel displaying set of status items. Includes support for global app keyboard shortcuts.
-* [TableView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TableView.html) - A View for tabular data based on a System.Data.DataTable. 
-* [TimeField](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TimeField.html) & [DateField](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TimeField.html) - Enables structured editing of dates and times.
-* [TextField](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TextField.html) - Provides a single-line text entry.
-* [TextValidateField](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TextValidateField.html) - Text field that validates input through a ITextValidateProvider.
-* [TextView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TextView.html)- A multi-line text editing View supporting word-wrap, auto-complete, context menus, undo/redo, and clipboard operations, 
-* [TopLevel](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Toplevel.html) - The base class for modal/pop-up Windows.
-* [TreeView](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.TreeView.html) - A hierarchical tree view with expandable branches. Branch objects are dynamically determined when expanded using a user defined ITreeBuilder.
-* [View](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.View.html) - The base class for all views on the screen and represents a visible element that can render itself and contains zero or more nested views.
-* [Window](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Window.html) - A Toplevel view that draws a border around its Frame with a title at the top.
-* [Wizard](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.Wizard.html) - Provides navigation and a user interface to collect related data across multiple steps.
-
-### Features
+![Sample app](https://raw.githubusercontent.com/gui-cs/Terminal.Gui/docfx/images/sample.gif)
+
+
+## Documentation 
+
+* [Documentation Home](https://gui-cs.github.io/Terminal.Gui/index.html)
+* [Terminal.Gui Overview](https://gui-cs.github.io/Terminal.Gui/articles/overview.html)
+* [List of Views/Controls](https://gui-cs.github.io/Terminal.Gui/views.html)
+* [Conceptual Documentation](https://gui-cs.github.io/Terminal.Gui/articles/index.html)
+* [API Documentation](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.html)
+
+_The Documentation matches the most recent Nuget release from the `main` branch ([![Version](https://img.shields.io/nuget/v/Terminal.Gui.svg)](https://www.nuget.org/packages/Terminal.Gui))_
+
+## Features
 
 * **Cross Platform** - Windows, Mac, and Linux. Terminal drivers for Curses, [Windows Console](https://github.com/gui-cs/Terminal.Gui/issues/27), and the .NET Console mean apps will work well on both color and monochrome terminals. 
 * **Keyboard and Mouse Input** - Both keyboard and mouse input are supported, including support for drag & drop.
@@ -57,28 +34,6 @@ A toolkit for building rich console apps for .NET, .NET Core, and Mono that work
 descriptors. Most classes are safe for threading.
 * **Reactive Extensions** - Use [reactive extensions](https://github.com/dotnet/reactive) and benefit from increased code readability, and the ability to apply the MVVM pattern and [ReactiveUI](https://www.reactiveui.net/) data bindings. See the [source code](https://github.com/gui-cs/Terminal.Gui/tree/master/ReactiveExample) of a sample app in order to learn how to achieve this.
 
-### Keyboard Input Handling
-
-**Terminal.Gui** respects common Linux, Mac, and Windows keyboard idioms. For example, clipboard operations use the familiar `Control/Command-C, X, V` model. `CTRL-Q` is used for exiting views (and apps).
-
-The input handling of **Terminal.Gui** is similar in some ways to Emacs and the Midnight Commander, so you can expect some of the special key combinations to be active.
-
-The key `ESC` can act as an Alt modifier (or Meta in Emacs parlance), to allow input on terminals that do not have an alt key. So to produce the sequence `Alt-F`, you can press either `Alt-F`, or `ESC` followed by the key `F`.
-
-To enter the key `ESC`, you can either press `ESC` and wait 100 milliseconds, or you can press `ESC` twice.
-
-`ESC-0`, and `ESC-1` through `ESC-9` have a special meaning, they map to `F10`, and `F1` to `F9` respectively.
-
-Apps can change key bindings using the `AddKeyBinding` API. 
-
-### Driver Model
-
-**Terminal.Gui** has support for [ncurses](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs), [`System.Console`](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/NetDriver.cs), and a full [Win32 Console](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs) front-end.
-
-`ncurses` is used on Mac/Linux/Unix with color support based on what your library is compiled with; the Windows driver supports full color and mouse, and an easy-to-debug `System.Console` can be used on Windows and Unix, but lacks mouse support.
-
-You can force the use of `System.Console` on Unix as well; see `Core.cs`.
-
 ## Showcase & Examples
 
 * **[UI Catalog](https://github.com/gui-cs/Terminal.Gui/tree/master/UICatalog)** - The UI Catalog project provides an easy to use and extend sample illustrating the capabilities of **Terminal.Gui**. Run `dotnet run --project UICatalog` to run the UI Catalog.
@@ -90,15 +45,9 @@ You can force the use of `System.Console` on Unix as well; see `Core.cs`.
 * **[PoshRedisViewer](https://github.com/En3Tho/PoshRedisViewer)** - A compact Redis viewer module for PowerShell written in F# and Gui.cs
 * **[TerminalGuiDesigner](https://github.com/tznind/TerminalGuiDesigner)** - Cross platform view designer for building Terminal.Gui applications.
 
-## Documentation
-
-* [Overview](https://gui-cs.github.io/Terminal.Gui/articles/overview.html)
-* [Conceptual Documentation](https://gui-cs.github.io/Terminal.Gui/articles/index.html)
-* [API Documentation](https://gui-cs.github.io/Terminal.Gui/api/Terminal.Gui/Terminal.Gui.html)
-
 See the [`Terminal.Gui/` README](https://github.com/gui-cs/Terminal.Gui/tree/master/Terminal.Gui) for an overview of how the library is structured. The [Conceptual Documentation](https://gui-cs.github.io/Terminal.Gui/articles/index.html) provides insight into core concepts.
 
-### Sample Usage
+## Sample Usage
 (This code uses C# 9.0 [Top-level statements](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9#top-level-statements).) 
 ```csharp
 using Terminal.Gui;
@@ -206,6 +155,8 @@ To install Terminal.Gui into a .NET Core project, use the `dotnet` CLI tool with
 dotnet add package Terminal.Gui
 ```
 
+See [CONTRIBUTING.md](CONTRIBUTING.md) for instructions for downloading and forking the source.
+
 ## Running and Building
 
 * Windows, Mac, and Linux - Build and run using the .NET SDK command line tools (`dotnet build` in the root directory). Run `UICatalog` with `dotnet run --project UICatalog`.
@@ -225,6 +176,4 @@ The original **gui.cs** was a UI toolkit in a single file and tied to curses. Th
 
 A presentation of this was part of the [Retro.NET](https://channel9.msdn.com/Events/dotnetConf/2018/S313) talk at .NET Conf 2018 [Slides](https://tirania.org/Retro.pdf)
 
-Release history can be found in the [Terminal.Gui.csproj](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/Terminal.Gui.csproj) file.
-
-In 2019, 2020, and 2021, Charlie Kindel (https://github.com/tig), @BDisp (https://github.com/BDisp), and Thomas Nind (https://github.com/tznind) vastly extended, improved, polished and fixed gui.cs to what it is today.
+The most recent release notes can be found in the [Terminal.Gui.csproj](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/Terminal.Gui.csproj) file.

+ 1 - 0
Terminal.Gui/Terminal.Gui.csproj

@@ -83,6 +83,7 @@
       * Moved Terminal.Gui (and NStack) to the github.com/gui-cs organization.
       * Adds multi-step Wizard View for setup experiences (#124)
       * The synchronization context method Send is now blocking (#1854).
+      * Fixes #1917. Sometimes Clipboard.IsSupported doesn't return the correct
       * Fixes #1893: Fix URLs to match gui-cs Org
       * Fixes #1883. Child TopLevels now get Loaded/Ready events.
       * Fixes #1867, #1866, #1796. TextView enhancements for ReadOnly and WordWrap.

+ 8 - 0
docfx/articles/drivers.md

@@ -0,0 +1,8 @@
+
+# Cross-Platform Driver Model
+
+**Terminal.Gui** has support for [ncurses](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs), [`System.Console`](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/NetDriver.cs), and a full [Win32 Console](https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs) front-end.
+
+`ncurses` is used on Mac/Linux/Unix with color support based on what your library is compiled with; the Windows driver supports full color and mouse, and an easy-to-debug `System.Console` can be used on Windows and Unix, but lacks mouse support.
+
+You can force the use of `System.Console` on Unix as well; see `Core.cs`.

+ 1 - 0
docfx/articles/index.md

@@ -4,5 +4,6 @@
 * [List of Views](views.md)
 * [Keyboard Event Processing](keyboard.md)
 * [Event Processing and the Application Main Loop](mainloop.md)
+* [Cross-platform Driver Model](drivers.md)
 * [TableView Deep Dive](tableview.md)
 * [TreeView Deep Dive](treeview.md)

+ 12 - 0
docfx/articles/keyboard.md

@@ -1,6 +1,18 @@
 Keyboard Event Processing
 =========================
 
+**Terminal.Gui** respects common Linux, Mac, and Windows keyboard idioms. For example, clipboard operations use the familiar `Control/Command-C, X, V` model. `CTRL-Q` is used for exiting views (and apps).
+
+The input handling of **Terminal.Gui** is similar in some ways to Emacs and the Midnight Commander, so you can expect some of the special key combinations to be active.
+
+The key `ESC` can act as an Alt modifier (or Meta in Emacs parlance), to allow input on terminals that do not have an alt key. So to produce the sequence `Alt-F`, you can press either `Alt-F`, or `ESC` followed by the key `F`.
+
+To enter the key `ESC`, you can either press `ESC` and wait 100 milliseconds, or you can press `ESC` twice.
+
+`ESC-0`, and `ESC-1` through `ESC-9` have a special meaning, they map to `F10`, and `F1` to `F9` respectively.
+
+Apps can change key bindings using the `AddKeyBinding` API. 
+
 Keyboard events are sent by the [Main Loop](mainloop.md) to the
 Application class for processing. The keyboard events are sent
 exclusively to the current `Toplevel`, this being either the default

+ 3 - 3
docfx/articles/mainloop.md

@@ -1,5 +1,6 @@
-Event Processing and the Application Main Loop
-==============================================
+# Event Processing and the Application Main Loop
+
+_See also [Cross-platform Driver Model](drivers.md)_
 
 The method `Application.Run` that we covered before will wait for
 events from either the keyboard or mouse and route those events to the
@@ -41,7 +42,6 @@ The keyboard inputs is dispatched by the application class to the
 current TopLevel window this is covered in more detail in the
 [Keyboard Event Processing](keyboard.md) document.
 
-
 Async Execution
 ---------------
 

+ 14 - 18
docfx/articles/overview.md

@@ -102,8 +102,7 @@ class Demo {
 }
 ```
 
-Views
-=====
+## Views
 
 All visible elements on a Terminal.Gui application are implemented as
 [Views](~/api/Terminal.Gui/Terminal.Gui.View.yml). Views are self-contained objects that take care of displaying themselves, can receive keyboard and mouse input and participate in the focus mechanism.
@@ -138,8 +137,7 @@ void SetupMyView (View myView)
 The container of a given view is called the `SuperView` and it is a property of every
 View.
 
-Layout
-------
+## Layout
 
 `Terminal.Gui` supports two different layout systems, absolute and computed \
 (controlled by the [`LayoutStyle`](~/api/Terminal.Gui/Terminal.Gui.LayoutStyle.yml)
@@ -220,7 +218,7 @@ view.Height = Dim.Percent(20) - 1;
 anotherView.Height = Dim.Height (view)+1
 ```
 
-# TopLevels, Windows and Dialogs.
+## TopLevels, Windows and Dialogs.
 
 Among the many kinds of views, you typically will create a [Toplevel](~/api/Terminal.Gui/Terminal.Gui.Toplevel.yml) view (or any of its subclasses,
 like [Window](~/api/Terminal.Gui/Terminal.Gui.Window.yml) or [Dialog](~/api/Terminal.Gui/Terminal.Gui.Dialog.yml) which is special kind of views
@@ -229,7 +227,7 @@ only when the user chooses to complete their work there.
 
 The following sections cover the differences.
 
-## TopLevel Views
+### TopLevel Views
 
 [Toplevel](~/api/Terminal.Gui/Terminal.Gui.Toplevel.yml) views have no visible user interface elements and occupy an arbitrary portion of the screen.
 
@@ -281,15 +279,13 @@ class Demo {
 }
 ```
 
-Window Views
-------------
+### Window Views
 
 [Window](~/api/Terminal.Gui/Terminal.Gui.Window.yml) views extend the Toplevel view by providing a frame and a title around the toplevel - and can be moved on the screen with the mouse (caveat: code is currently disabled)
 
 From a user interface perspective, you might have more than one Window on the screen at a given time.
 
-Dialogs
--------
+### Dialogs
 
 [Dialog](~/api/Terminal.Gui/Terminal.Gui.Dialog.yml) are [Window](~/api/Terminal.Gui/Terminal.Gui.Window.yml) objects that happen to be centered in the middle of the screen.
 
@@ -318,8 +314,7 @@ Which will show something like this:
 +------------------------------------------------------+
 ```
 
-Running Modally
----------------
+### Running Modally
 
 To run your Dialog, Window or Toplevel modally, you will invoke the `Application.Run`
 method on the toplevel. It is up to your code and event handlers to invoke the `Application.RequestStop()` method to terminate the modal execution.
@@ -350,8 +345,7 @@ There is no return value from running modally, so your code will need to have a
 of indicating the reason that the execution of the modal dialog was completed, in the 
 case above, the `okpressed` value is set to true if the user pressed or selected the Ok button.
 
-Input Handling
-==============
+## Input Handling
 
 Every view has a focused view, and if that view has nested views, one of those is 
 the focused view. This is called the focus chain, and at any given time, only one
@@ -385,8 +379,7 @@ to background views when a modal view is running.
 
 More details are available on the [`Keyboard Event Processing`](keyboard.md) document.
 
-Colors and Color Schemes
-========================
+## Colors and Color Schemes
 
 All views have been configured with a color scheme that will work both in color
 terminals as well as the more limited black and white terminals. 
@@ -423,7 +416,10 @@ var label = new Label (...);
 label.TextColor = myColor
 ```
 
-MainLoop, Threads and Input Handling
-====================================
+## MainLoop, Threads and Input Handling
 
 Detailed description of the mainloop is described on the [Event Processing and the Application Main Loop](~/articles/mainloop.md) document.
+
+## Cross-Platform Drivers
+
+See [Cross-platform Driver Model](drivers.md).

+ 1 - 0
docfx/index.md

@@ -13,6 +13,7 @@ A toolkit for building rich console apps for .NET, .NET Core, and Mono that work
 * [Terminal.Gui API Overview](~/articles/overview.md)
 * [Keyboard Event Processing](~/articles/keyboard.md)
 * [Event Processing and the Application Main Loop](~/articles/mainloop.md)
+* [Cross-platform Driver Model](~/articles/drivers.md)
 * [TableView Deep Dive](~/articles/tableview.md)
 * [TreeView Deep Dive](~/articles/treeview.md)
 

+ 1 - 1
docfx/templates/default/styles/main.css

@@ -29,7 +29,7 @@ code,kbd,pre,samp{
 
 button,
 a {
-  color: var(--highlight-dark);
+  color: var(--highlight-light);
   cursor: pointer;
 }
 

+ 0 - 1
docs/api/Terminal.Gui/Terminal.Gui.Application.html

@@ -989,7 +989,6 @@ Runs the application by calling <a class="xref" href="Terminal.Gui.Application.h
   <h5 class="decalaration">Declaration</h5>
   <div class="codewrapper">
     <pre><code class="lang-csharp hljs">public static void Run&lt;T&gt;(Func&lt;Exception, bool&gt; errorHandler = null)
-
     where T : Toplevel, new()</code></pre>
   </div>
   <h5 class="parameters">Parameters</h5>

+ 118 - 0
docs/articles/drivers.html

@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<!--[if IE]><![endif]-->
+<html>
+  
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <title>Cross-Platform Driver Model </title>
+    <meta name="viewport" content="width=device-width">
+    <meta name="title" content="Cross-Platform Driver Model ">
+    <meta name="generator" content="docfx 2.59.3.0">
+    
+    <link rel="shortcut icon" href="../favicon.ico">
+    <link rel="stylesheet" href="../styles/docfx.vendor.css">
+    <link rel="stylesheet" href="../styles/docfx.css">
+    <link rel="stylesheet" href="../styles/main.css">
+    <link href="https://fonts.googleapis.com/css?family=Source Sans Pro" rel="stylesheet"> 
+    <link href="https://fonts.googleapis.com/css?family=Source Code Pro" rel="stylesheet"> 
+    <meta property="docfx:navrel" content="../toc.html">
+    <meta property="docfx:tocrel" content="../toc.html">
+    
+    <meta property="docfx:rel" content="../">
+    
+  </head>  <body data-spy="scroll" data-target="#affix" data-offset="120">
+    <div id="wrapper">
+      <header>
+        
+        <nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
+          <div class="container">
+            <div class="navbar-header">
+              <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+              </button>
+              
+              <a class="navbar-brand" href="../index.html">
+                <img id="logo" class="svg" src="../images/logo48.png" alt="">
+              </a>
+            </div>
+            <div class="collapse navbar-collapse" id="navbar">
+              <form class="navbar-form navbar-right" role="search" id="search">
+                <div class="form-group">
+                  <input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
+                </div>
+              </form>
+            </div>
+          </div>
+        </nav>
+        
+        <div class="subnav navbar navbar-default">
+          <div class="container hide-when-search" id="breadcrumb">
+            <ul class="breadcrumb">
+              <li></li>
+            </ul>
+          </div>
+        </div>
+      </header>
+      <div class="container body-content">
+        
+        <div id="search-results">
+          <div class="search-list">Search Results for <span></span></div>
+          <div class="sr-items">
+            <p><i class="glyphicon glyphicon-refresh index-loading"></i></p>
+          </div>
+          <ul id="pagination" data-first="First" data-prev="Previous" data-next="Next" data-last="Last"></ul>
+        </div>
+      </div>
+      <div role="main" class="container body-content hide-when-search">
+        <div class="article row grid">
+          <div class="col-md-10">
+            <article class="content wrap" id="_content" data-uid="">
+<h1 id="cross-platform-driver-model">Cross-Platform Driver Model</h1>
+
+<p><strong>Terminal.Gui</strong> has support for <a href="https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/CursesDriver/CursesDriver.cs">ncurses</a>, <a href="https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/NetDriver.cs"><code>System.Console</code></a>, and a full <a href="https://github.com/gui-cs/Terminal.Gui/blob/master/Terminal.Gui/ConsoleDrivers/WindowsDriver.cs">Win32 Console</a> front-end.</p>
+<p><code>ncurses</code> is used on Mac/Linux/Unix with color support based on what your library is compiled with; the Windows driver supports full color and mouse, and an easy-to-debug <code>System.Console</code> can be used on Windows and Unix, but lacks mouse support.</p>
+<p>You can force the use of <code>System.Console</code> on Unix as well; see <code>Core.cs</code>.</p>
+</article>
+          </div>
+          
+          <div class="hidden-sm col-md-2" role="complementary">
+            <div class="sideaffix">
+              <div class="contribution">
+                <ul class="nav">
+                  <li>
+                    <a href="https://github.com/gui-cs/Terminal.Gui/blob/develop/docfx/articles/drivers.md/#L1" class="contribution-link">Improve this Doc</a>
+                  </li>
+                </ul>
+              </div>
+              <nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
+                <h5>In This Article</h5>
+                <div></div>
+              </nav>
+            </div>
+          </div>
+        </div>
+      </div>
+      
+      <footer>
+        <div class="grad-bottom"></div>
+        <div class="footer">
+          <div class="container">
+            <span class="pull-right">
+              <a href="#top">Back to top</a>
+            </span>
+            
+            <span>Generated by <strong>DocFX</strong></span>
+          </div>
+        </div>
+      </footer>
+    </div>
+    
+    <script type="text/javascript" src="../styles/docfx.vendor.js"></script>
+    <script type="text/javascript" src="../styles/docfx.js"></script>
+    <script type="text/javascript" src="../styles/main.js"></script>
+  </body>
+</html>

+ 1 - 0
docs/articles/index.html

@@ -78,6 +78,7 @@
 <li><a href="views.html">List of Views</a></li>
 <li><a href="keyboard.html">Keyboard Event Processing</a></li>
 <li><a href="mainloop.html">Event Processing and the Application Main Loop</a></li>
+<li><a href="drivers.html">Cross-platform Driver Model</a></li>
 <li><a href="tableview.html">TableView Deep Dive</a></li>
 <li><a href="treeview.html">TreeView Deep Dive</a></li>
 </ul>

+ 6 - 0
docs/articles/keyboard.html

@@ -73,6 +73,12 @@
             <article class="content wrap" id="_content" data-uid="">
 <h1 id="keyboard-event-processing">Keyboard Event Processing</h1>
 
+<p><strong>Terminal.Gui</strong> respects common Linux, Mac, and Windows keyboard idioms. For example, clipboard operations use the familiar <code>Control/Command-C, X, V</code> model. <code>CTRL-Q</code> is used for exiting views (and apps).</p>
+<p>The input handling of <strong>Terminal.Gui</strong> is similar in some ways to Emacs and the Midnight Commander, so you can expect some of the special key combinations to be active.</p>
+<p>The key <code>ESC</code> can act as an Alt modifier (or Meta in Emacs parlance), to allow input on terminals that do not have an alt key. So to produce the sequence <code>Alt-F</code>, you can press either <code>Alt-F</code>, or <code>ESC</code> followed by the key <code>F</code>.</p>
+<p>To enter the key <code>ESC</code>, you can either press <code>ESC</code> and wait 100 milliseconds, or you can press <code>ESC</code> twice.</p>
+<p><code>ESC-0</code>, and <code>ESC-1</code> through <code>ESC-9</code> have a special meaning, they map to <code>F10</code>, and <code>F1</code> to <code>F9</code> respectively.</p>
+<p>Apps can change key bindings using the <code>AddKeyBinding</code> API. </p>
 <p>Keyboard events are sent by the <a href="mainloop.html">Main Loop</a> to the
 Application class for processing. The keyboard events are sent
 exclusively to the current <code>Toplevel</code>, this being either the default

+ 1 - 0
docs/articles/mainloop.html

@@ -73,6 +73,7 @@
             <article class="content wrap" id="_content" data-uid="">
 <h1 id="event-processing-and-the-application-main-loop">Event Processing and the Application Main Loop</h1>
 
+<p><em>See also <a href="drivers.html">Cross-platform Driver Model</a></em></p>
 <p>The method <code>Application.Run</code> that we covered before will wait for
 events from either the keyboard or mouse and route those events to the
 proper view.</p>

+ 11 - 9
docs/articles/overview.html

@@ -157,7 +157,7 @@ class Demo {
         Application.Shutdown ();
     }
 }
-</code></pre><h1 id="views">Views</h1>
+</code></pre><h2 id="views">Views</h2>
 <p>All visible elements on a Terminal.Gui application are implemented as
 <a href="../api/Terminal.Gui/Terminal.Gui.View.html">Views</a>. Views are self-contained objects that take care of displaying themselves, can receive keyboard and mouse input and participate in the focus mechanism.</p>
 <p>See the full list of <a href="views.html">Views provided by the Terminal.Gui library here</a>.</p>
@@ -246,13 +246,13 @@ view.Width = Dim.Fill () - 10;
 view.Height = Dim.Percent(20) - 1;
 
 anotherView.Height = Dim.Height (view)+1
-</code></pre><h1 id="toplevels-windows-and-dialogs">TopLevels, Windows and Dialogs.</h1>
+</code></pre><h2 id="toplevels-windows-and-dialogs">TopLevels, Windows and Dialogs.</h2>
 <p>Among the many kinds of views, you typically will create a <a href="../api/Terminal.Gui/Terminal.Gui.Toplevel.html">Toplevel</a> view (or any of its subclasses,
 like <a href="../api/Terminal.Gui/Terminal.Gui.Window.html">Window</a> or <a href="../api/Terminal.Gui/Terminal.Gui.Dialog.html">Dialog</a> which is special kind of views
 that can be executed modally - that is, the view can take over all input and returns
 only when the user chooses to complete their work there. </p>
 <p>The following sections cover the differences.</p>
-<h2 id="toplevel-views">TopLevel Views</h2>
+<h3 id="toplevel-views">TopLevel Views</h3>
 <p><a href="../api/Terminal.Gui/Terminal.Gui.Toplevel.html">Toplevel</a> views have no visible user interface elements and occupy an arbitrary portion of the screen.</p>
 <p>You would use a toplevel Modal view for example to launch an entire new experience in your application, one where you would have a new top-level menu for example. You 
 typically would add a Menu and a Window to your Toplevel, it would look like this:</p>
@@ -298,10 +298,10 @@ class Demo {
         Application.Shutdown ();
     }
 }
-</code></pre><h2 id="window-views">Window Views</h2>
+</code></pre><h3 id="window-views">Window Views</h3>
 <p><a href="../api/Terminal.Gui/Terminal.Gui.Window.html">Window</a> views extend the Toplevel view by providing a frame and a title around the toplevel - and can be moved on the screen with the mouse (caveat: code is currently disabled)</p>
 <p>From a user interface perspective, you might have more than one Window on the screen at a given time.</p>
-<h2 id="dialogs">Dialogs</h2>
+<h3 id="dialogs">Dialogs</h3>
 <p><a href="../api/Terminal.Gui/Terminal.Gui.Dialog.html">Dialog</a> are <a href="../api/Terminal.Gui/Terminal.Gui.Window.html">Window</a> objects that happen to be centered in the middle of the screen.</p>
 <p>Dialogs are instances of a Window that are centered in the screen, and are intended
 to be used modally - that is, they run, and they are expected to return a result 
@@ -320,7 +320,7 @@ var dialog = new Dialog (&quot;Quit&quot;, 60, 7, ok, cancel);
 |                                                      |
 |                  [ Ok ] [ Cancel ]                   |
 +------------------------------------------------------+
-</code></pre><h2 id="running-modally">Running Modally</h2>
+</code></pre><h3 id="running-modally">Running Modally</h3>
 <p>To run your Dialog, Window or Toplevel modally, you will invoke the <code>Application.Run</code>
 method on the toplevel. It is up to your code and event handlers to invoke the <code>Application.RequestStop()</code> method to terminate the modal execution.</p>
 <pre><code class="lang-csharp">bool okpressed = false;
@@ -345,7 +345,7 @@ if (okpressed)
 </code></pre><p>There is no return value from running modally, so your code will need to have a mechanism
 of indicating the reason that the execution of the modal dialog was completed, in the 
 case above, the <code>okpressed</code> value is set to true if the user pressed or selected the Ok button.</p>
-<h1 id="input-handling">Input Handling</h1>
+<h2 id="input-handling">Input Handling</h2>
 <p>Every view has a focused view, and if that view has nested views, one of those is 
 the focused view. This is called the focus chain, and at any given time, only one
 View has the focus. </p>
@@ -374,7 +374,7 @@ currently focused view.</p>
 view on the screen. The only exception is that no mouse events are delivered
 to background views when a modal view is running. </p>
 <p>More details are available on the <a href="keyboard.html"><code>Keyboard Event Processing</code></a> document.</p>
-<h1 id="colors-and-color-schemes">Colors and Color Schemes</h1>
+<h2 id="colors-and-color-schemes">Colors and Color Schemes</h2>
 <p>All views have been configured with a color scheme that will work both in color
 terminals as well as the more limited black and white terminals. </p>
 <p>The various styles are captured in the <a href="../api/Terminal.Gui/Terminal.Gui.Colors.html"><code>Colors</code></a> class which defined color schemes for
@@ -399,8 +399,10 @@ attribute for a particular pair of Foreground/Background like this:</p>
 <pre><code>var myColor = Application.Driver.MakeAttribute (Color.Blue, Color.Red);
 var label = new Label (...);
 label.TextColor = myColor
-</code></pre><h1 id="mainloop-threads-and-input-handling">MainLoop, Threads and Input Handling</h1>
+</code></pre><h2 id="mainloop-threads-and-input-handling">MainLoop, Threads and Input Handling</h2>
 <p>Detailed description of the mainloop is described on the <a href="mainloop.html">Event Processing and the Application Main Loop</a> document.</p>
+<h2 id="cross-platform-drivers">Cross-Platform Drivers</h2>
+<p>See <a href="drivers.html">Cross-platform Driver Model</a>.</p>
 </article>
           </div>
           

+ 1 - 0
docs/index.html

@@ -85,6 +85,7 @@
 <li><a href="articles/overview.html">Terminal.Gui API Overview</a></li>
 <li><a href="articles/keyboard.html">Keyboard Event Processing</a></li>
 <li><a href="articles/mainloop.html">Event Processing and the Application Main Loop</a></li>
+<li><a href="articles/drivers.html">Cross-platform Driver Model</a></li>
 <li><a href="articles/tableview.html">TableView Deep Dive</a></li>
 <li><a href="articles/treeview.html">TreeView Deep Dive</a></li>
 </ul>

File diff suppressed because it is too large
+ 6 - 1
docs/index.json


+ 21 - 9
docs/manifest.json

@@ -54,7 +54,7 @@
       "output": {
         ".html": {
           "relative_path": "api/Terminal.Gui/Terminal.Gui.Application.html",
-          "hash": "dB8sk1W33oVLW3Y2+K7n4gQOe8vvp5yihmVbx/As47s="
+          "hash": "p1SyGXNjGzQAuhjn2DhRYJh7DziWDgZjZFvLKCfyONI="
         }
       },
       "is_incremental": false,
@@ -3084,13 +3084,25 @@
       "is_incremental": false,
       "version": ""
     },
+    {
+      "type": "Conceptual",
+      "source_relative_path": "articles/drivers.md",
+      "output": {
+        ".html": {
+          "relative_path": "articles/drivers.html",
+          "hash": "hqbYDRUiKz6fe2AMnkuPAPG4Fgc5tXHgFpGf8dS4hS4="
+        }
+      },
+      "is_incremental": false,
+      "version": ""
+    },
     {
       "type": "Conceptual",
       "source_relative_path": "articles/index.md",
       "output": {
         ".html": {
           "relative_path": "articles/index.html",
-          "hash": "Alze7es8/SUCDYguOtrxYJRHqT4yZTexKObUT0Fku4I="
+          "hash": "Gkp6XTz7lXblHMU6dupfr23WM45ZojbxfCVNqYB4onA="
         }
       },
       "is_incremental": false,
@@ -3102,7 +3114,7 @@
       "output": {
         ".html": {
           "relative_path": "articles/keyboard.html",
-          "hash": "cTqzspwxMVc9lBs9B0nXNGEZQzWoAWMw5DTDrcAF0DU="
+          "hash": "oltPA2GzpORSe99P0GD6cgV3BSFlxJdSADSQC+GxFsc="
         }
       },
       "is_incremental": false,
@@ -3114,7 +3126,7 @@
       "output": {
         ".html": {
           "relative_path": "articles/mainloop.html",
-          "hash": "02RPG4/IAXYv3XE0Caa1OzOR35kDSmfYqn3h1SuId2c="
+          "hash": "4izWB7lBl+y9C4J4re7tItVL7KCxG4QXavUW8tkFz5U="
         }
       },
       "is_incremental": false,
@@ -3126,7 +3138,7 @@
       "output": {
         ".html": {
           "relative_path": "articles/overview.html",
-          "hash": "iSNqKWz5HPqVAGi7+Osq1iP9GF/IV8d8VMeAH1BLkYQ="
+          "hash": "t9sPzQPRgkY6YbBFareW+Ct0E6FvX6l44DPLHEtOveY="
         }
       },
       "is_incremental": false,
@@ -3229,7 +3241,7 @@
       "output": {
         ".html": {
           "relative_path": "index.html",
-          "hash": "+HOCH6J+OsNs8MmBBXWXXIeZt4JrROuNopRDioeOZGA="
+          "hash": "2sQ2nqhnnNfYn1WPAJ5zMIStWFoTOWmzPttGd8TnJxM="
         }
       },
       "is_incremental": false,
@@ -3252,17 +3264,17 @@
     {
       "status": {
         "can_incremental": false,
-        "details": "Cannot build incrementally because config changed.",
+        "details": "Disable incremental build by force rebuild option.",
         "incrementalPhase": "build",
         "total_file_count": 0,
         "skipped_file_count": 0,
-        "full_build_reason_code": "ConfigChanged"
+        "full_build_reason_code": "ForceRebuild"
       },
       "processors": {
         "ConceptualDocumentProcessor": {
           "can_incremental": false,
           "incrementalPhase": "build",
-          "total_file_count": 9,
+          "total_file_count": 10,
           "skipped_file_count": 0
         },
         "ManagedReferenceDocumentProcessor": {

+ 1 - 1
docs/styles/main.css

@@ -29,7 +29,7 @@ code,kbd,pre,samp{
 
 button,
 a {
-  color: var(--highlight-dark);
+  color: var(--highlight-light);
   cursor: pointer;
 }
 

Some files were not shown because too many files changed in this diff