Add MANUAL generation

This is pretty hacky, but does produce very pretty results.
This commit is contained in:
CrystalSplitter 2024-01-14 23:06:34 -08:00 committed by Jordan R AW
parent 4e533fe4bb
commit 09401ec6a1
8 changed files with 174 additions and 140 deletions

View File

@ -8,13 +8,21 @@ CLI Synopsis
.. code-block::
Usage: ghcitui [OPTIONS] [TARGET]
Usage: ghcitui [--version] [--debug-console] [-v] [--daemon-log LOGFILE]
[-c|--cmd CMD] [-C|--workdir DIR] [TARGET]
ghcitui: A TUI interface for GHCi
Available options:
-h,--help Show this help text
-d,--debug-console Display the debug console
--version Print the version number and exit
--debug-console Display the debug console
-v Set verbosity for output logs. Pass multiple times
(e.g -vvv) to increase the logging. Use --daemon-log
to specify where the logs go.
--daemon-log LOGFILE File path for debugging daemon logs. Used with -v.
Setting this to 'stdout' or 'stderr' sends logs to
each, respectively. Defaults to /tmp/ghcitui.log.
-c,--cmd CMD Command to start the internal interpreter
-C,--workdir DIR Set working dir
@ -129,6 +137,7 @@ Live Interpreter (REPL)
- ``Ctrl+x``: Toggle between the Source Viewer and the Live Interpreter
panels.
- ``<Esc>``: Switch to Source Viewer.
- ``<Esc>`` while in scrolling mode: Exit scrolling mode.
- ``<Up>``: Scroll back in time through the REPL command history.
- ``<Down>``: Scroll forward in time through the REPL command history.
- ``<PgUp>``: Scroll the Live Interpreter window one page up.

View File

@ -48,11 +48,11 @@ appDraw s =
]
dialogMaxWidth :: (Integral a) => a
dialogMaxWidth = 90
dialogMaxWidth = 94
{- | Draw the dialog layer.
If there's no dialog, returns an 'emptyWidget'.
If there's no dialog, returns an 'emptyWidget'.
-}
drawDialogLayer :: AppS -> B.Widget AppName
-- Quit Dialog

View File

@ -425,6 +425,8 @@ handleDialogHelp (B.VtyEvent (V.EvKey key _))
B.put $ appState{activeWindow = ActiveCodeViewport}
| key == V.KPageDown = B.vScrollPage scroller B.Down
| key == V.KPageUp = B.vScrollPage scroller B.Up
| key == V.KDown = B.vScrollBy scroller 1
| key == V.KUp = B.vScrollBy scroller (-1)
| otherwise = pure ()
where
scroller = B.viewportScroll HelpViewport

View File

