branch: elpa/casual
commit 5cfe1a9017658cc73a4b4ed32292e0d1880fc758
Merge: 471d730634 06506cb31d
Author: Charles Choi <[email protected]>
Commit: GitHub <[email protected]>

    Merge pull request #251 from 
kickingvegas/merge-development-to-main-20250624_111755
    
    Merge development to main 20250624_111755
---
 README.org                                         |  27 ++-
 docs/agenda.org                                    |  11 +-
 docs/bookmarks.org                                 |  13 +-
 docs/calc.org                                      |  12 +-
 docs/calendar.org                                  |  11 +-
 docs/casual.info                                   | 243 +++++++++++++++++----
 docs/casual.org                                    | 123 ++++++++++-
 docs/dired.org                                     |  12 +-
 docs/editkit.org                                   |  12 +-
 docs/help.org                                      |  66 ++++++
 docs/ibuffer.org                                   |  14 +-
 docs/image.org                                     |  13 +-
 docs/images/casual-calc-tmenu.png                  | Bin 326986 -> 290290 bytes
 docs/images/casual-help-screenshot.png             | Bin 0 -> 354135 bytes
 docs/images/casual-man-screenshot.png              | Bin 0 -> 299315 bytes
 docs/images/casual-man-settings.png                | Bin 0 -> 112965 bytes
 docs/info.org                                      |  11 +-
 docs/isearch.org                                   |  11 +-
 docs/make-mode.org                                 |  12 +-
 docs/man.org                                       |  80 +++++++
 docs/re-builder.org                                |  11 +-
 docs/timezone.org                                  |  12 +-
 lisp/Makefile                                      |  10 +
 lisp/Makefile-help.make                            |  30 +++
 lisp/Makefile-man.make                             |  30 +++
 lisp/casual-calc-utils.el                          |   3 +-
 lisp/casual-help-settings.el                       |  97 ++++++++
 lisp/casual-help-utils.el                          |  67 ++++++
 lisp/casual-help.el                                | 135 ++++++++++++
 lisp/casual-info-settings.el                       |  63 ++++--
 lisp/casual-info-utils.el                          |   8 +
 lisp/casual-info.el                                |   4 +-
 lisp/casual-isearch-settings.el                    |  56 ++++-
 lisp/casual-lib.el                                 |  16 +-
 lisp/casual-man-settings.el                        | 100 +++++++++
 lisp/casual-man-utils.el                           |  62 ++++++
 lisp/casual-man.el                                 | 132 +++++++++++
 lisp/casual.el                                     |   6 +-
 tests/Makefile                                     |  14 +-
 ...-info-settings.el => casual-help-test-utils.el} |  34 ++-
 ...l-info-settings.el => casual-man-test-utils.el} |  33 ++-
 tests/test-casual-calc.el                          |   5 +
 tests/test-casual-help-settings.el                 |  53 +++++
 tests/test-casual-help-utils.el                    |  54 +++++
 tests/test-casual-help.el                          | 100 +++++++++
 tests/test-casual-info-settings.el                 |  33 ++-
 tests/test-casual-info-utils.el                    |   1 +
 tests/test-casual-info.el                          |   4 +-
 tests/test-casual-isearch-settings.el              |  38 ++--
 tests/test-casual-man-settings.el                  |  56 +++++
 tests/test-casual-man-utils.el                     |  56 +++++
 tests/test-casual-man.el                           |  91 ++++++++
 52 files changed, 1800 insertions(+), 285 deletions(-)