@ -4,141 +4,7 @@ module HelpText where
import Data.String (IsString)
-- import Data.FileEmbed
import qualified Data.FileEmbed as FileEmbed
helpText :: (IsString a) => a
helpText =
"\
\GHCITUI MANUAL() GHCITUI MANUAL()\n\
\\n\
\NAME\n\
\ GHCiTUI MANUAL -\n\
\\n\
\CLI SYNOPSIS\n\
\ Usage: ghcitui [OPTIONS] [TARGET]\n\
\\n\
\ ghcitui: A TUI interface for GHCi\n\
\\n\
\ Available options:\n\
\ -h,--help Show this help text\n\
\ -d,--debug-console Display the debug console\n\
\ -c,--cmd CMD Command to start the internal\n\
\ interpreter\n\
\ -C,--workdir DIR Set working dir\n\
\\n\
\STARTING AND STOPPING\n\
\ Starting\n\
\ GHCiTUI runs a REPL in the current directory by default. By default,\n\
\ it launches cabal repl.\n\
\\n\
\ $ cd your/cabal/project/root/directory\n\
\ $ ghcitui\n\
\\n\
\ You can specify another starting directory with the -C <DIR> flag.\n\
\\n\
\ $ ghcitui -C some/other/directory\n\
\\n\
\ Stopping\n\
\ To quit, press <ESC> or q while in the code viewport panel to quit.\n\
\ While not in the code viewport panel, you may press <ESC> to get to\n\
\ the viewport panel.\n\
\\n\
\LAYOUT\n\
\ GHCiTUI is an in-terminal viewer for GHCi. The TUI is broken up into\n\
\ three primary panels, with some additional auxiliary panels for spe\n\
\ cial use cases:\n\
\\n\
\ \n\
\ Info \n\
\ \n\
\ Source Viewer \n\
\ \n\
\ \n\
\ \n\
\ \n\
\ Live Interpreter \n\
\ \n\
\ \n\
\\n\
\ Source Viewer: This panel shows source code. You can step, continue,\n\
\ and toggle breakpoints among other operations in this panel.\n\
\\n\
\ Live Interpreter: This panel shows the GHCi/REPL passthrough. You can\n\
\ enter expressions and GHCi commands here like you would normally,\n\
\ with some additional keybindings.\n\
\\n\
\ Info: This panel displays miscellaneous info about whatever is cur\n\
\ rently running. For example, it can display the current bindings,\n\
\ loaded modules, and the current program trace.\n\
\\n\
\NAVIGATION\n\
\ At any point in time, you can revert back to the Source Viewer panel\n\
\ with the <Esc> key, and you can always quit by hitting <Esc> in the\n\
\ Source Viewer panel.\n\
\\n\
\KEYBINDINGS\n\
\ At this time, keybindings are hardcoded. This will hopefully change\n\
\ in the future with a keybinding configuration file.\n\
\\n\
\ Source Viewer\n\
\ Ctrl+x: Toggle between the Source Viewer and the Live Interpreter\n\
\ panels.\n\
\\n\
\ <Esc>, q: Quit.\n\
\\n\
\ <Up>, k: Move the cursor up. (j and k from Vim keybinds)\n\
\\n\
\ <Down>, j: Move the cursor down. (j and k from Vim keybinds).\n\
\\n\
\ <PgUp>: Move the source viewer one page up.\n\
\\n\
\ <PgDown>: Move the source viewer one page down.\n\
\\n\
\ +, -: Increase/decrease the Info panel size.\n\
\\n\
\ b: Toggle breakpoint at current line. Not every line in a source\n\
\ file can have a breakpoint placed on it.\n\
\\n\
\ s: Advance execution by one step. Same as the :step in GHCi.\n\
\\n\
\ c: Advance execution until next breakpoint. Same as :continue in\n\
\ GHCi.\n\
\\n\
\ t: Advance execution until next breakpoint under tracing. Same as\n\
\ :trace in GHCi.\n\
\\n\
\ Live Interpreter (REPL)\n\
\ Ctrl+x: Toggle between the Source Viewer and the Live Interpreter\n\
\ panels.\n\
\\n\
\ <Esc>: Switch to Source Viewer.\n\
\\n\
\ <Up>: Scroll back in time through the REPL command history.\n\
\\n\
\ <Down>: Scroll forward in time through the REPL command history.\n\
\\n\
\ <PgUp>: Scroll the Live Interpreter window one page up.\n\
\\n\
\ <PgDown>: Scroll the Live Interpreter window one page down.\n\
\\n\
\ Ctrl+n: Toggle scrolling mode.\n\
\\n\
\ +, - while in scrolling mode: Increase/decrease the live panel\n\
\ size.\n\
\\n\
\ <Enter>: Enter a command to the REPL.\n\
\\n\
\ Modules\n\
\ Ctrl+x: Switch to the Live Interpreter.\n\
\\n\
\ <Esc>: Switch to Source Viewer.\n\
\\n\
\ <Up>, k: Move the module selection up.\n\
\\n\
\ <Down>, j: Move the module selection down.\n\
\\n\
\ +, -: Increase/decrease the info panel size.\n\
\\n\
\ <Enter>, o: Open the selected module.\n\
\\n\
\ GHCITUI MANUAL()"
helpText = $(FileEmbed.makeRelativeToProject "gen/MANUAL.txt" >>= FileEmbed.embedStringFile)

145
gen/MANUAL.txt Normal file
View File

@ -0,0 +1,145 @@
CLI SYNOPSIS
Usage: ghcitui [--version] [--debug-console] [-v] [--daemon-log LOGFILE]
[-c|--cmd CMD] [-C|--workdir DIR] [TARGET]
ghcitui: A TUI interface for GHCi
Available options:
-h,--help Show this help text
--version Print the version number and exit
--debug-console Display the debug console
-v Set verbosity for output logs. Pass multiple times
(e.g -vvv) to increase the logging. Use --daemon-log
to specify where the logs go.
--daemon-log LOGFILE File path for debugging daemon logs. Used with -v.
Setting this to 'stdout' or 'stderr' sends logs to
each, respectively. Defaults to /tmp/ghcitui.log.
-c,--cmd CMD Command to start the internal interpreter
-C,--workdir DIR Set working dir
STARTING AND STOPPING
Starting
GHCiTUI runs a REPL in the current directory by default. By default, it
launches cabal repl.
$ cd your/cabal/project/root/directory
$ ghcitui
You can specify another starting directory with the -C <DIR> flag.
$ ghcitui -C some/other/directory
Stopping
To quit, press <ESC> or q while in the code viewport panel to quit.
While not in the code viewport panel, you may press <ESC> to get to the
viewport panel.
LAYOUT
GHCiTUI is an in-terminal viewer for GHCi. The TUI is broken up into
three primary panels, with some additional auxiliary panels for special
use cases:
┌──────────────────┬──────┐
│ │ Info │
│ │ │
│ Source Viewer │ │
│ │ │
│ │ │
├──────────────────┤ │
│ │ │
│ Live Interpreter │ │
│ │ │
└──────────────────┴──────┘
Source Viewer: This panel shows source code. You can step, continue,
and toggle breakpoints among other operations in this panel.
Live Interpreter: This panel shows the GHCi/REPL passthrough. You can
enter expressions and GHCi commands here like you would normally, with
some additional keybindings.
Info: This panel displays miscellaneous info about whatever is cur
rently running. For example, it can display the current bindings,
loaded modules, and the current program trace.
NAVIGATION
At any point in time, you can revert back to the Source Viewer panel
with the <Esc> key, and you can always quit by hitting <Esc> in the
Source Viewer panel.
On top of each panel is a label where the navigation key combination is
located. For example, the key combination above the Modules panel dis
plays [M]. Pressing this key combination will move the focus to that
panel.
KEYBINDINGS
At this time, keybindings are hardcoded. This will hopefully change in
the future with a keybinding configuration file.
Source Viewer
• ?: Display help inside GHCiTUI.
• Ctrl+x: Toggle between the Source Viewer and the Live Interpreter
panels.
• <Esc>, q: Quit.
• <Up>, k: Move the cursor up. (j and k from Vim keybinds)
• <Down>, j: Move the cursor down. (j and k from Vim keybinds).
• <PgUp>: Move the source viewer one page up.
• <PgDown>: Move the source viewer one page down.
• +, -: Increase/decrease the left panel sizes.
• b: Toggle breakpoint at current line. Not every line in a source file
can have a breakpoint placed on it.
• s: Advance execution by one step. Same as the :step in GHCi.
• c: Advance execution until next breakpoint. Same as :continue in
GHCi.
• t: Advance execution until next breakpoint under tracing. Same as
:trace in GHCi.
Live Interpreter (REPL)
• Ctrl+x: Toggle between the Source Viewer and the Live Interpreter
panels.
• <Esc>: Switch to Source Viewer.
• <Esc> while in scrolling mode: Exit scrolling mode.
• <Up>: Scroll back in time through the REPL command history.
• <Down>: Scroll forward in time through the REPL command history.
• <PgUp>: Scroll the Live Interpreter window one page up.
• <PgDown>: Scroll the Live Interpreter window one page down.
• Ctrl+n: Toggle scrolling mode.
• +, - while in scrolling mode: Increase/decrease the live panel size.
• <Enter>: Enter a command to the REPL.
Modules
• ?: Display help inside GHCiTUI.
• Ctrl+x: Switch to the Live Interpreter.
• <Esc>: Switch to Source Viewer.
• <Up>, k: Move the module selection up.
• <Down>, j: Move the module selection down.
• +, -: Increase/decrease the info panel size.
• <Enter>, o: Open the selected module.
GHCITUI MANUAL()

3
gen/README.md Normal file
View File

@ -0,0 +1,3 @@
# Generated Assets
This dir contains files generated during the pre-build process.

View File

@ -29,6 +29,7 @@ extra-source-files: CHANGELOG.md
, LICENSE
, MANUAL.rst
, README.md
, gen/MANUAL.txt
source-repository head
type: git
@ -40,6 +41,7 @@ executable ghcitui
, brick
, containers >= 0.6.7 && < 0.8
, errors ^>= 2.3.0
, file-embed ^>= 0.0.15
, ghcitui-core
, ghcitui-brick
, microlens ^>= 0.4.13.1

7
regenerate_help.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
GENDIR="gen"
mkdir -p "${GENDIR}"
TMPFILE="$(mktemp)"
rst2man MANUAL.rst > "${TMPFILE}"
man "${TMPFILE}" | sed -e '1,5d' > ${GENDIR}/MANUAL.txt