diff --git a/README.org b/README.org
index 841dd37649..1a9198c3ae 100644
--- a/README.org
+++ b/README.org
@@ -37,11 +37,13 @@ Editorially, all design decisions for Casual are ultimately 
the opinion of Charl
   - [[#calendar-elisp-library-casual-calendar][Calendar (Elisp library: 
~casual-calendar~)]]
   - [[#dired-elisp-library-casual-dired][Dired (Elisp library: 
~casual-dired~)]]
   - [[#editkit-elisp-library-casual-editkit][EditKit (Elisp library: 
~casual-editkit~)]]
+  - [[#help-elisp-library-casual-help][Help (Elisp library: ~casual-help~)]]
   - [[#ibuffer-elisp-library-casual-ibuffer][IBuffer (Elisp library: 
~casual-ibuffer~)]]
   - [[#image-elisp-library-casual-image][Image (Elisp library: 
~casual-image~)]]
   - [[#info-elisp-library-casual-info][Info (Elisp library: ~casual-info~)]]
   - [[#i-search-elisp-library-casual-isearch][I-Search (Elisp library: 
~casual-isearch~)]]
   - [[#make-elisp-library-casual-make][Make (Elisp library: ~casual-make~)]]
+  - [[#man-elisp-library-casual-man][Man (Elisp library: ~casual-man~)]]
   - [[#re-builder-elisp-library-casual-re-builder][Re-Builder (Elisp library: 
~casual-re-builder~)]]
   - [[#timezone-elisp-library-casual-timezone][Timezone (Elisp library: 
~casual-timezone~)]]
 - [[#requirements][Requirements]]
@@ -80,21 +82,28 @@ An interface for 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Cal
 
 [[file:docs/images/casual-calendar-screenshot.png]]
 
-
 ** [[file:docs/dired.org][Dired]] (Elisp library: ~casual-dired~)
   An interface for the venerable file manager Dired.
 
   [[file:docs/dired.org][file:docs/images/casual-dired-screenshot.png]]
   
 ** [[file:docs/editkit.org][EditKit]] (Elisp library: ~casual-editkit~)
-  A cornucopia of interfaces for the different editing features (e.g. marking, 
copying, killing, duplicating, transforming, deleting) of Emacs. Included are 
interfaces for rectangle, register, macro, and project commands.
+A cornucopia of interfaces for the different editing features (e.g. marking, 
copying, killing, duplicating, transforming, deleting) of Emacs. Included are 
interfaces for rectangle, register, macro, and project commands.
 
   
[[file:docs/editkit.org][file:docs/images/casual-editkit-main-screenshot.png]]
+
+
+** [[file:docs/help.org][Help]] (Elisp library: ~casual-help~)
+
+An interface for ~help-mode~, a major mode for viewing help text and 
navigating references in it.
+
+[[file:docs/help.org][file:docs/images/casual-help-screenshot.png]]
+  
   
 ** [[file:docs/ibuffer.org][IBuffer]] (Elisp library: ~casual-ibuffer~)
-  An interface for 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Buffer-Menus.html][IBuffer]],
 a tool for managing buffers in Emacs. If one was to fancifully consider Emacs 
as an OS, consider this to be its task manager.
+An interface for 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Buffer-Menus.html][IBuffer]],
 a tool for managing buffers in Emacs. If one was to fancifully consider Emacs 
as an OS, consider this to be its task manager.
 
-  [[file:docs/info.org][file:docs/images/casual-ibuffer-screenshot.png]]
+[[file:docs/info.org][file:docs/images/casual-ibuffer-screenshot.png]]
 
 ** [[file:docs/image.org][Image]] (Elisp library: ~casual-image~)
 An interface for viewing an image file with 
[[https://www.gnu.org/software/emacs/manual/html_node/emacs/Image-Mode.html#Image-Mode][image-mode]].
 This interface deviates significantly with naming conventions used by 
~image-mode~ to be more in alignment with conventional image editing tools.
@@ -118,6 +127,11 @@ An interface for ~make-mode~, a mode tailored for editing 
a Makefile.
 
 [[file:docs/make-mode.org][file:docs/images/casual-make-screenshot.png]]
 
+** [[file:docs/man.org][Man]] (Elisp library: ~casual-man~)
+An interface for ~Man-mode~, a Man page reader.
+
+[[file:docs/man.org][file:docs/images/casual-man-screenshot.png]]
+
 ** [[file:docs/re-builder.org][Re-Builder]] (Elisp library: 
~casual-re-builder~)
 An interface for the Emacs regular expression tool.
 
@@ -150,13 +164,16 @@ Configuration of a particular Casual user interface is 
performed per mode. Go to
 - [[file:docs/calendar.org::*Install][Calendar]]
 - [[file:docs/dired.org::*Install][Dired]]
 - [[file:docs/editkit.org::*Install][EditKit]]
+- [[file:docs/help.org::*Install][Help]]
 - [[file:docs/ibuffer.org::*Install][IBuffer]]
 - [[file:docs/image.org::*Install][Image]]
 - [[file:docs/info.org::*Install][Info]]
 - [[file:docs/isearch.org::*Install][I-Search]]
 - [[file:docs/make-mode.org::*Install][Make]]
+- [[file:docs/man.org::*Install][Man]]
 - [[file:docs/re-builder.org::*Install][Re-Builder]]
-
+- [[file:docs/timezone.org::*Install][Timezone]]
+  
 ** Upgrading to Casual 2.x
 If you have been using an earlier version 1.x of Casual, thank you. Please use 
the following guidance:
 
diff --git a/docs/agenda.org b/docs/agenda.org
index 20bf51f418..aca7008455 100644
--- a/docs/agenda.org
+++ b/docs/agenda.org
@@ -71,13 +71,4 @@ If you enjoy using Casual Agenda, consider making a modest 
financial contributio
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/bookmarks.org b/docs/bookmarks.org
index 9ca553b920..dcf50a2c94 100644
--- a/docs/bookmarks.org
+++ b/docs/bookmarks.org
@@ -68,15 +68,4 @@ If you enjoy using Casual Bookmarks, consider making a 
modest financial contribu
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
-
-
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/calc.org b/docs/calc.org
index bdd7f701db..5eca55e792 100644
--- a/docs/calc.org
+++ b/docs/calc.org
@@ -54,13 +54,5 @@ If you enjoy using Casual Calc, consider making a modest 
financial contribution
 
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
+
diff --git a/docs/calendar.org b/docs/calendar.org
index 83b1d83b6f..a6cbc92f88 100644
--- a/docs/calendar.org
+++ b/docs/calendar.org
@@ -83,13 +83,4 @@ If you enjoy using Casual Calendar, consider making a modest 
financial contribut
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][RE-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/casual.info b/docs/casual.info
index d3ef8b6e48..cf889aa1c0 100644
--- a/docs/casual.info
+++ b/docs/casual.info
@@ -11,7 +11,7 @@ File: casual.info,  Node: Top,  Next: Motivations,  Up: (dir)
 Casual User Guide
 *****************
 
-Version: 2.5.1
+Version: 2.6.0
 
 Casual is a project to re-imagine the primary user interface for Emacs
 using keyboard-driven menus.
@@ -61,11 +61,13 @@ Casual Modes
 * Calendar::
 * Dired::
 * EditKit::
+* Help::
 * IBuffer::
 * Image::
 * Info::
 * I-Search::
 * Make::
+* Man::
 * RE-Builder::
 * Timezone::
 
@@ -207,11 +209,13 @@ The following modes are supported by Casual:
 * Calendar::
 * Dired::
 * EditKit::
+* Help::
 * IBuffer::
 * Image::
 * Info::
 * I-Search::
 * Make::
+* Man::
 * RE-Builder::
 * Timezone::
 
@@ -620,7 +624,7 @@ References
    • *note Dired: (emacs)Dired.
 
 
-File: casual.info,  Node: EditKit,  Next: IBuffer,  Prev: Dired,  Up: Casual 
Modes
+File: casual.info,  Node: EditKit,  Next: Help,  Prev: Dired,  Up: Casual Modes
 
 4.6 EditKit
 ===========
@@ -681,9 +685,77 @@ References
    • *note Registers: (emacs)Registers.
 
 
-File: casual.info,  Node: IBuffer,  Next: Image,  Prev: EditKit,  Up: Casual 
Modes
+File: casual.info,  Node: Help,  Next: IBuffer,  Prev: EditKit,  Up: Casual 
Modes
 
-4.7 IBuffer
+4.7 Help
+========
+
+Casual Help is a user interface for ‘help-mode’, a major mode for
+viewing help text and navigating references in it.
+
+Configuration
+=============
+
+In your initialization file, bind the Transient ‘casual-help-tmenu’ to
+your key binding of preference.
+
+     (require 'casual-help) ; optional
+     (keymap-set help-mode-map "C-o" #'casual-help-tmenu)
+
+‘casual-help-tmenu’ deviates from the default bindings of
+‘help-mode-map’ as shown in the table below.
+
+Default Binding   Casual Binding   Command                                 
Notes
+------------------------------------------------------------------------------------------------------------------------
+l                 M-[              help-go-back                            
Make consistent with Casual Info behavior.
+r                 M-]              help-go-forward                         
Make consistent with Casual Info behavior.
+n                 N                help-goto-next-page                     Use 
to navigate to next page.
+p                 P                help-goto-previous-page                 Use 
to navigate to previous page.
+                  n                casual-lib-browser-forward-paragraph    Use 
to navigate paragraph forward.
+                  p                casual-lib-browser-backward-paragraph   Use 
to navigate paragraph backward.
+
+The following keybindings are recommended to support consistent behavior
+between ‘help-mode’ and ‘casual-help-tmenu’.
+
+     (keymap-set help-mode-map "M-[" #'help-go-back)
+     (keymap-set help-mode-map "M-]" #'help-go-forward)
+     (keymap-set help-mode-map "p" #'casual-lib-browse-backward-paragraph)
+     (keymap-set help-mode-map "n" #'casual-lib-browse-forward-paragraph)
+     (keymap-set help-mode-map "P" #'help-goto-previous-page)
+     (keymap-set help-mode-map "N" #'help-goto-next-page)
+     (keymap-set help-mode-map "j" #'forward-button)
+     (keymap-set help-mode-map "k" #'backward-button)
+
+Usage
+=====
+
+Basic Usage
+-----------
+
+After invoking help via a ‘describe-’ command, invoke
+‘casual-help-tmenu’ using the binding ‘C-o’ (or your binding of
+preference).
+
+The following sections are offered in the menu:
+
+Navigation
+     Navigation commands with the document.
+History
+     Navigate history of help invocations.
+Link
+     Navigate to different references in the help buffer.
+Describe
+     Get help for different Elisp types.
+Info
+     If available, then open this help topic in Info (info.org).
+Source
+     Show the Elisp source.  If the help displayed is for a customizable
+     variable, then show a customize menu item.
+
+
+File: casual.info,  Node: IBuffer,  Next: Image,  Prev: Help,  Up: Casual Modes
+
+4.8 IBuffer
 ===========
 
 Casual IBuffer provides a user interface to Emacs IBuffer, a mode
@@ -758,7 +830,7 @@ References
 
 File: casual.info,  Node: Image,  Next: Info,  Prev: IBuffer,  Up: Casual Modes
 
-4.8 Image
+4.9 Image
 =========
 
 Casual Image is a user interface for Image Mode.  Its top level library
@@ -818,8 +890,8 @@ References
 
 File: casual.info,  Node: Info,  Next: I-Search,  Prev: Image,  Up: Casual 
Modes
 
-4.9 Info
-========
+4.10 Info
+=========
 
 Casual Info is a user interface for the Emacs Info Reader.  Its top
 level library is ‘casual-info’.
@@ -881,7 +953,7 @@ References
 
 File: casual.info,  Node: I-Search,  Next: Make,  Prev: Info,  Up: Casual Modes
 
-4.10 I-Search
+4.11 I-Search
 =============
 
 Casual I-Search is a user interface for Incremental Search.  Its top
@@ -931,9 +1003,9 @@ References
    • *note I-Search: (emacs)Incremental Search.
 
 
-File: casual.info,  Node: Make,  Next: RE-Builder,  Prev: I-Search,  Up: 
Casual Modes
+File: casual.info,  Node: Make,  Next: Man,  Prev: I-Search,  Up: Casual Modes
 
-4.11 Make
+4.12 Make
 =========
 
 Casual Make is a user interface to ‘make-mode’, a mode tailored for
@@ -1010,9 +1082,96 @@ References
    • *note Automatic Variables: (make)Automatic Variables.
 
 
-File: casual.info,  Node: RE-Builder,  Next: Timezone,  Prev: Make,  Up: 
Casual Modes
+File: casual.info,  Node: Man,  Next: RE-Builder,  Prev: Make,  Up: Casual 
Modes
+
+4.13 Man
+========
+
+Casual Man is a user interface for ‘Man-mode’, a Man page reader.
+
+Configuration
+=============
+
+In your initialization file, bind the Transient ‘casual-man-tmenu’ to
+your key binding of preference.
+
+     (require 'casual-man) ; optional
+     (keymap-set Man-mode-map "C-o" #'casual-man-tmenu)
+
+‘casual-man-tmenu’ deviates from the default bindings of ‘Man-mode-map’
+as shown in the table below.
+
+Default Binding   Casual Binding   Command                                 
Notes
+-------------------------------------------------------------------------------------------------------------------------------------
+n                 [                Man-previous-section                    
Make consistent with Casual Dired and IBuffer behavior.
+p                 ]                Man-next-section                        
Make consistent with Casual Dired and IBuffer behavior.
+k                 K                Man Kill                                
Reserve k for navigation.
+                  k                previous-line
+                  j                next-line
+                  n                casual-lib-browser-forward-paragraph    Use 
to navigate paragraph forward.
+                  p                casual-lib-browser-backward-paragraph   Use 
to navigate paragraph backward.
+
+The following keybindings are recommended to support consistent behavior
+between ‘Man-mode’ and ‘casual-man-tmenu’.
+
+     (keymap-set Man-mode-map "n" #'casual-lib-browse-forward-paragraph)
+     (keymap-set Man-mode-map "p" #'casual-lib-browse-backward-paragraph)
+     (keymap-set Man-mode-map "[" #'Man-previous-section)
+     (keymap-set Man-mode-map "]" #'Man-next-section)
+     (keymap-set Man-mode-map "j" #'next-line)
+     (keymap-set Man-mode-map "k" #'previous-line)
+     (keymap-set Man-mode-map "o" #'casual-man-occur-options)
+
+Usage
+=====
+
+Basic Usage
+-----------
+
+The Man page reader can be invoked via ‘M-x man’, where the user is
+prompted for a search key.  This search key is typically the name of a
+command that has an associated Man page.  In the Man page window,
+pressing ‘C-o’ (or your binding of preference) will raise the menu
+‘casual-man-tmenu’.
+
+The following sections are offered in the menu:
+
+Navigation
+     Navigation commands with the document.
+Paragraph
+     Navigation commands by paragraph.
+Section
+     Navigation commands by section.
+Link
+     Jump to other Man pages referenced in the current Man page.
+Page
+     If the Man page reader is configured to display all manual pages
+     for a given search key, navigation commands for multiple pages is
+     provided.
+
+Options Navigation
+------------------
+
+‘casual-man-tmenu’ provides the menu item ‘o’ which runs the command
+‘casual-man-occur-options’.  This will invoke ‘occur’ with a regexp that
+searches for command line options (for example, "-foo", "-a") that can
+be navigated via the ‘occur’ interface.
+
+Settings
+--------
+
+By default, the Man page reader will _not_ display all manual pages for
+given search key.  This can be changed in the Settings menu
+‘casual-man-settings-tmenu’ that can be invoked by pressing ‘,’ in
+‘casual-man-tmenu’.
+
+Press ‘s’ and configure ‘Man-switches’ to have the value "-a" to get all
+manual pages.
+
+
+File: casual.info,  Node: RE-Builder,  Next: Timezone,  Prev: Man,  Up: Casual 
Modes
 
-4.12 RE-Builder
+4.14 RE-Builder
 ===============
 
 Casual RE-Builder is a user interface for RE-Builder.  Its top level
@@ -1104,7 +1263,7 @@ References
 
 File: casual.info,  Node: Timezone,  Prev: RE-Builder,  Up: Casual Modes
 
-4.13 Timezone
+4.15 Timezone
 =============
 
 Casual Timezone is a library of commands to work with different time
@@ -1366,6 +1525,9 @@ File: casual.info,  Node: Index,  Next: Variable Index,  
Prev: Acknowledgments,
 * EditKit Usage:                         EditKit.              (line 25)
 * Feedback:                              Feedback & Discussion.
                                                                (line  6)
+* Help:                                  Help.                 (line  6)
+* Help Configuration:                    Help.                 (line 12)
+* Help Usage:                            Help.                 (line 44)
 * I-Search:                              I-Search.             (line  6)
 * I-Search Configuration:                I-Search.             (line 12)
 * I-Search Usage:                        I-Search.             (line 21)
@@ -1382,6 +1544,9 @@ File: casual.info,  Node: Index,  Next: Variable Index,  
Prev: Acknowledgments,
 * Make:                                  Make.                 (line  6)
 * Make Configuration:                    Make.                 (line 12)
 * Make Usage:                            Make.                 (line 21)
+* Man:                                   Man.                  (line  6)
+* Man Configuration:                     Man.                  (line 11)
+* Man Usage:                             Man.                  (line 43)
 * Motivations:                           Motivations.          (line  5)
 * RE-Builder:                            RE-Builder.           (line  6)
 * RE-Builder Configuration:              RE-Builder.           (line 12)
@@ -1413,31 +1578,33 @@ File: casual.info,  Node: Variable Index,  Prev: Index, 
 Up: Top
 
 Tag Table:
 Node: Top228
-Node: Motivations1936
-Node: Requirements3429
-Node: Transient Conventions3693
-Node: Casual Modes5421
-Node: Agenda6426
-Node: Bookmarks7983
-Node: Calc10258
-Node: Calendar13399
-Node: Dired14747
-Node: EditKit17972
-Node: IBuffer19696
-Node: Image21761
-Node: Info23002
-Node: I-Search24468
-Node: Make25629
-Node: RE-Builder28013
-Node: Timezone31437
-Node: UX Conventions34829
-Node: Customization37530
-Node: Feedback & Discussion37904
-Node: Sponsorship38322
-Node: About38616
-Node: Acknowledgments38893
-Node: Index39275
-Node: Variable Index43615
+Node: Motivations1953
+Node: Requirements3446
+Node: Transient Conventions3710
+Node: Casual Modes5438
+Node: Agenda6460
+Node: Bookmarks8017
+Node: Calc10292
+Node: Calendar13433
+Node: Dired14781
+Node: EditKit18006
+Node: Help19727
+Node: IBuffer22436
+Node: Image24498
+Node: Info25739
+Node: I-Search27207
+Node: Make28368
+Node: Man30745
+Node: RE-Builder34132
+Node: Timezone37555
+Node: UX Conventions40947
+Node: Customization43648
+Node: Feedback & Discussion44022
+Node: Sponsorship44440
+Node: About44734
+Node: Acknowledgments45011
+Node: Index45393
+Node: Variable Index50171
 
 End Tag Table
 
diff --git a/docs/casual.org b/docs/casual.org
index 2a174cf1f6..70064e93bb 100644
--- a/docs/casual.org
+++ b/docs/casual.org
@@ -6,7 +6,7 @@
 #+OPTIONS: ':t toc:t author:t email:t compact-itemx:t
 #+LANGUAGE: en
 
-#+MACRO: version 2.5.1
+#+MACRO: version 2.6.0
 
 #+TEXINFO_FILENAME: casual.info
 #+TEXINFO_HEADER: @syncodeindex pg cp
@@ -488,6 +488,64 @@ Casual EditKit has support for Register commands by 
providing a sub-menu for it
 #+TEXINFO: @unnumberedsec References
 - [[info:emacs#Registers][Registers]]
 
+** Help
+#+CINDEX: Help
+
+Casual Help is a user interface for ~help-mode~, a major mode for viewing help 
text and navigating references in it.
+
+
+#+TEXINFO: @unnumberedsec Configuration
+#+CINDEX: Help Configuration
+
+In your initialization file, bind the Transient ~casual-help-tmenu~ to your 
key binding of preference.
+
+#+begin_src elisp :lexical no
+  (require 'casual-help) ; optional
+  (keymap-set help-mode-map "C-o" #'casual-help-tmenu)
+#+end_src
+
+~casual-help-tmenu~ deviates from the default bindings of ~help-mode-map~ as 
shown in the table below.
+
+| Default Binding | Casual Binding | Command                               | 
Notes                                      |
+|-----------------+----------------+---------------------------------------+--------------------------------------------|
+| l               | M-[            | help-go-back                          | 
Make consistent with Casual Info behavior. |
+| r               | M-]            | help-go-forward                       | 
Make consistent with Casual Info behavior. |
+| n               | N              | help-goto-next-page                   | 
Use to navigate to next page.              |
+| p               | P              | help-goto-previous-page               | 
Use to navigate to previous page.          |
+|                 | n              | casual-lib-browser-forward-paragraph  | 
Use to navigate paragraph forward.         |
+|                 | p              | casual-lib-browser-backward-paragraph | 
Use to navigate paragraph backward.        |
+
+The following keybindings are recommended to support consistent behavior 
between ~help-mode~ and ~casual-help-tmenu~.
+
+#+begin_src elisp :lexical no
+  (keymap-set help-mode-map "M-[" #'help-go-back)
+  (keymap-set help-mode-map "M-]" #'help-go-forward)
+  (keymap-set help-mode-map "p" #'casual-lib-browse-backward-paragraph)
+  (keymap-set help-mode-map "n" #'casual-lib-browse-forward-paragraph)
+  (keymap-set help-mode-map "P" #'help-goto-previous-page)
+  (keymap-set help-mode-map "N" #'help-goto-next-page)
+  (keymap-set help-mode-map "j" #'forward-button)
+  (keymap-set help-mode-map "k" #'backward-button)
+#+end_src
+
+
+
+#+TEXINFO: @unnumberedsec Usage
+#+CINDEX: Help Usage
+
+#+TEXINFO: @unnumberedsubsec Basic Usage
+
+After invoking help via a ~describe-~ command, invoke ~casual-help-tmenu~ 
using the binding ~C-o~ (or your binding of preference).
+
+The following sections are offered in the menu:
+
+- Navigation :: Navigation commands with the document.
+- History :: Navigate history of help invocations.
+- Link :: Navigate to different references in the help buffer.
+- Describe :: Get help for different Elisp types.
+- Info :: If available, then open this help topic in [[file:info.org][Info]].
+- Source :: Show the Elisp source. If the help displayed is for a customizable 
variable, then show a customize menu item.
+
 ** IBuffer
 #+CINDEX: IBuffer
 
@@ -751,6 +809,69 @@ Unless you edit makefiles frequently, it is very unlikely 
to be able to recall w
 #+TEXINFO: @unnumberedsec References
 - [[info:make#Automatic Variables][Automatic Variables]]
 
+** Man
+#+CINDEX: Man
+
+Casual Man is a user interface for ~Man-mode~, a Man page reader.
+
+#+TEXINFO: @unnumberedsec Configuration
+#+CINDEX: Man Configuration
+
+In your initialization file, bind the Transient ~casual-man-tmenu~ to your key 
binding of preference.
+
+#+begin_src elisp :lexical no
+  (require 'casual-man) ; optional
+  (keymap-set Man-mode-map "C-o" #'casual-man-tmenu)
+#+end_src
+
+~casual-man-tmenu~ deviates from the default bindings of ~Man-mode-map~ as 
shown in the table below.
+
+| Default Binding | Casual Binding | Command                               | 
Notes                                                   |
+|-----------------+----------------+---------------------------------------+---------------------------------------------------------|
+| n               | [              | Man-previous-section                  | 
Make consistent with Casual Dired and IBuffer behavior. |
+| p               | ]              | Man-next-section                      | 
Make consistent with Casual Dired and IBuffer behavior. |
+| k               | K              | Man Kill                              | 
Reserve k for navigation.                               |
+|                 | k              | previous-line                         |   
                                                      |
+|                 | j              | next-line                             |   
                                                      |
+|                 | n              | casual-lib-browser-forward-paragraph  | 
Use to navigate paragraph forward.                      |
+|                 | p              | casual-lib-browser-backward-paragraph | 
Use to navigate paragraph backward.                     |
+
+The following keybindings are recommended to support consistent behavior 
between ~Man-mode~ and ~casual-man-tmenu~.
+
+#+begin_src elisp :lexical no
+  (keymap-set Man-mode-map "n" #'casual-lib-browse-forward-paragraph)
+  (keymap-set Man-mode-map "p" #'casual-lib-browse-backward-paragraph)
+  (keymap-set Man-mode-map "[" #'Man-previous-section)
+  (keymap-set Man-mode-map "]" #'Man-next-section)
+  (keymap-set Man-mode-map "j" #'next-line)
+  (keymap-set Man-mode-map "k" #'previous-line)
+  (keymap-set Man-mode-map "o" #'casual-man-occur-options)
+#+end_src
+
+#+TEXINFO: @unnumberedsec Usage
+#+CINDEX: Man Usage
+
+#+TEXINFO: @unnumberedsubsec Basic Usage
+
+The Man page reader can be invoked via ~M-x man~, where the user is prompted 
for a search key. This search key is typically the name of a command that has 
an associated Man page. In the Man page window, pressing ~C-o~ (or your binding 
of preference) will raise the menu ~casual-man-tmenu~.
+
+The following sections are offered in the menu:
+
+- Navigation :: Navigation commands with the document.
+- Paragraph :: Navigation commands by paragraph.
+- Section :: Navigation commands by section.
+- Link :: Jump to other Man pages referenced in the current Man page.
+- Page :: If the Man page reader is configured to display all manual pages for 
a given search key, navigation commands for multiple pages is provided.
+
+#+TEXINFO: @unnumberedsubsec Options Navigation
+
+~casual-man-tmenu~ provides the menu item ‘o’ which runs the command 
~casual-man-occur-options~. This will invoke ~occur~ with a regexp that 
searches for command line options (for example, "--foo", "-a") that can be 
navigated via the ~occur~ interface.
+
+#+TEXINFO: @unnumberedsubsec Settings
+
+By default, the Man page reader will /not/ display all manual pages for given 
search key. This can be changed in the Settings menu 
~casual-man-settings-tmenu~ that can be invoked by pressing ‘,’ in 
~casual-man-tmenu~. 
+
+Press ‘s’ and configure ~Man-switches~ to have the value "-a" to get all 
manual pages.
 
 ** RE-Builder
 #+CINDEX: RE-Builder
diff --git a/docs/dired.org b/docs/dired.org
index 5c6116b668..42c9d30265 100644
--- a/docs/dired.org
+++ b/docs/dired.org
@@ -147,15 +147,5 @@ If you enjoy using Casual Dired, consider making a modest 
financial contribution
 
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
-
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/editkit.org b/docs/editkit.org
index 7c24d640e7..d6828a3717 100644
--- a/docs/editkit.org
+++ b/docs/editkit.org
@@ -206,14 +206,4 @@ If you enjoy using Casual EditKit, consider making a 
modest financial contributi
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Org Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
-  
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/help.org b/docs/help.org
new file mode 100644
index 0000000000..e17935d555
--- /dev/null
+++ b/docs/help.org
@@ -0,0 +1,66 @@
+[[../README.org][❮ Back to Casual]]
+
+* Casual Help
+
+Casual Help is a user interface for ~help-mode~, a major mode for viewing help 
text and navigating references in it.
+
+[[file:images/casual-help-screenshot.png]]
+
+* Install
+
+In your initialization file, bind the Transient ~casual-help-tmenu~ to your 
key binding of preference.
+
+#+begin_src elisp :lexical no
+  (require 'casual-help) ; optional
+  (keymap-set help-mode-map "C-o" #'casual-help-tmenu)
+#+end_src
+
+~casual-help-tmenu~ deviates from the default bindings of ~help-mode-map~ as 
shown in the table below.
+
+| Default Binding | Casual Binding | Command                               | 
Notes                                      |
+|-----------------+----------------+---------------------------------------+--------------------------------------------|
+| l               | M-[            | help-go-back                          | 
Make consistent with Casual Info behavior. |
+| r               | M-]            | help-go-forward                       | 
Make consistent with Casual Info behavior. |
+| n               | N              | help-goto-next-page                   | 
Use to navigate to next page.              |
+| p               | P              | help-goto-previous-page               | 
Use to navigate to previous page.          |
+|                 | n              | casual-lib-browser-forward-paragraph  | 
Use to navigate paragraph forward.         |
+|                 | p              | casual-lib-browser-backward-paragraph | 
Use to navigate paragraph backward.        |
+
+The following keybindings are recommended to support consistent behavior 
between ~help-mode~ and ~casual-help-tmenu~.
+
+#+begin_src elisp :lexical no
+  (keymap-set help-mode-map "M-[" #'help-go-back)
+  (keymap-set help-mode-map "M-]" #'help-go-forward)
+  (keymap-set help-mode-map "p" #'casual-lib-browse-backward-paragraph)
+  (keymap-set help-mode-map "n" #'casual-lib-browse-forward-paragraph)
+  (keymap-set help-mode-map "P" #'help-goto-previous-page)
+  (keymap-set help-mode-map "N" #'help-goto-next-page)
+  (keymap-set help-mode-map "j" #'forward-button)
+  (keymap-set help-mode-map "k" #'backward-button)
+#+end_src
+
+* Usage
+
+** Basic Usage
+
+After invoking help via a ~describe-~ command, invoke ~casual-help-tmenu~ 
using the binding ~C-o~ (or your binding of preference).
+
+The following sections are offered in the menu:
+
+- Navigation :: Navigation commands with the document.
+- History :: Navigate history of help invocations.
+- Link :: Navigate to different references in the help buffer.
+- Describe :: Get help for different Elisp types.
+- Info :: If available, then open this help topic in [[file:info.org][Info]].
+- Source :: Show the Elisp source. If the help displayed is for a customizable 
variable, then show a customize menu item.
+  
+*** Unicode Symbol Support
+By enabling “Use Unicode Symbols” from the Settings menu, Casual Man will use 
Unicode symbols as appropriate in its menus.
+
+* Sponsorship
+If you enjoy using Casual Man, consider making a modest financial contribution 
to help support its development and maintenance.
+
+[[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
+
+* See Also
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/ibuffer.org b/docs/ibuffer.org
index 0420f57e64..7ad7e2895d 100644
--- a/docs/ibuffer.org
+++ b/docs/ibuffer.org
@@ -160,16 +160,4 @@ If you enjoy using Casual IBuffer, consider making a 
modest financial contributi
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
-
-* Acknowledgments
-A heartfelt thanks to all the contributors to IBuffer and 
[[https://github.com/magit/transient][Transient]]. Casual IBuffer would not be 
possible without your efforts.
-
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/image.org b/docs/image.org
index dde966e8de..8d0da8fc6a 100644
--- a/docs/image.org
+++ b/docs/image.org
@@ -74,15 +74,4 @@ If you enjoy using Casual Image, consider making a modest 
financial contribution
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
-
-
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/images/casual-calc-tmenu.png 
b/docs/images/casual-calc-tmenu.png
index ae37bd28f9..c7df77b654 100644
Binary files a/docs/images/casual-calc-tmenu.png and 
b/docs/images/casual-calc-tmenu.png differ
diff --git a/docs/images/casual-help-screenshot.png 
b/docs/images/casual-help-screenshot.png
new file mode 100644
index 0000000000..9b79e3cee6
Binary files /dev/null and b/docs/images/casual-help-screenshot.png differ
diff --git a/docs/images/casual-man-screenshot.png 
b/docs/images/casual-man-screenshot.png
new file mode 100644
index 0000000000..735e77b71d
Binary files /dev/null and b/docs/images/casual-man-screenshot.png differ
diff --git a/docs/images/casual-man-settings.png 
b/docs/images/casual-man-settings.png
new file mode 100644
index 0000000000..82f48d4246
Binary files /dev/null and b/docs/images/casual-man-settings.png differ
diff --git a/docs/info.org b/docs/info.org
index 9fb5848745..feb4d9d74f 100644
--- a/docs/info.org
+++ b/docs/info.org
@@ -52,13 +52,4 @@ If you enjoy using Casual Info, consider making a modest 
financial contribution
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][Re-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/isearch.org b/docs/isearch.org
index 7eca14192f..35cac6d66e 100644
--- a/docs/isearch.org
+++ b/docs/isearch.org
@@ -61,13 +61,4 @@ If you enjoy using Casual I-Search, consider making a modest 
financial contribut
 
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:re-builder.org][Re-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/make-mode.org b/docs/make-mode.org
index 8c9227968a..961481af3b 100644
--- a/docs/make-mode.org
+++ b/docs/make-mode.org
@@ -63,14 +63,4 @@ If you enjoy using Casual Make, consider making a modest 
financial contribution
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][RE-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/man.org b/docs/man.org
new file mode 100644
index 0000000000..764963f1a3
--- /dev/null
+++ b/docs/man.org
@@ -0,0 +1,80 @@
+[[../README.org][❮ Back to Casual]]
+
+* Casual Man
+
+Casual Man is a user interface for ~Man-mode~, a Man page reader.
+
+[[file:images/casual-man-screenshot.png]]
+
+* Install
+
+In your initialization file, bind the Transient ~casual-man-tmenu~ to your key 
binding of preference.
+
+#+begin_src elisp :lexical no
+  (require 'casual-man) ; optional
+  (keymap-set Man-mode-map "C-o" #'casual-man-tmenu)
+#+end_src
+
+~casual-man-tmenu~ deviates from the default bindings of ~Man-mode-map~ as 
shown in the table below.
+
+| Default Binding | Casual Binding | Command                               | 
Notes                                                   |
+|-----------------+----------------+---------------------------------------+---------------------------------------------------------|
+| n               | [              | Man-previous-section                  | 
Make consistent with Casual Dired and IBuffer behavior. |
+| p               | ]              | Man-next-section                      | 
Make consistent with Casual Dired and IBuffer behavior. |
+| k               | K              | Man-kill                              | 
Reserve k for navigation.                               |
+|                 | k              | previous-line                         |   
                                                      |
+|                 | j              | next-line                             |   
                                                      |
+|                 | n              | casual-lib-browser-forward-paragraph  | 
Use to navigate paragraph forward.                      |
+|                 | p              | casual-lib-browser-backward-paragraph | 
Use to navigate paragraph backward.                     |
+
+The following keybindings are recommended to support consistent behavior 
between ~Man-mode~ and ~casual-man-tmenu~.
+
+#+begin_src elisp :lexical no
+  (keymap-set Man-mode-map "n" #'casual-lib-browse-forward-paragraph)
+  (keymap-set Man-mode-map "p" #'casual-lib-browse-backward-paragraph)
+  (keymap-set Man-mode-map "[" #'Man-previous-section)
+  (keymap-set Man-mode-map "]" #'Man-next-section)
+  (keymap-set Man-mode-map "j" #'next-line)
+  (keymap-set Man-mode-map "k" #'previous-line)
+  (keymap-set Man-mode-map "K" #'Man-kill)
+  (keymap-set Man-mode-map "o" #'casual-man-occur-options)
+#+end_src
+
+* Usage
+
+** Basic Usage
+
+The Man page reader can be invoked via ~M-x man~, where the user is prompted 
for a search key. This search key is typically the name of a command that has 
an associated Man page. In the Man page window, pressing ~C-o~ (or your binding 
of preference) will raise the menu ~casual-man-tmenu~.
+
+The following sections are offered in the menu:
+
+- Navigation :: Navigation commands with the document.
+- Paragraph :: Navigation commands by paragraph.
+- Section :: Navigation commands by section.
+- Link :: Jump to other Man pages referenced in the current Man page.
+- Page :: If the Man page reader is configured to display all manual pages for 
a given search key, navigation commands for multiple pages is provided.
+
+*** Options Navigation
+
+~casual-man-tmenu~ provides the menu item ‘o’ which runs the command 
~casual-man-occur-options~. This will invoke ~occur~ with a regexp that 
searches for command line options (for example, "--foo", "-a") that can be 
navigated via the ~occur~ interface.
+
+*** Settings
+
+By default, the Man page reader will /not/ display all manual pages for given 
search key. This can be changed in the Settings menu 
~casual-man-settings-tmenu~ that can be invoked by pressing ‘,’ in 
~casual-man-tmenu~. 
+
+Press ‘s’ and configure ~Man-switches~ to have the value "-a" to get all 
manual pages.
+
+  
+[[file:images/casual-man-settings.png]]
+
+
+*** Unicode Symbol Support
+By enabling “Use Unicode Symbols” from the Settings menu, Casual Man will use 
Unicode symbols as appropriate in its menus.
+
+* Sponsorship
+If you enjoy using Casual Man, consider making a modest financial contribution 
to help support its development and maintenance.
+
+[[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
+
+* See Also
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/re-builder.org b/docs/re-builder.org
index 441b618a3b..2cc7cfcf99 100644
--- a/docs/re-builder.org
+++ b/docs/re-builder.org
@@ -59,13 +59,4 @@ If you enjoy using Casual RE-Builder, consider making a 
modest financial contrib
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/docs/timezone.org b/docs/timezone.org
index 10bf07d1db..73e196cbe5 100644
--- a/docs/timezone.org
+++ b/docs/timezone.org
@@ -38,14 +38,4 @@ If you enjoy using Casual Timezone, consider making a modest 
financial contribut
 [[https://www.buymeacoffee.com/kickingvegas][file:images/default-yellow.png]]
 
 * See Also
-- [[file:agenda.org][Agenda]]
-- [[file:bookmarks.org][Bookmarks]]
-- [[file:calc.org][Calc]]
-- [[file:calendar.org][Calendar]]
-- [[file:dired.org][Dired]]
-- [[file:editkit.org][EditKit (numerous editing commands)]]
-- [[file:ibuffer.org][IBuffer]]
-- [[file:image.org][Image]]
-- [[file:info.org][Info]]
-- [[file:isearch.org][I-Search]]
-- [[file:re-builder.org][RE-Builder]]
+[[file:agenda.org][Agenda]], [[file:bookmarks.org][Bookmarks]], 
[[file:calc.org][Calc]], [[file:calendar.org][Calendar]], 
[[file:dired.org][Dired]], [[file:editkit.org][EditKit (numerous editing 
commands)]], [[file:help.org][Help]], [[file:ibuffer.org][IBuffer]], 
[[file:image.org][Image]], [[file:info.org][Info]], 
[[file:isearch.org][I-Search]], [[file:make-mode.org][Make]], 
[[file:man.org][Man]], [[file:re-builder.org][RE-Builder]], 
[[file:timezone.org][Timezone]]
diff --git a/lisp/Makefile b/lisp/Makefile
index 3eb825b835..67aee24056 100644
--- a/lisp/Makefile
+++ b/lisp/Makefile
@@ -25,10 +25,12 @@ calc-tests                                  \
 calendar-tests                                 \
 dired-tests                                    \
 editkit-tests                                  \
+help-tests                                     \
 ibuffer-tests                                  \
 info-tests                                     \
 isearch-tests                                  \
 make-mode-tests                                        \
+man-tests                                      \
 re-builder-tests                               \
 timezone-tests
 
@@ -60,6 +62,10 @@ dired-tests:
 editkit-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-editkit.make tests
 
+.PHONY: help-tests
+help-tests:
+       $(MAKE) -C $(SRC_DIR) -f Makefile-help.make tests
+
 .PHONY: image-tests
 image-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-image.make tests
@@ -80,6 +86,10 @@ isearch-tests:
 make-mode-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-make-mode.make tests
 
+.PHONY: man-tests
+man-tests:
+       $(MAKE) -C $(SRC_DIR) -f Makefile-man.make tests
+
 .PHONY: re-builder-tests
 re-builder-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-re-builder.make tests
diff --git a/lisp/Makefile-help.make b/lisp/Makefile-help.make
new file mode 100644
index 0000000000..ae3368698c
--- /dev/null
+++ b/lisp/Makefile-help.make
@@ -0,0 +1,30 @@
+##
+# Copyright (C) 2025 Charles Y. Choi
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+include Makefile--defines.make
+
+PACKAGE_NAME=casual-help
+ELISP_INCLUDES=casual-help-utils.el            \
+casual-help-settings.el
+ELISP_PACKAGES=
+ELISP_TEST_INCLUDES=casual-help-test-utils.el
+PACKAGE_PATHS=                                 \
+-L $(EMACS_ELPA_DIR)/compat-current            \
+-L $(EMACS_ELPA_DIR)/seq-current               \
+-L $(EMACS_ELPA_DIR)/transient-current         \
+-L $(CASUAL_LIB_LISP_DIR)
+
+include Makefile--rules.make
diff --git a/lisp/Makefile-man.make b/lisp/Makefile-man.make
new file mode 100644
index 0000000000..76dd12ead4
--- /dev/null
+++ b/lisp/Makefile-man.make
@@ -0,0 +1,30 @@
+##
+# Copyright (C) 2025 Charles Y. Choi
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+include Makefile--defines.make
+
+PACKAGE_NAME=casual-man
+ELISP_INCLUDES=casual-man-utils.el     \
+casual-man-settings.el
+ELISP_PACKAGES=
+ELISP_TEST_INCLUDES=casual-man-test-utils.el
+PACKAGE_PATHS=                                 \
+-L $(EMACS_ELPA_DIR)/compat-current            \
+-L $(EMACS_ELPA_DIR)/seq-current               \
+-L $(EMACS_ELPA_DIR)/transient-current         \
+-L $(CASUAL_LIB_LISP_DIR)
+
+include Makefile--rules.make
diff --git a/lisp/casual-calc-utils.el b/lisp/casual-calc-utils.el
index 4eef9ff4c3..7fc4376894 100644
--- a/lisp/casual-calc-utils.el
+++ b/lisp/casual-calc-utils.el
@@ -144,7 +144,8 @@ Invokes command `calc-roll-down'."
     ("+" "add" casual-calc--plus :transient t)
     ("-" "sub" casual-calc--minus :transient t)
     ("*" "mul" casual-calc--times :transient t)
-    ("/" "div" casual-calc--divide :transient t)])
+    ("/" "div" casual-calc--divide :transient t)
+    ("M" "mod" casual-calc--mod :transient t)])
 
 (transient-define-group casual-calc-navigation-group
   [:class transient-row
diff --git a/lisp/casual-help-settings.el b/lisp/casual-help-settings.el
new file mode 100644
index 0000000000..752b79b8d5
--- /dev/null
+++ b/lisp/casual-help-settings.el
@@ -0,0 +1,97 @@
+;;; casual-help-settings.el --- Casual Help Settings -*- lexical-binding: t; 
-*-
+
+;; Copyright (C) 2025 Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+
+;;; Code:
+(require 'help-mode)
+(require 'casual-lib)
+
+(transient-define-prefix casual-help-settings-tmenu ()
+  "Casual Help settings menu."
+  ["Casual Help: Settings"
+
+   [("G" "Help Group" casual-help--customize-group)
+    (casual-lib-customize-unicode)
+    (casual-lib-customize-hide-navigation)]]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("a" "About" casual-help-about :transient nil)
+   (casual-lib-quit-all)])
+
+(defun casual-help--customize-group ()
+  "Customize Helpfile group."
+  (interactive)
+  (customize-group "help"))
+
+;; (defun casual-help--customize-man-switches ()
+;;   "Switch values passed to the man command, as a single string.
+
+;; Customize `Help-switches'."
+;;   (interactive)
+;;   (customize-variable 'Help-switches))
+
+;; (defun casual-help--customize-man-prefer-synchronous-call ()
+;;   "Whether to call the Un*x \"man\" program synchronously.
+
+;; Customize `Help-prefer-synchronous-call'."
+;;   (interactive)
+;;   (customize-variable 'Help-prefer-synchronous-call))
+
+;; (defun casual-help--customize-man-support-remote-systems ()
+;;   "Whether to call the Un*x \"man\" program on remote systems.
+
+;; Customize `Help-support-remote-systems'."
+;;   (interactive)
+;;   (customize-variable 'Help-support-remote-systems))
+
+
+(defun casual-help-about-man ()
+  "Casual Help is a Transient menu for `help-mode'.
+
+Learn more about using Casual Help at our discussion group on GitHub.
+Any questions or comments about it should be made there.
+URL `https://github.com/kickingvegas/casual/discussions'
+
+If you find a bug or have an enhancement request, please file an issue.
+Our best effort will be made to answer it.
+URL `https://github.com/kickingvegas/casual/issues'
+
+If you enjoy using Casual Help, consider making a modest financial
+contribution to help support its development and maintenance.
+URL `https://www.buymeacoffee.com/kickingvegas'
+
+Casual Help was conceived and crafted by Charles Choi in San Francisco,
+California.
+
+Thank you for using Casual Help.
+
+Always choose love."
+  (ignore))
+
+(defun casual-help-about ()
+  "About information for Casual Help."
+  (interactive)
+  (describe-function #'casual-help-about-man))
+
+(provide 'casual-help-settings)
+;;; casual-help-settings.el ends here
diff --git a/lisp/casual-help-utils.el b/lisp/casual-help-utils.el
new file mode 100644
index 0000000000..a829c4c541
--- /dev/null
+++ b/lisp/casual-help-utils.el
@@ -0,0 +1,67 @@
+;;; casual-help-utils.el --- Casual Help Utils -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025 Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+
+;;; Code:
+(require 'help-mode)
+(require 'casual-lib)
+
+(defconst casual-help-unicode-db
+  '((:previous . '("↑" "Previous"))
+    (:next . '("↓" "Next"))
+    (:forward . '("→" "Forward"))
+    (:backward . '("←" "Backward"))
+    (:goto . '("→" "Goto…"))
+    (:link . '("🔗" "Link"))
+    (:beginning-of-buffer . '("⇱" "Beginning"))
+    (:end-of-buffer . '("⇲" "End"))
+    (:paragraph . '("¶" "Paragraph"))
+    (:page . '("📄" "Page")))
+
+  "Unicode symbol DB to use for Help Transient menus.")
+
+(defun casual-help-unicode-get (key)
+  "Lookup Unicode symbol for KEY in DB.
+
+- KEY symbol used to lookup Unicode symbol in DB.
+
+If the value of customizable variable `casual-lib-use-unicode'
+is non-nil, then the Unicode symbol is returned, otherwise a
+plain ASCII-range string."
+  (casual-lib-unicode-db-get key casual-help-unicode-db))
+
+
+(defun casual-help-info ()
+  "Open Info for Emacs Help Mode."
+  (interactive) (info "(emacs) Help Mode"))
+
+(defun casual-help--current-data-p ()
+  "Predicate if help mode current data exists."
+  help-mode--current-data)
+
+(defun casual-help--symbolp ()
+  "Predicate if current help mode has a symbol."
+  (let ((sym (plist-get help-mode--current-data :symbol)))
+    (or (boundp sym) (facep sym))))
+
+(provide 'casual-help-utils)
+;;; casual-help-utils.el ends here
diff --git a/lisp/casual-help.el b/lisp/casual-help.el
new file mode 100644
index 0000000000..a5afa01017
--- /dev/null
+++ b/lisp/casual-help.el
@@ -0,0 +1,135 @@
+;;; casual-help.el --- Transient UI for Help -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library provides a Transient-based user interface for `help-mode'.
+
+;; INSTALLATION
+
+;; In your initialization file, bind the Transient `casual-help-tmenu' to your
+;; key binding of preference.
+
+;; (require 'casual-help) ; optional if using autoloaded menu
+;; (keymap-set help-mode-map "C-o" #'casual-help-tmenu)
+
+;; The following keybindings are recommended to support consistent behavior
+;; between `help-mode' and `casual-help-tmenu'.
+
+;; (keymap-set help-mode-map "M-[" #'help-go-back)
+;; (keymap-set help-mode-map "M-]" #'help-go-forward)
+;; (keymap-set help-mode-map "p" #'casual-lib-browse-backward-paragraph)
+;; (keymap-set help-mode-map "n" #'casual-lib-browse-forward-paragraph)
+;; (keymap-set help-mode-map "P" #'help-goto-previous-page)
+;; (keymap-set help-mode-map "N" #'help-goto-next-page)
+;; (keymap-set help-mode-map "j" #'forward-button)
+;; (keymap-set help-mode-map "k" #'backward-button)
+
+;;; Code:
+(require 'bookmark)
+(require 'button)
+(require 'casual-help-settings)
+(require 'casual-help-utils)
+
+;;;###autoload (autoload 'casual-help-tmenu "casual-help" nil t)
+(transient-define-prefix casual-help-tmenu ()
+  "Casual Help main menu."
+  :refresh-suffixes t
+  ["Casual Help"
+   ["Navigation"
+    :pad-keys t
+    ("C-p" "Previous" previous-line
+     :description (lambda () (casual-help-unicode-get :previous))
+     :transient t)
+    ("C-n" "Next" next-line
+     :description (lambda () (casual-help-unicode-get :next))
+     :transient t)
+    ("<" "Beginning" beginning-of-buffer
+     :description (lambda () (casual-help-unicode-get :beginning-of-buffer))
+     :transient t)
+    (">" "End" end-of-buffer
+     :description (lambda () (casual-help-unicode-get :end-of-buffer))
+     :transient t)]
+
+   [""
+    ("p" "Backward" casual-lib-browse-backward-paragraph
+     :description (lambda () (format "%s %s"
+                                     (casual-help-unicode-get :previous)
+                                     (casual-help-unicode-get :paragraph)))
+     :transient t)
+    ("n" "Forward" casual-lib-browse-forward-paragraph
+     :description (lambda () (format "%s %s"
+                                     (casual-help-unicode-get :next)
+                                     (casual-help-unicode-get :paragraph)))
+     :transient t)
+    ("P" "Backward" help-goto-previous-page
+     :description (lambda () (format "%s %s"
+                                     (casual-help-unicode-get :previous)
+                                     (casual-help-unicode-get :page)))
+     :transient t)
+    ("N" "Forward" help-goto-next-page
+     :description (lambda () (format "%s %s"
+                                     (casual-help-unicode-get :next)
+                                     (casual-help-unicode-get :page)))
+     :transient t)]
+
+   ["History"
+    ("M-[" "Previous" help-go-back
+     :description (lambda () (casual-help-unicode-get :previous))
+     :transient t)
+    ("M-]" "Next" help-go-forward
+     :description (lambda () (casual-help-unicode-get :next))
+     :transient t)]
+
+   ["Link"
+    :pad-keys t
+    ("j" "Forward" forward-button
+     :description (lambda () (casual-help-unicode-get :forward))
+     :transient t)
+    ("k" "Backward" backward-button
+     :description (lambda () (casual-help-unicode-get :backward))
+     :transient t)
+    ("RET" "Open" push-button)]]
+
+  [["Describe"
+    ("ds" "Symbol…" describe-symbol)
+    ("dv" "Variable…" describe-variable)]
+   [""
+    ("dc" "Command…" describe-command)
+    ("df" "Function…" describe-function)]
+
+   ["Info"
+    :if casual-help--current-data-p
+    ("i" "Goto" help-goto-info)
+    ("I" "Elisp" help-goto-lispref-info)]
+
+   ["Source"
+    ("s" "Source" help-view-source)
+    ("c" "Customize" help-customize
+     :if casual-help--symbolp)]]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("," "Settings" casual-help-settings-tmenu)
+   ("q" "Quit" quit-window)
+   (casual-lib-quit-all)])
+
+(provide 'casual-help)
+;;; casual-help.el ends here
diff --git a/lisp/casual-info-settings.el b/lisp/casual-info-settings.el
index a742cfc0a7..7ddcc44669 100644
--- a/lisp/casual-info-settings.el
+++ b/lisp/casual-info-settings.el
@@ -33,52 +33,67 @@
 ;;; Menus
 (transient-define-prefix casual-info-settings-tmenu ()
   ["Customize Info"
-   ("A" "Additional directories list"
-    casual-info--customize-info-additional-directory-list)
-   ("i" "I-search multiple nodes"
-    casual-info--customize-info-isearch-search
-    :description (lambda ()
-                   (casual-lib-checkbox-label
-                    Info-isearch-search
-                    "I-search through multiple nodes")))
+   [("h" "Hide note references"
+     casual-info--customize-info-hide-note-references)
+    ("A" "Additional directories list"
+     casual-info--customize-info-additional-directory-list)
+
+    ("G" "Info Group"
+     casual-info--customize-info-group)
+    ]
+
+   [("i" "I-search multiple nodes"
+     casual-info--customize-info-isearch-search
+     :description (lambda ()
+                    (casual-lib-checkbox-label
+                     Info-isearch-search
+                     "I-search through multiple nodes")))
+    ("c" "Prefer subnodes when scrolling"
+     casual-info--customize-info-scroll-prefer-subnodes
+     :description (lambda ()
+                    (casual-lib-checkbox-label
+                     Info-scroll-prefer-subnodes
+                     "Prefer subnodes when scrolling")))]]
+
+  [:class transient-row
    (casual-lib-customize-unicode)
-   ("c" "Prefer subnodes when scrolling"
-    casual-info--customize-info-scroll-prefer-subnodes
-    :description (lambda ()
-                   (casual-lib-checkbox-label
-                    Info-scroll-prefer-subnodes
-                    "Prefer subnodes when scrolling")))
    (casual-lib-customize-hide-navigation)]
 
   [:class transient-row
-          (casual-lib-quit-one)
-          ("a" "About" casual-info-about :transient nil)
-
-          (casual-lib-quit-all)])
+   (casual-lib-quit-one)
+   ("a" "About" casual-info-about :transient nil)
+   (casual-lib-quit-all)])
 
 ;;; Functions
 (defun casual-info--customize-info-isearch-search ()
-  "Customize variable `Info-isearch-search'.
+  "If non-nil, isearch through multiple nodes.
 
-If non-nil, isearch in Info searches through multiple nodes."
+Customize variable `Info-isearch-search'."
   (interactive)
   (customize-variable 'Info-isearch-search))
 
 (defun casual-info--customize-info-additional-directory-list ()
-  "Customize variable `Info-additional-directory-list'.
+  "List of additional directories to search for Info documentation files.
 
-List of additional directories to search for Info documentation files.
+Customize variable `Info-additional-directory-list'.
 These directories are searched after those in `Info-directory-list'."
   (interactive)
   (customize-variable 'Info-additional-directory-list))
 
 (defun casual-info--customize-info-scroll-prefer-subnodes ()
-  "Customize variable `Info-scroll-prefer-subnodes'.
+  "If non-nil, \\<Info-mode-map>\\[Info-scroll-up] in a menu visits subnodes.
 
-If non-nil, \\<Info-mode-map>\\[Info-scroll-up] in a menu visits subnodes."
+Customize variable `Info-scroll-prefer-subnodes'."
   (interactive)
   (customize-variable 'Info-scroll-prefer-subnodes))
 
+(defun casual-info--customize-info-hide-note-references ()
+  "If non-nil, hide the tag and section reference in *note and * menu items.
+
+Customize variable `Info-hide-note-references'."
+  (interactive)
+  (customize-variable 'Info-hide-note-references))
+
 (defun casual-info--customize-info-group ()
   "Call the Info customization group.
 
diff --git a/lisp/casual-info-utils.el b/lisp/casual-info-utils.el
index f43c58e17f..30c87177ce 100644
--- a/lisp/casual-info-utils.el
+++ b/lisp/casual-info-utils.el
@@ -62,6 +62,10 @@ plain ASCII-range string."
   (backward-paragraph 2)
   (forward-line))
 
+(make-obsolete #'casual-info-browse-backward-paragraph
+               #'casual-lib-browse-backward-paragraph
+               "2.6.0")
+
 (defun casual-info-browse-forward-paragraph ()
   "Move point forward paragraph such that the first line is highlighted.
 \nThis function is intended to be used with `hl-line-mode'."
@@ -69,5 +73,9 @@ plain ASCII-range string."
   (forward-paragraph)
   (forward-line))
 
+(make-obsolete #'casual-info-browse-forward-paragraph
+               #'casual-lib-browse-forward-paragraph
+               "2.6.0")
+
 (provide 'casual-info-utils)
 ;;; casual-info-utils.el ends here
diff --git a/lisp/casual-info.el b/lisp/casual-info.el
index 4a81ed2c1e..130a76cbc9 100644
--- a/lisp/casual-info.el
+++ b/lisp/casual-info.el
@@ -107,10 +107,10 @@
 
    ["Paragraph"
     :description (lambda () (casual-info-unicode-get :paragraph))
-    ("p" "Previous" casual-info-browse-backward-paragraph
+    ("p" "Previous" casual-lib-browse-backward-paragraph
      :description (lambda () (casual-info-unicode-get :up-arrow))
      :transient t)
-    ("n" "Next" casual-info-browse-forward-paragraph
+    ("n" "Next" casual-lib-browse-forward-paragraph
      :description (lambda () (casual-info-unicode-get :down-arrow))
      :transient t)]
 
diff --git a/lisp/casual-isearch-settings.el b/lisp/casual-isearch-settings.el
index cbe36a692e..341a9ce22e 100644
--- a/lisp/casual-isearch-settings.el
+++ b/lisp/casual-isearch-settings.el
@@ -28,23 +28,65 @@
 
 (transient-define-prefix casual-isearch-settings-tmenu ()
   "Casual I-Search settings menu."
+  :refresh-suffixes t
   ["I-Search: Settings"
-   ["Customize"
-    ("G" "I-Search Group" casual-isearch--customize-group)
-    (casual-lib-customize-unicode)
-    (casual-lib-customize-hide-navigation)]]
+    ["Allow"
+     ("s" "Scroll" casual-isearch--customize-allow-scroll)
+     ("m" "Motion" casual-isearch--customize-allow-motion
+      :description (lambda ()
+                     (casual-lib-checkbox-label isearch-allow-motion 
"Motion")))]
+
+    ["Lazy"
+     ("h" "Highlight" casual-isearch--customize-lazy-highlight)
+     ("c" "Count" casual-isearch--customize-lazy-count
+      :description (lambda ()
+                     (casual-lib-checkbox-label isearch-lazy-count "Count")))]
+
+    ["Misc"
+     ("G" "Group" casual-isearch--customize-group)]]
 
   [:class transient-row
-          (casual-lib-quit-one)
-          ("a" "About" casual-isearch-about :transient nil)
+   (casual-lib-customize-unicode)
+   (casual-lib-customize-hide-navigation)]
 
-          (casual-lib-quit-all)])
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("a" "About" casual-isearch-about :transient nil)
+   (casual-lib-quit-all)])
 
 (defun casual-isearch--customize-group ()
   "Customize I-Search group."
   (interactive)
   (customize-group "isearch"))
 
+(defun casual-isearch--customize-allow-scroll ()
+  "Whether scrolling is allowed during incremental search.
+
+Customizes variable `isearch-allow-scroll'."
+  (interactive)
+  (customize-variable 'isearch-allow-scroll))
+
+(defun casual-isearch--customize-allow-motion ()
+  "Whether to allow movement between isearch matches by cursor motion commands.
+
+Customizes variable `isearch-allow-motion'."
+  (interactive)
+  (customize-variable 'isearch-allow-motion))
+
+(defun casual-isearch--customize-lazy-count ()
+  "Show match numbers in the search prompt.
+
+Customizes variable `isearch-lazy-count'."
+  (interactive)
+  (customize-variable 'isearch-lazy-count))
+
+(defun casual-isearch--customize-lazy-highlight ()
+  "Controls the lazy-highlighting during incremental search.
+
+Customizes variable `isearch-lazy-highlight'."
+  (interactive)
+  (customize-variable 'isearch-lazy-highlight))
+
 (defun casual-isearch-about-isearch ()
   "Casual I-Search is a Transient menu for I-Search.
 
diff --git a/lisp/casual-lib.el b/lisp/casual-lib.el
index 071f0c1622..7efb4d8017 100644
--- a/lisp/casual-lib.el
+++ b/lisp/casual-lib.el
@@ -69,7 +69,7 @@ when appropriate."
 - KEY symbol used to lookup Unicode symbol in DB.
 - DB alist containing Unicode symbol map.
 
-If the value of customizable variable `casual-lib-use-unicode'
+ the value of customizable variable `casual-lib-use-unicode'
 is non-nil, then the Unicode symbol is returned, otherwise a
 plain ASCII-range string."
   (let* ((db db)
@@ -130,6 +130,20 @@ V is either nil or non-nil."
       "‹Back"
     "Dismiss"))
 
+(defun casual-lib-browse-backward-paragraph ()
+  "Move point backward paragraph such that the first line is highlighted.
+\nThis function is intended to be used with `hl-line-mode'."
+  (interactive)
+  (backward-paragraph 2)
+  (forward-line))
+
+(defun casual-lib-browse-forward-paragraph ()
+  "Move point forward paragraph such that the first line is highlighted.
+\nThis function is intended to be used with `hl-line-mode'."
+  (interactive)
+  (forward-paragraph)
+  (forward-line))
+
 ;; Transients
 (transient-define-suffix casual-lib-quit-all ()
   "Casual suffix to call `transient-quit-all'."
diff --git a/lisp/casual-man-settings.el b/lisp/casual-man-settings.el
new file mode 100644
index 0000000000..8a050e50ea
--- /dev/null
+++ b/lisp/casual-man-settings.el
@@ -0,0 +1,100 @@
+;;; casual-man-settings.el --- Casual Man Settings -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025 Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+
+;;; Code:
+(require 'man)
+(require 'casual-lib)
+
+(transient-define-prefix casual-man-settings-tmenu ()
+  "Casual Man settings menu."
+  ["Casual Man: Settings"
+   [("s" "Switches" casual-man--customize-man-switches)
+    ("S" "Call Synchronously" 
casual-man--customize-man-prefer-synchronous-call)
+    ("r" "Support Remote" casual-man--customize-man-support-remote-systems)]
+
+   [("G" "Man Group" casual-man--customize-group)
+    (casual-lib-customize-unicode)
+    (casual-lib-customize-hide-navigation)]]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("a" "About" casual-man-about :transient nil)
+   (casual-lib-quit-all)])
+
+(defun casual-man--customize-group ()
+  "Customize Manfile group."
+  (interactive)
+  (customize-group "man"))
+
+(defun casual-man--customize-man-switches ()
+  "Switch values passed to the man command, as a single string.
+
+Customize `Man-switches'."
+  (interactive)
+  (customize-variable 'Man-switches))
+
+(defun casual-man--customize-man-prefer-synchronous-call ()
+  "Whether to call the Un*x \"man\" program synchronously.
+
+Customize `Man-prefer-synchronous-call'."
+  (interactive)
+  (customize-variable 'Man-prefer-synchronous-call))
+
+(defun casual-man--customize-man-support-remote-systems ()
+  "Whether to call the Un*x \"man\" program on remote systems.
+
+Customize `Man-support-remote-systems'."
+  (interactive)
+  (customize-variable 'Man-support-remote-systems))
+
+
+(defun casual-man-about-man ()
+  "Casual Man is a Transient menu for man pages.
+
+Learn more about using Casual Man at our discussion group on GitHub.
+Any questions or comments about it should be made there.
+URL `https://github.com/kickingvegas/casual/discussions'
+
+If you find a bug or have an enhancement request, please file an issue.
+Our best effort will be made to answer it.
+URL `https://github.com/kickingvegas/casual/issues'
+
+If you enjoy using Casual Man, consider making a modest financial
+contribution to help support its development and maintenance.
+URL `https://www.buymeacoffee.com/kickingvegas'
+
+Casual Man was conceived and crafted by Charles Choi in San Francisco,
+California.
+
+Thank you for using Casual Man.
+
+Always choose love."
+  (ignore))
+
+(defun casual-man-about ()
+  "About information for Casual Man."
+  (interactive)
+  (describe-function #'casual-man-about-man))
+
+(provide 'casual-man-settings)
+;;; casual-man-settings.el ends here
diff --git a/lisp/casual-man-utils.el b/lisp/casual-man-utils.el
new file mode 100644
index 0000000000..02b34eb4d7
--- /dev/null
+++ b/lisp/casual-man-utils.el
@@ -0,0 +1,62 @@
+;;; casual-man-utils.el --- Casual Man Utils -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025 Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+
+;;; Code:
+(require 'man)
+(require 'casual-lib)
+
+(defconst casual-man-unicode-db
+  '((:previous . '("↑" "Previous"))
+    (:next . '("↓" "Next"))
+    (:goto . '("→" "Goto…"))
+    (:follow . '("🔗…" "Follow…"))
+    (:beginning-of-buffer . '("⇱" "Beginning"))
+    (:end-of-buffer . '("⇲" "End"))
+    (:paragraph . '("¶" "Paragraph"))
+    (:update . '("⟳" "Update"))
+    (:kill . '("×" "Close"))
+    (:see-also . '("👀" "See Also")))
+
+  "Unicode symbol DB to use for Man Transient menus.")
+
+(defun casual-man-unicode-get (key)
+  "Lookup Unicode symbol for KEY in DB.
+
+- KEY symbol used to lookup Unicode symbol in DB.
+
+If the value of customizable variable `casual-lib-use-unicode'
+is non-nil, then the Unicode symbol is returned, otherwise a
+plain ASCII-range string."
+  (casual-lib-unicode-db-get key casual-man-unicode-db))
+
+(defun casual-man-occur-options ()
+  "Show options for current man page with occur."
+  (interactive)
+  (occur "^[[:blank:]]*[-+]+[[:alnum:]-=_]*"))
+
+(defun casual-man-info ()
+  "Open Info for Emacs Man Page."
+  (interactive) (info "(emacs) Man Page"))
+
+(provide 'casual-man-utils)
+;;; casual-man-utils.el ends here
diff --git a/lisp/casual-man.el b/lisp/casual-man.el
new file mode 100644
index 0000000000..c0bc651d94
--- /dev/null
+++ b/lisp/casual-man.el
@@ -0,0 +1,132 @@
+;;; casual-man.el --- Transient UI for Man -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This library provides a Transient-based user interface for `Man-mode'.
+
+;; INSTALLATION
+
+;; In your initialization file, bind the Transient `casual-man-tmenu' to your
+;; key binding of preference.
+
+;; (require 'casual-man) ; optional if using autoloaded menu
+;; (keymap-set Man-mode-map "C-o" #'casual-man-tmenu)
+
+;; `casual-man-tmenu' uses bindings that are consistent with Casual Dired and
+;; IBuffer by using "[" and "]" for section navigation.
+
+;; The following keybindings are recommended to support consistent behavior
+;; between `Man-mode' and `casual-man-tmenu'.
+
+;; (keymap-set Man-mode-map "n" #'casual-lib-browse-forward-paragraph)
+;; (keymap-set Man-mode-map "p" #'casual-lib-browse-backward-paragraph)
+;; (keymap-set Man-mode-map "[" #'Man-previous-section)
+;; (keymap-set Man-mode-map "]" #'Man-next-section)
+;; (keymap-set Man-mode-map "j" #'next-line)
+;; (keymap-set Man-mode-map "k" #'previous-line)
+;; (keymap-set Man-mode-map "K" #'Man-kill)
+;; (keymap-set Man-mode-map "o" #'casual-man-occur-options)
+
+;;; Code:
+(require 'bookmark)
+(require 'casual-man-settings)
+(require 'casual-man-utils)
+
+;;;###autoload (autoload 'casual-man-tmenu "casual-man" nil t)
+(transient-define-prefix casual-man-tmenu ()
+  "Casual Man page main menu."
+  ["Casual Man"
+   :description (lambda () (format "Casual Man: %s" Man-page-mode-string))
+   ["Navigation"
+    :pad-keys t
+    ("." "Beginning" beginning-of-buffer
+     :description (lambda () (casual-man-unicode-get :beginning-of-buffer))
+     :transient t)
+    (">" "End" end-of-buffer
+     :description (lambda () (casual-man-unicode-get :end-of-buffer))
+     :transient t)
+    ("C-p" "Previous" previous-line
+     :description (lambda () (casual-man-unicode-get :previous))
+     :transient t)
+    ("C-n" "Next" next-line
+     :description (lambda () (casual-man-unicode-get :next))
+     :transient t)
+    ("o" "Options" casual-man-occur-options)]
+
+   ["Paragraph"
+    :description (lambda () (casual-man-unicode-get :paragraph))
+    ("p" "Backward" casual-lib-browse-backward-paragraph
+     :description (lambda () (casual-man-unicode-get :previous))
+     :transient t)
+    ("n" "Forward" casual-lib-browse-forward-paragraph
+     :description (lambda () (casual-man-unicode-get :next))
+     :transient t)]
+
+   ["Section"
+    ("[" "Previous" Man-previous-section
+     :description (lambda () (casual-man-unicode-get :previous))
+     :transient t)
+    ("]" "Next" Man-next-section
+     :description (lambda () (casual-man-unicode-get :next))
+     :transient t)
+    ("g" "Goto…" Man-goto-section
+     :description (lambda () (casual-man-unicode-get :goto))
+     :transient t)
+    ("s" "See Also" Man-goto-see-also-section
+     :description (lambda () (casual-man-unicode-get :see-also))
+     :transient t)]
+
+   ["Link"
+    ("r" "Follow" Man-follow-manual-reference
+     :description (lambda () (casual-man-unicode-get :follow)))]
+
+   ["Page"
+    :pad-keys t
+    :if (lambda () (> (length Man-page-list) 1))
+    ("M-p" "Previous" Man-previous-manpage
+     :description (lambda () (casual-man-unicode-get :previous))
+     :transient t)
+    ("M-n" "Next" Man-next-manpage
+     :description (lambda () (casual-man-unicode-get :next))
+     :transient t)
+    ("j" "Goto…" Man-goto-page
+     :description (lambda () (casual-man-unicode-get :goto))
+     :transient t)]]
+
+  ["Bookmarks"
+   :class transient-row
+   ("B" "Add…" bookmark-set-no-overwrite)
+   ("J" "Jump…" bookmark-jump)]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("m" "Man…" man)
+   ("u" "Update" Man-update-manpage
+    :description (lambda () (casual-man-unicode-get :update)))
+   ("," "Settings" casual-man-settings-tmenu)
+   ("I" "ⓘ" casual-man-info)
+   ("K" "Close" Man-kill
+    :description (lambda () (casual-man-unicode-get :kill)))
+   ("q" "Quit" quit-window)
+   (casual-lib-quit-all)])
+
+(provide 'casual-man)
+;;; casual-man.el ends here
diff --git a/lisp/casual.el b/lisp/casual.el
index 47a9a72d9c..b377f40779 100644
--- a/lisp/casual.el
+++ b/lisp/casual.el
@@ -5,7 +5,7 @@
 ;; Author: Charles Choi <[email protected]>
 ;; URL: https://github.com/kickingvegas/casual
 ;; Keywords: tools, wp
-;; Version: 2.5.3
+;; Version: 2.5.4-rc.1
 ;; Package-Requires: ((emacs "29.1") (transient "0.9.0"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -78,6 +78,10 @@
 ;;   An interface to `make-mode'.
 ;;   URL: `https://github.com/kickingvegas/casual/blob/main/docs/make-mode.org'
 
+;; - Man (Elisp library: `casual-man')
+;;   An interface to `Man-mode'.
+;;   URL: `https://github.com/kickingvegas/casual/blob/main/docs/man.org'
+
 ;; - Re-Builder (Elisp library: `casual-re-builder')
 ;;   An interface for the Emacs regular expression tool.
 ;;   URL: 
`https://github.com/kickingvegas/casual/blob/main/docs/re-builder.org'
diff --git a/tests/Makefile b/tests/Makefile
index 5217e1d636..94e3b66a4e 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -24,11 +24,13 @@ calc-tests                                  \
 calendar-tests                                 \
 dired-tests                                    \
 editkit-tests                                  \
+help-tests                                     \
 ibuffer-tests                                  \
 info-tests                                     \
 isearch-tests                                  \
 make-mode-tests                                        \
-re-builder-tests \
+man-tests                                      \
+re-builder-tests                               \
 timezone-tests
 
 SRC_DIR=../lisp
@@ -40,11 +42,13 @@ calc-tests                                  \
 calendar-tests                                 \
 dired-tests                                    \
 editkit-tests                                  \
+help-tests                                     \
 ibuffer-tests                                  \
 info-tests                                     \
 isearch-tests                                  \
 make-mode-tests                                        \
-re-builder-tests \
+man-tests                                      \
+re-builder-tests                               \
 timezone-tests
 
 lib-tests:
@@ -68,6 +72,9 @@ dired-tests:
 editkit-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
+help-tests:
+       $(MAKE) -C $(SRC_DIR) $@
+
 ibuffer-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
@@ -80,6 +87,9 @@ isearch-tests:
 make-mode-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
+man-tests:
+       $(MAKE) -C $(SRC_DIR) $@
+
 re-builder-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
diff --git a/tests/test-casual-info-settings.el 
b/tests/casual-help-test-utils.el
similarity index 52%
copy from tests/test-casual-info-settings.el
copy to tests/casual-help-test-utils.el
index 893eff819d..40e5d36d8e 100644
--- a/tests/test-casual-info-settings.el
+++ b/tests/casual-help-test-utils.el
@@ -1,4 +1,4 @@
-;;; test-casual-info-settings.el --- Casual Info Settings Tests  -*- 
lexical-binding: t; -*-
+;;; casual-help-test-utils.el --- Casual Test Utils       -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2024-2025  Charles Y. Choi
 
@@ -23,21 +23,19 @@
 ;;
 
 ;;; Code:
-
 (require 'ert)
-(require 'casual-info-test-utils)
-(require 'casual-info-settings)
-
-(ert-deftest test-casual-info-settings-tmenu-bindings ()
-  (casualt-info-setup)
-  (let ((test-vectors (list)))
-    (push (casualt-suffix-test-vector "u" 
#'casual-lib-customize-casual-lib-use-unicode) test-vectors)
-    (push (casualt-suffix-test-vector "a" #'casual-info-about) test-vectors)
-
-    (casualt-suffix-testbench-runner test-vectors
-                                     #'casual-info-settings-tmenu
-                                     '(lambda () (random 5000))))
-  (casualt-info-breakdown t))
-
-(provide 'test-casual-info-settings)
-;;; test-casual-info-setttings.el ends here
+(require 'casual-lib)
+(require 'kmacro)
+
+(defun casualt-help-setup ()
+  "Casual Help setup."
+  (describe-symbol 'find-file)
+  (describe-symbol 'apropos-do-all)
+  (switch-to-buffer "*Help*"))
+
+(defun casualt-help-breakdown ()
+  "Casual help breakdown."
+  )
+
+(provide 'casual-help-test-utils)
+;;; casual-help-test-utils.el ends here
diff --git a/tests/test-casual-info-settings.el b/tests/casual-man-test-utils.el
similarity index 52%
copy from tests/test-casual-info-settings.el
copy to tests/casual-man-test-utils.el
index 893eff819d..5f5ce5192a 100644
--- a/tests/test-casual-info-settings.el
+++ b/tests/casual-man-test-utils.el
@@ -1,4 +1,4 @@
-;;; test-casual-info-settings.el --- Casual Info Settings Tests  -*- 
lexical-binding: t; -*-
+;;; casual-man-test-utils.el --- Casual Test Utils       -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2024-2025  Charles Y. Choi
 
@@ -23,21 +23,18 @@
 ;;
 
 ;;; Code:
-
 (require 'ert)
-(require 'casual-info-test-utils)
-(require 'casual-info-settings)
-
-(ert-deftest test-casual-info-settings-tmenu-bindings ()
-  (casualt-info-setup)
-  (let ((test-vectors (list)))
-    (push (casualt-suffix-test-vector "u" 
#'casual-lib-customize-casual-lib-use-unicode) test-vectors)
-    (push (casualt-suffix-test-vector "a" #'casual-info-about) test-vectors)
-
-    (casualt-suffix-testbench-runner test-vectors
-                                     #'casual-info-settings-tmenu
-                                     '(lambda () (random 5000))))
-  (casualt-info-breakdown t))
-
-(provide 'test-casual-info-settings)
-;;; test-casual-info-setttings.el ends here
+(require 'casual-lib)
+(require 'kmacro)
+
+(defun casualt-man-setup ()
+  "Casual man setup."
+  (setopt Man-prefer-synchronous-call t)
+  (man "tar"))
+
+(defun casualt-man-breakdown ()
+  "Casual man breakdown."
+  )
+
+(provide 'casual-man-test-utils)
+;;; casual-man-test-utils.el ends here
diff --git a/tests/test-casual-calc.el b/tests/test-casual-calc.el
index 123617137c..93ae5b5108 100644
--- a/tests/test-casual-calc.el
+++ b/tests/test-casual-calc.el
@@ -61,6 +61,11 @@
                         ("D" . casual-calc--percent-change)
                         ("p" . casual-calc--pi)
                         ("e" . casual-calc--e-constant)
+                        ("+" . casual-calc--plus)
+                        ("-" . casual-calc--minus)
+                        ("*" . casual-calc--times)
+                        ("/" . casual-calc--divide)
+                        ("M" . casual-calc--mod)
                         ("m" . casual-calc-modes-tmenu)
                         ("S" . casual-calc-stack-display-tmenu)
                         ("ô" . casual-calc-trail-tmenu)
diff --git a/tests/test-casual-help-settings.el 
b/tests/test-casual-help-settings.el
new file mode 100644
index 0000000000..75d8f34635
--- /dev/null
+++ b/tests/test-casual-help-settings.el
@@ -0,0 +1,53 @@
+;;; test-casual-help-settings.el --- Casual Make Settings Tests  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'casual-help-test-utils)
+(require 'casual-help-settings)
+
+(ert-deftest test-casual-help-settings-tmenu ()
+  (let ()
+    (cl-letf ((casualt-mock #'casual-help--customize-group)
+              (casualt-mock #'casual-help-about)
+              ;;(casualt-mock #')
+
+              )
+
+      (let ((test-vectors
+             '((:binding "G" :command casual-help--customize-group)
+               (:binding "u" :command 
casual-lib-customize-casual-lib-use-unicode)
+               (:binding "n" :command 
casual-lib-customize-casual-lib-hide-navigation)
+               (:binding "a" :command casual-help-about))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-help-settings-tmenu
+                                        '(lambda () (random 5000)))))))
+
+(ert-deftest test-casual-help-about ()
+  (should (stringp (casual-help-about))))
+
+(provide 'test-casual-help-settings)
+;;; test-casual-help-setttings.el ends here
diff --git a/tests/test-casual-help-utils.el b/tests/test-casual-help-utils.el
new file mode 100644
index 0000000000..63e7695a28
--- /dev/null
+++ b/tests/test-casual-help-utils.el
@@ -0,0 +1,54 @@
+;;; test-casual-help-utils.el --- Casual Make Utils Tests  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+(require 'ert)
+(require 'casual-help-test-utils)
+(require 'casual-help-utils)
+
+(ert-deftest test-casual-help-unicode-get ()
+  (let ((casual-lib-use-unicode nil))
+    (should (string-equal (casual-help-unicode-get :previous) "Previous"))
+    (should (string-equal (casual-help-unicode-get :next) "Next"))
+    (should (string-equal (casual-help-unicode-get :forward) "Forward"))
+    (should (string-equal (casual-help-unicode-get :backward) "Backward"))
+    (should (string-equal (casual-help-unicode-get :goto) "Goto…"))
+    (should (string-equal (casual-help-unicode-get :link) "Link"))
+    (should (string-equal (casual-help-unicode-get :beginning-of-buffer) 
"Beginning"))
+    (should (string-equal (casual-help-unicode-get :end-of-buffer) "End"))
+    (should (string-equal (casual-help-unicode-get :paragraph) "Paragraph"))
+    (should (string-equal (casual-help-unicode-get :page) "Page")))
+
+  (let ((casual-lib-use-unicode t))
+    (should (string-equal (casual-help-unicode-get :previous) "↑"))
+    (should (string-equal (casual-help-unicode-get :next) "↓"))
+    (should (string-equal (casual-help-unicode-get :goto) "→"))
+    (should (string-equal (casual-help-unicode-get :link) "🔗"))
+    (should (string-equal (casual-help-unicode-get :beginning-of-buffer) "⇱"))
+    (should (string-equal (casual-help-unicode-get :end-of-buffer) "⇲"))
+    (should (string-equal (casual-help-unicode-get :paragraph) "¶"))
+    (should (string-equal (casual-help-unicode-get :page) "📄"))))
+
+(provide 'test-casual-help-utils)
+;;; test-casual-help-utils.el ends here
diff --git a/tests/test-casual-help.el b/tests/test-casual-help.el
new file mode 100644
index 0000000000..7ef645af85
--- /dev/null
+++ b/tests/test-casual-help.el
@@ -0,0 +1,100 @@
+;;; test-casual-help.el --- Casual Make Tests -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'casual-lib-test-utils)
+(require 'casual-help-test-utils)
+(require 'casual-help)
+
+(ert-deftest test-casual-help-tmenu ()
+  (let ()
+    (casualt-help-setup)
+
+    (cl-letf ((casualt-mock #'beginning-of-buffer)
+              (casualt-mock #'end-of-buffer)
+              (casualt-mock #'previous-line)
+              (casualt-mock #'next-line)
+              (casualt-mock #'casual-lib-browse-backward-paragraph)
+              (casualt-mock #'casual-lib-browse-forward-paragraph)
+              (casualt-mock #'help-goto-previous-page)
+              (casualt-mock #'help-goto-next-page)
+              (casualt-mock #'help-go-back)
+              (casualt-mock #'help-go-forward)
+              (casualt-mock #'forward-button)
+              (casualt-mock #'backward-button)
+              (casualt-mock #'push-button)
+              (casualt-mock #'describe-symbol)
+              (casualt-mock #'describe-command)
+              (casualt-mock #'describe-function)
+              (casualt-mock #'describe-variable)
+
+              (casualt-mock #'help-goto-info)
+              (casualt-mock #'help-goto-lispref-info)
+
+              (casualt-mock #'help-view-source)
+              (casualt-mock #'help-customize)
+              (casualt-mock #'casual-help-settings-tmenu)
+
+              (casualt-mock #'quit-window))
+
+      (let ((test-vectors
+             '((:binding ">" :command end-of-buffer)
+               (:binding "<" :command beginning-of-buffer)
+               (:binding "C-n" :command next-line)
+               (:binding "C-p" :command previous-line)
+               (:binding "n" :command casual-lib-browse-forward-paragraph)
+               (:binding "p" :command casual-lib-browse-backward-paragraph)
+               (:binding "P" :command help-goto-previous-page)
+               (:binding "N" :command help-goto-next-page)
+               (:binding "M-[" :command help-go-back)
+               (:binding "M-]" :command help-go-forward)
+
+               (:binding "j" :command forward-button)
+               (:binding "k" :command backward-button)
+               (:binding "RET" :command push-button)
+
+               ;; (:binding "ds" :command describe-symbol)
+               ;; (:binding "dv" :command describe-variable)
+               ;; (:binding "dc" :command describe-command)
+               ;; (:binding "df" :command describe-function)
+
+               (:binding "i" :command help-goto-info)
+               (:binding "I" :command help-goto-lispref-info)
+
+               (:binding "s" :command help-view-source)
+               ;;(:binding "c" :command help-customize)
+
+               (:binding "," :command casual-help-settings-tmenu)
+               (:binding "q" :command quit-window)
+               )))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-help-tmenu
+                                        '(lambda () (random 5000)))))
+    (casualt-help-breakdown)))
+
+(provide 'test-casual-help)
+;;; test-casual-help.el ends here
diff --git a/tests/test-casual-info-settings.el 
b/tests/test-casual-info-settings.el
index 893eff819d..8ef0a44f33 100644
--- a/tests/test-casual-info-settings.el
+++ b/tests/test-casual-info-settings.el
@@ -25,19 +25,32 @@
 ;;; Code:
 
 (require 'ert)
+(require 'casual-lib-test-utils)
 (require 'casual-info-test-utils)
 (require 'casual-info-settings)
 
-(ert-deftest test-casual-info-settings-tmenu-bindings ()
-  (casualt-info-setup)
-  (let ((test-vectors (list)))
-    (push (casualt-suffix-test-vector "u" 
#'casual-lib-customize-casual-lib-use-unicode) test-vectors)
-    (push (casualt-suffix-test-vector "a" #'casual-info-about) test-vectors)
-
-    (casualt-suffix-testbench-runner test-vectors
-                                     #'casual-info-settings-tmenu
-                                     '(lambda () (random 5000))))
-  (casualt-info-breakdown t))
+(ert-deftest test-casual-info-settings-tmenu ()
+  (let ()
+    (casualt-info-setup)
+    (cl-letf ((casualt-mock #'casual-info--customize-info-group)
+              (casualt-mock #'casual-info--customize-info-hide-note-references)
+              (casualt-mock 
#'casual-info--customize-info-additional-directory-list)
+              (casualt-mock #'casual-info--customize-info-isearch-search)
+              (casualt-mock 
#'casual-info--customize-info-scroll-prefer-subnodes)
+              (casualt-mock #'casual-info-about))
+
+      (let ((test-vectors
+             '((:binding "h" :command 
casual-info--customize-info-hide-note-references)
+               (:binding "A" :command 
casual-info--customize-info-additional-directory-list)
+               (:binding "i" :command 
casual-info--customize-info-isearch-search)
+               (:binding "c" :command 
casual-info--customize-info-scroll-prefer-subnodes)
+               (:binding "G" :command casual-info--customize-info-group)
+               (:binding "a" :command casual-info-about))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-info-settings-tmenu
+                                        '(lambda () (random 5000)))))
+    (casualt-info-breakdown)))
 
 (provide 'test-casual-info-settings)
 ;;; test-casual-info-setttings.el ends here
diff --git a/tests/test-casual-info-utils.el b/tests/test-casual-info-utils.el
index 933b07b379..8f29d8d21c 100644
--- a/tests/test-casual-info-utils.el
+++ b/tests/test-casual-info-utils.el
@@ -24,6 +24,7 @@
 
 ;;; Code:
 (require 'ert)
+(require 'casual-lib-test-utils)
 (require 'casual-info-test-utils)
 (require 'casual-info-utils)
 
diff --git a/tests/test-casual-info.el b/tests/test-casual-info.el
index 9a557d0082..3ba8f9538c 100644
--- a/tests/test-casual-info.el
+++ b/tests/test-casual-info.el
@@ -99,8 +99,8 @@
                ;; Navigation
                (:binding "k" :command Info-prev-reference)
                (:binding "j" :command Info-next-reference)
-               (:binding "p" :command casual-info-browse-backward-paragraph)
-               (:binding "n" :command casual-info-browse-forward-paragraph)
+               (:binding "p" :command casual-lib-browse-backward-paragraph)
+               (:binding "n" :command casual-lib-browse-forward-paragraph)
                (:binding "[" :command Info-backward-node)
                (:binding "]" :command Info-forward-node)
                (:binding "h" :command Info-prev)
diff --git a/tests/test-casual-isearch-settings.el 
b/tests/test-casual-isearch-settings.el
index 5d2b17a58b..57280e4b75 100644
--- a/tests/test-casual-isearch-settings.el
+++ b/tests/test-casual-isearch-settings.el
@@ -25,23 +25,33 @@
 ;;; Code:
 
 (require 'ert)
+(require 'casual-lib-test-utils)
 (require 'casual-isearch-test-utils)
 (require 'casual-isearch-settings)
 
-(ert-deftest test-casual-isearch-settings-tmenu-bindings ()
-  (casualt-setup)
-  (let ((test-vectors (list)))
-    (push (casualt-suffix-test-vector "G" #'casual-isearch--customize-group) 
test-vectors)
-
-    (push (casualt-suffix-test-vector "u" 
#'casual-lib-customize-casual-lib-use-unicode) test-vectors)
-    (push (casualt-suffix-test-vector "n" 
#'casual-lib-customize-casual-lib-hide-navigation) test-vectors)
-    (push (casualt-suffix-test-vector "a" #'casual-isearch-about) test-vectors)
-
-
-    (casualt-suffix-testbench-runner test-vectors
-                                     #'casual-isearch-settings-tmenu
-                                     '(lambda () (random 5000))))
-  (casualt-breakdown t))
+(ert-deftest test-casual-isearch-settings-tmenu ()
+  (let ()
+    (casualt-setup)
+    (cl-letf ((casualt-mock #'casual-isearch--customize-group)
+              (casualt-mock #'casual-isearch--customize-allow-scroll)
+              (casualt-mock #'casual-isearch--customize-allow-motion)
+              (casualt-mock #'casual-isearch--customize-lazy-count)
+              (casualt-mock #'casual-isearch--customize-lazy-highlight))
+
+      (let ((test-vectors
+             '((:binding "s" :command casual-isearch--customize-allow-scroll)
+               (:binding "m" :command casual-isearch--customize-allow-motion)
+               (:binding "h" :command casual-isearch--customize-lazy-highlight)
+               (:binding "c" :command casual-isearch--customize-lazy-count)
+               (:binding "G" :command casual-isearch--customize-group)
+               (:binding "u" :command 
casual-lib-customize-casual-lib-use-unicode)
+               (:binding "n" :command 
casual-lib-customize-casual-lib-hide-navigation)
+               (:binding "a" :command casual-isearch-about))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-isearch-settings-tmenu
+                                        '(lambda () (random 5000)))))
+    (casualt-breakdown)))
 
 (ert-deftest test-casual-isearch-about ()
   (should (stringp (casual-isearch-about))))
diff --git a/tests/test-casual-man-settings.el 
b/tests/test-casual-man-settings.el
new file mode 100644
index 0000000000..8e05183121
--- /dev/null
+++ b/tests/test-casual-man-settings.el
@@ -0,0 +1,56 @@
+;;; test-casual-man-settings.el --- Casual Make Settings Tests  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'casual-man-test-utils)
+(require 'casual-man-settings)
+
+(ert-deftest test-casual-man-settings-tmenu ()
+  (let ()
+    (cl-letf ((casualt-mock #'casual-man--customize-group)
+              (casualt-mock #'casual-man-about)
+              (casualt-mock #'casual-man--customize-man-switches)
+              (casualt-mock 
#'casual-man--customize-man-prefer-synchronous-call)
+              (casualt-mock 
#'casual-man--customize-man-support-remote-systems))
+
+      (let ((test-vectors
+             '((:binding "s" :command casual-man--customize-man-switches)
+               (:binding "S" :command 
casual-man--customize-man-prefer-synchronous-call)
+               (:binding "r" :command 
casual-man--customize-man-support-remote-systems)
+               (:binding "G" :command casual-man--customize-group)
+               (:binding "u" :command 
casual-lib-customize-casual-lib-use-unicode)
+               (:binding "n" :command 
casual-lib-customize-casual-lib-hide-navigation)
+               (:binding "a" :command casual-man-about))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-man-settings-tmenu
+                                        '(lambda () (random 5000)))))))
+
+(ert-deftest test-casual-man-about ()
+  (should (stringp (casual-man-about))))
+
+(provide 'test-casual-man-settings)
+;;; test-casual-man-setttings.el ends here
diff --git a/tests/test-casual-man-utils.el b/tests/test-casual-man-utils.el
new file mode 100644
index 0000000000..d959c6d4b7
--- /dev/null
+++ b/tests/test-casual-man-utils.el
@@ -0,0 +1,56 @@
+;;; test-casual-man-utils.el --- Casual Make Utils Tests  -*- lexical-binding: 
t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+(require 'ert)
+(require 'casual-man-test-utils)
+(require 'casual-man-utils)
+
+(ert-deftest test-casual-man-unicode-get ()
+  (let ((casual-lib-use-unicode nil))
+    (should (string-equal (casual-man-unicode-get :previous) "Previous"))
+    (should (string-equal (casual-man-unicode-get :next) "Next"))
+    (should (string-equal (casual-man-unicode-get :goto) "Goto…"))
+    (should (string-equal (casual-man-unicode-get :follow) "Follow…"))
+    (should (string-equal (casual-man-unicode-get :beginning-of-buffer) 
"Beginning"))
+    (should (string-equal (casual-man-unicode-get :paragraph) "Paragraph"))
+    (should (string-equal (casual-man-unicode-get :update) "Update"))
+    (should (string-equal (casual-man-unicode-get :kill) "Close"))
+    (should (string-equal (casual-man-unicode-get :see-also) "See Also")))
+
+  (let ((casual-lib-use-unicode t))
+    (should (string-equal (casual-man-unicode-get :previous) "↑"))
+    (should (string-equal (casual-man-unicode-get :next) "↓"))
+    (should (string-equal (casual-man-unicode-get :goto) "→"))
+    (should (string-equal (casual-man-unicode-get :follow) "🔗…"))
+    (should (string-equal (casual-man-unicode-get :beginning-of-buffer) "⇱"))
+    (should (string-equal (casual-man-unicode-get :end-of-buffer) "⇲"))
+    (should (string-equal (casual-man-unicode-get :paragraph) "¶"))
+    (should (string-equal (casual-man-unicode-get :update) "⟳"))
+    (should (string-equal (casual-man-unicode-get :kill) "×"))
+    (should (string-equal (casual-man-unicode-get :see-also) "👀"))))
+
+
+(provide 'test-casual-man-utils)
+;;; test-casual-man-utils.el ends here
diff --git a/tests/test-casual-man.el b/tests/test-casual-man.el
new file mode 100644
index 0000000000..147c3ad69e
--- /dev/null
+++ b/tests/test-casual-man.el
@@ -0,0 +1,91 @@
+;;; test-casual-man.el --- Casual Make Tests -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles Y. Choi
+
+;; Author: Charles Choi <[email protected]>
+;; Keywords: tools
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'ert)
+(require 'casual-man-test-utils)
+(require 'casual-lib-test-utils)
+(require 'casual-man)
+
+(ert-deftest test-casual-man-tmenu ()
+  (let ()
+    (casualt-man-setup)
+
+    (cl-letf ((casualt-mock #'beginning-of-buffer)
+              (casualt-mock #'end-of-buffer)
+              (casualt-mock #'previous-line)
+              (casualt-mock #'next-line)
+              (casualt-mock #'casual-lib-browse-backward-paragraph)
+              (casualt-mock #'casual-lib-browse-forward-paragraph)
+              (casualt-mock #'casual-man-occur-options)
+              (casualt-mock #'Man-previous-section)
+              (casualt-mock #'Man-next-section)
+              (casualt-mock #'Man-goto-section)
+              (casualt-mock #'Man-goto-see-also-section)
+              (casualt-mock #'Man-follow-manual-reference)
+              (casualt-mock #'Man-previous-manpage)
+              (casualt-mock #'Man-next-manpage)
+              (casualt-mock #'Man-goto-page)
+              (casualt-mock #'bookmark-set-no-overwrite)
+              (casualt-mock #'bookmark-jump)
+              (casualt-mock #'casual-man-info)
+              (casualt-mock #'man)
+              (casualt-mock #'Man-update-manpage)
+              (casualt-mock #'Man-kill)
+              (casualt-mock #'quit-window))
+
+      (let ((test-vectors
+             '((:binding "." :command beginning-of-buffer)
+               (:binding ">" :command end-of-buffer)
+               (:binding "C-n" :command next-line)
+               (:binding "C-p" :command previous-line)
+               (:binding "n" :command casual-lib-browse-forward-paragraph)
+               (:binding "p" :command casual-lib-browse-backward-paragraph)
+               (:binding "o" :command casual-man-occur-options)
+               (:binding "]" :command Man-next-section)
+               (:binding "[" :command Man-previous-section)
+               (:binding "g" :command Man-goto-section)
+               (:binding "s" :command Man-goto-see-also-section)
+              ;; (:binding "r
" :command Man-follow-manual-reference)
+              ;; (:binding "M-n" :command Man-next-manpage)
+              ;; (:binding "M-p" :command Man-previous-manpage)
+              ;; (:binding "j" :command Man-goto-page)
+               (:binding "B" :command bookmark-set-no-overwrite)
+              ;; (:binding "J" :command bookmark-jump)
+               ;; (:binding "m" :command man)
+               (:binding "I" :command casual-man-info)
+               (:binding "u" :command Man-update-manpage)
+               (:binding "," :command casual-man-settings-tmenu)
+               (:binding "K" :command Man-kill)
+               (:binding "q" :command quit-window)
+               )))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-man-tmenu
+                                        '(lambda () (random 5000)))))
+    (casualt-man-breakdown)))
+
+(provide 'test-casual-man)
+;;; test-casual-man.el ends here

Reply via email to