branch: elpa/casual
commit 76b3017d138eeeeb63b52212bcf45ef4946892b9
Merge: c8cc0fb75a 1a4db1b444
Author: Charles Choi <[email protected]>
Commit: GitHub <[email protected]>

    Merge pull request #272 from kickingvegas/245-build-casual-compile
    
    Add Casual Compile
---
 docs/casual.info                               | 478 +++++++++++++++----------
 docs/casual.org                                |   2 +
 docs/casual.texi                               | 114 ++++++
 docs/compile.org                               |  73 ++++
 docs/images/casual-compile-grep-screenshot.png | Bin 0 -> 159198 bytes
 docs/images/casual-compile-screenshot.png      | Bin 0 -> 152853 bytes
 lisp/Makefile                                  |   5 +
 lisp/Makefile-compile.make                     |  30 ++
 lisp/casual-compile-settings.el                | 114 ++++++
 lisp/casual-compile-utils.el                   |  66 ++++
 lisp/casual-compile.el                         | 113 ++++++
 tests/Makefile                                 |   5 +
 tests/casual-compile-test-utils.el             |  58 +++
 tests/test-casual-compile-settings.el          |  56 +++
 tests/test-casual-compile-utils.el             |  50 +++
 tests/test-casual-compile.el                   |  74 ++++
 16 files changed, 1055 insertions(+), 183 deletions(-)

diff --git a/docs/casual.info b/docs/casual.info
index 3c9232cdb3..c0436c58ec 100644
--- a/docs/casual.info
+++ b/docs/casual.info
@@ -77,6 +77,7 @@ Casual Modes
 * Bookmarks::
 * Calc::
 * Calendar::
+* Compile::
 * Dired::
 * EditKit::
 * Eshell::
@@ -117,6 +118,11 @@ Calendar Usage
 * Calendar Settings Menu::
 * Calendar Unicode Symbol Support::
 
+Compile
+
+* Compile Install::
+* Compile Usage::
+
 Dired
 
 * Dired Requirements::
@@ -375,6 +381,7 @@ guidance on its configuration.
    • *note Bookmarks: Bookmarks Install.
    • *note Calc: Calc Install.
    • *note Calendar: Calendar Install.
+   • *note Compile: Compile Install.
    • *note Dired: Dired Install.
    • *note EditKit: EditKit Install.
    • *note Eshell: Eshell Install.
@@ -572,6 +579,7 @@ The following modes are supported by Casual:
 * Bookmarks::
 * Calc::
 * Calendar::
+* Compile::
 * Dired::
 * EditKit::
 * Eshell::
@@ -887,7 +895,7 @@ It helps to know some basics about Calc.
    • Entering a single quote (') will prompt you for an algebraic entry.
 
 
-File: casual.info,  Node: Calendar,  Next: Dired,  Prev: Calc,  Up: Casual 
Modes
+File: casual.info,  Node: Calendar,  Next: Compile,  Prev: Calc,  Up: Casual 
Modes
 
 5.4 Calendar
 ============
@@ -1046,9 +1054,106 @@ By enabling “‘u’ Use Unicode Symbols” from the Settings 
menu, Casual
 Calendar will use Unicode symbols as appropriate in its menus.
 
 
-File: casual.info,  Node: Dired,  Next: EditKit,  Prev: Calendar,  Up: Casual 
Modes
+File: casual.info,  Node: Compile,  Next: Dired,  Prev: Calendar,  Up: Casual 
Modes
+
+5.5 Compile
+===========
+
+Casual Compile is a user interface for the output of the ‘compile’
+command (*note (emacs)Compilation::).  This output buffer uses the major
+mode ‘compilation-mode’, whose commands are surfaced by Casual Compile.
+
+The output of Emacs-wrapped Grep commands such as ‘rgrep’, ‘grep’, and
+‘lgrep’ uses ‘grep-mode’ which is derived from ‘compilation-mode’.  As
+such the main menu ‘casual-compile-tmenu’ can be used for both ‘compile’
+and Grep commands.
+
+The screenshot below shows the menu for compilation results.
+
+�[image src="images/casual-compile-screenshot.png"�]
+
+The screenshot below shows the menu for Grep results.  Note the menu
+label changes based on the output mode (in this case ‘grep-mode’).
+
+�[image src="images/casual-compile-grep-screenshot.png"�]
+
+* Menu:
+
+* Compile Install::
+* Compile Usage::
+
+
+File: casual.info,  Node: Compile Install,  Next: Compile Usage,  Up: Compile
 
-5.5 Dired
+5.5.1 Compile Install
+---------------------
+
+In your initialization file, bind the Transient ‘casual-compile-tmenu’
+to your key binding of preference.
+
+     (keymap-set compilation-mode-map "C-o" #'casual-compile-tmenu)
+
+‘casual-compile-tmenu’ deviates from the default bindings of
+‘compilation-mode-map’ as shown in the table below to support using a
+single key on an ‘en.US’ keyboard.
+
+Default Binding   Casual Binding   Command                      Notes
+--------------------------------------------------------------------------------------
+M-p               k                compilation-previous-error   vi-style 
navigation
+M-n               j                compilation-next-error       vi-style 
navigation
+M-{               [                compilation-previous-file
+M-}               ]                compilation-next-file
+C-o               o                compilation-display-error
+
+The following keybindings are recommended to support consistent behavior
+between ‘compilation-mode-map’ and ‘casual-compile-tmenu’.
+
+     (keymap-set compilation-mode-map "k" #'compilation-previous-error)
+     (keymap-set compilation-mode-map "j" #'compilation-next-error)
+     (keymap-set compilation-mode-map "o" #'compilation-display-error)
+     (keymap-set compilation-mode-map "[" #'compilation-previous-file)
+     (keymap-set compilation-mode-map "]" #'compilation-next-file)
+
+
+File: casual.info,  Node: Compile Usage,  Prev: Compile Install,  Up: Compile
+
+5.5.2 Compile Usage
+-------------------
+
+�[image src="images/casual-compile-screenshot.png"�]
+
+After running ‘compile’, invoke ‘casual-compile-tmenu’ in the buffer
+named ‘✳︎compilation✳︎’ using the binding ‘C-o’ (or your binding of
+preference).
+
+The following sections are offered in the menu:
+
+Follow
+     Navigate the point while opening the location of the error in the
+     source file in another window.
+Error
+     Error operations.
+File
+     If there are errors in multiple files, navigate to the file.
+Compile
+     Get compile for different Elisp types.  Note that the “‘k’ Kill”
+     item is displayed when there is a running job.
+
+If the output window is from a Grep command, ‘casual-compile-tmenu’ will
+adjust its label accordingly as shown below.
+
+�[image src="images/casual-compile-grep-screenshot.png"�]
+
+Compile Mode Unicode Symbol Support
+***********************************
+
+By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
+Compile will use Unicode symbols as appropriate in its menus.
+
+
+File: casual.info,  Node: Dired,  Next: EditKit,  Prev: Compile,  Up: Casual 
Modes
+
+5.6 Dired
 =========
 
 Casual Dired provides a user interface for Dired (*note (emacs)Dired::),
@@ -1065,7 +1170,7 @@ the Emacs file manager.  Its top-level library is 
‘casual-dired’.
 
 File: casual.info,  Node: Dired Requirements,  Next: Dired Install,  Up: Dired
 
-5.5.1 Dired Requirements
+5.6.1 Dired Requirements
 ------------------------
 
 Casual Dired requires that the ‘ls’ utility from GNU coreutils ≥ 8.32 be
@@ -1082,7 +1187,7 @@ different platforms.
 
 File: casual.info,  Node: macOS,  Next: Windows,  Up: Dired Requirements
 
-5.5.1.1 macOS
+5.6.1.1 macOS
 .............
 
 Note that the default packaged ‘ls’ on macOS is BSD-flavored which is
@@ -1096,7 +1201,7 @@ to point to its version of ‘ls’ accordingly.
 
 File: casual.info,  Node: Windows,  Prev: macOS,  Up: Dired Requirements
 
-5.5.1.2 Windows
+5.6.1.2 Windows
 ...............
 
 For users running on Microsoft Windows, use this guidance
@@ -1110,7 +1215,7 @@ to configure Emacs to use an external install of ‘ls’.
 
 File: casual.info,  Node: Dired Install,  Next: Dired Usage,  Prev: Dired 
Requirements,  Up: Dired
 
-5.5.2 Dired Install
+5.6.2 Dired Install
 -------------------
 
 The main menu for Dired is ‘casual-dired-tmenu’.  Bind this menu in the
@@ -1199,7 +1304,7 @@ the variable ‘dired-use-ls-dired’ to ‘t’ (“‘l’ Use GNU 
‘ls’ wi
 
 File: casual.info,  Node: Dired Usage,  Prev: Dired Install,  Up: Dired
 
-5.5.3 Dired Usage
+5.6.3 Dired Usage
 -----------------
 
 �[image src="images/casual-dired-screenshot.png"�]
@@ -1254,7 +1359,7 @@ New
 
 File: casual.info,  Node: Dired Enhanced Sorting,  Next: Dired Search & 
Replace,  Up: Dired Usage
 
-5.5.3.1 Dired Enhanced Sorting
+5.6.3.1 Dired Enhanced Sorting
 ..............................
 
 Casual Dired offers enhanced sorting capabilities through GNU ‘ls’.  Use
@@ -1270,7 +1375,7 @@ global setting and will apply to all future calls to the 
*Sort By* menu.
 
 File: casual.info,  Node: Dired Search & Replace,  Next: Bulk Dired 
Operations,  Prev: Dired Enhanced Sorting,  Up: Dired Usage
 
-5.5.3.2 Dired Search & Replace
+5.6.3.2 Dired Search & Replace
 ..............................
 
 Search and replace in multiple marked files using the “‘/’ Search &
@@ -1292,7 +1397,7 @@ is installed and used by Emacs.
 
 File: casual.info,  Node: Bulk Dired Operations,  Next: Dired Link,  Prev: 
Dired Search & Replace,  Up: Dired Usage
 
-5.5.3.3 Bulk Dired Operations
+5.6.3.3 Bulk Dired Operations
 .............................
 
 Casual Dired organizes a number of Dired commands that work on a set of
@@ -1304,7 +1409,7 @@ marked files.  These commands are presented in the “‘#’ 
Utils›” menu i
 
 File: casual.info,  Node: Dired Link,  Next: Dired Unicode Symbol Support,  
Prev: Bulk Dired Operations,  Up: Dired Usage
 
-5.5.3.4 Dired Link
+5.6.3.4 Dired Link
 ..................
 
 Create symbolic and hard links via the “‘l’ Link›” menu in
@@ -1316,7 +1421,7 @@ Create symbolic and hard links via the “‘l’ Link›” menu in
 
 File: casual.info,  Node: Dired Unicode Symbol Support,  Prev: Dired Link,  
Up: Dired Usage
 
-5.5.3.5 Dired Unicode Symbol Support
+5.6.3.5 Dired Unicode Symbol Support
 ....................................
 
 By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
@@ -1331,7 +1436,7 @@ fixed-width or monospace and *must* support the Unicode 
symbols used.
 
 File: casual.info,  Node: EditKit,  Next: Eshell,  Prev: Dired,  Up: Casual 
Modes
 
-5.6 EditKit
+5.7 EditKit
 ===========
 
 Casual EditKit provides a user interface for the numerous editing
@@ -1356,7 +1461,7 @@ taste.
 
 File: casual.info,  Node: EditKit Install,  Next: EditKit Usage,  Up: EditKit
 
-5.6.1 EditKit Install
+5.7.1 EditKit Install
 ---------------------
 
 A reference menu (‘casual-editkit-main-tmenu’) illustrating nearly all
@@ -1378,7 +1483,7 @@ workflows.
 
 File: casual.info,  Node: EditKit Usage,  Prev: EditKit Install,  Up: EditKit
 
-5.6.2 EditKit Usage
+5.7.2 EditKit Usage
 -------------------
 
 �[image src="images/casual-editkit-main-screenshot.png"�]
@@ -1427,7 +1532,7 @@ commands.
 
 File: casual.info,  Node: Register commands,  Next: Edit commands,  Up: 
EditKit Usage
 
-5.6.2.1 Register commands
+5.7.2.1 Register commands
 .........................
 
 Support for register commands (*note (emacs)Registers::) is provided by
@@ -1443,7 +1548,7 @@ configuration, and keyboard macros are provided by this 
menu.
 
 File: casual.info,  Node: Edit commands,  Next: Window management,  Prev: 
Register commands,  Up: EditKit Usage
 
-5.6.2.2 Edit commands
+5.7.2.2 Edit commands
 .....................
 
 This menu contains commands and sub-menus related to editing text.
@@ -1543,7 +1648,7 @@ sub-menu of ‘casual-editkit-edit-tmenu’.
 
 File: casual.info,  Node: Window management,  Next: Search & Replace commands, 
 Prev: Edit commands,  Up: EditKit Usage
 
-5.6.2.3 Window management
+5.7.2.3 Window management
 .........................
 
 This menu provides support for different Emacs window management
@@ -1568,7 +1673,7 @@ This menu provides support for deleting windows.
 
 File: casual.info,  Node: Search & Replace commands,  Next: Open commands,  
Prev: Window management,  Up: EditKit Usage
 
-5.6.2.4 Search & Replace commands
+5.7.2.4 Search & Replace commands
 .................................
 
 Operations related to search and replace are captured by this menu.
@@ -1583,7 +1688,7 @@ direction will by default operate forward of the current 
point if
 
 File: casual.info,  Node: Open commands,  Next: Project commands,  Prev: 
Search & Replace commands,  Up: EditKit Usage
 
-5.6.2.5 Open commands
+5.7.2.5 Open commands
 .....................
 
 Commands related to opening a file (either for writing or read-only) are
@@ -1595,7 +1700,7 @@ or buffer.  The *Project* sub-menu is also offered here.
 
 File: casual.info,  Node: Project commands,  Next: Bookmark commands,  Prev: 
Open commands,  Up: EditKit Usage
 
-5.6.2.6 Project commands
+5.7.2.6 Project commands
 ........................
 
 Project-related commands are listed in this menu.
@@ -1605,7 +1710,7 @@ Project-related commands are listed in this menu.
 
 File: casual.info,  Node: Bookmark commands,  Next: Emoji & Symbol Insertion,  
Prev: Project commands,  Up: EditKit Usage
 
-5.6.2.7 Bookmark commands
+5.7.2.7 Bookmark commands
 .........................
 
 Commands edit, add, or jump to a bookmark are captured in this menu.
@@ -1615,7 +1720,7 @@ Commands edit, add, or jump to a bookmark are captured in 
this menu.
 
 File: casual.info,  Node: Emoji & Symbol Insertion,  Next: Tool commands,  
Prev: Bookmark commands,  Up: EditKit Usage
 
-5.6.2.8 Emoji & Symbol Insertion
+5.7.2.8 Emoji & Symbol Insertion
 ................................
 
 Insert emoji and symbol characters with this menu.  Smart quotes are
@@ -1628,7 +1733,7 @@ menu also offers the command ‘electric-quote-mode’ which 
is bound to
 
 File: casual.info,  Node: Tool commands,  Next: Narrow/Widen Commands,  Prev: 
Emoji & Symbol Insertion,  Up: EditKit Usage
 
-5.6.2.9 Tool commands
+5.7.2.9 Tool commands
 .....................
 
 This menu holds an assorted collection of different tools/utilities
@@ -1640,7 +1745,7 @@ starting point to create a menu customized to their needs.
 
 File: casual.info,  Node: Narrow/Widen Commands,  Next: Macro,  Prev: Tool 
commands,  Up: EditKit Usage
 
-5.6.2.10 Narrow/Widen Commands
+5.7.2.10 Narrow/Widen Commands
 ..............................
 
 Support for narrowing and widening (*note (emacs)Narrowing::) a buffer
@@ -1666,7 +1771,7 @@ initialization code can be used.
 
 File: casual.info,  Node: Macro,  Next: EditKit Settings,  Prev: Narrow/Widen 
Commands,  Up: EditKit Usage
 
-5.6.2.11 Macro
+5.7.2.11 Macro
 ..............
 
 Commands for managing macros are provided for by this menu.  Note that
@@ -1678,7 +1783,7 @@ keybindings.
 
 File: casual.info,  Node: EditKit Settings,  Prev: Macro,  Up: EditKit Usage
 
-5.6.2.12 EditKit Settings
+5.7.2.12 EditKit Settings
 .........................
 
 Configuration of common editing-related settings are provided here.
@@ -1698,7 +1803,7 @@ command.
 
 File: casual.info,  Node: Eshell,  Next: Help,  Prev: EditKit,  Up: Casual 
Modes
 
-5.7 Eshell
+5.8 Eshell
 ==========
 
 Casual Eshell is a user interface for ‘Eshell’, a shell-like command
@@ -1714,7 +1819,7 @@ interpreter implemented in Emacs Lisp.
 
 File: casual.info,  Node: Eshell Install,  Next: Eshell Usage,  Up: Eshell
 
-5.7.1 Eshell Install
+5.8.1 Eshell Install
 --------------------
 
 In your initialization file, bind the Transient ‘casual-eshell-tmenu’ to
@@ -1725,7 +1830,7 @@ your key binding of preference.
 
 File: casual.info,  Node: Eshell Usage,  Prev: Eshell Install,  Up: Eshell
 
-5.7.2 Eshell Usage
+5.8.2 Eshell Usage
 ------------------
 
 Eshell can be invoked via ‘M-x eshell’.  In the Eshell window, press
@@ -1760,7 +1865,7 @@ Eshell will use Unicode symbols as appropriate in its 
menus.
 
 File: casual.info,  Node: Help,  Next: IBuffer,  Prev: Eshell,  Up: Casual 
Modes
 
-5.8 Help
+5.9 Help
 ========
 
 Casual Help is a user interface for ‘help-mode’, a major mode for
@@ -1776,7 +1881,7 @@ viewing help text and navigating references in it.
 
 File: casual.info,  Node: Help Install,  Next: Help Usage,  Up: Help
 
-5.8.1 Help Install
+5.9.1 Help Install
 ------------------
 
 In your initialization file, bind the Transient ‘casual-help-tmenu’ to
@@ -1811,7 +1916,7 @@ between ‘help-mode’ and ‘casual-help-tmenu’.
 
 File: casual.info,  Node: Help Usage,  Prev: Help Install,  Up: Help
 
-5.8.2 Help Usage
+5.9.2 Help Usage
 ----------------
 
 After invoking help via a ‘describe-’ command, invoke
@@ -1844,8 +1949,8 @@ will use Unicode symbols as appropriate in its menus.  ❮ 
Back to Casual
 
 File: casual.info,  Node: IBuffer,  Next: Image,  Prev: Help,  Up: Casual Modes
 
-5.9 IBuffer
-===========
+5.10 IBuffer
+============
 
 Casual IBuffer provides a user interface to Emacs IBuffer (*note
 emacs#Buffer Menus: (emacs)Buffer Menus.), a mode designed for managing
@@ -1866,8 +1971,8 @@ buffers as opposed to processes.
 
 File: casual.info,  Node: IBuffer Install,  Next: IBuffer Usage,  Up: IBuffer
 
-5.9.1 IBuffer Install
----------------------
+5.10.1 IBuffer Install
+----------------------
 
 In your initialization file, bind the Transinent ‘casual-ibuffer-tmenu’
 to your key binding of preference.
@@ -1906,8 +2011,8 @@ will enable auto-updating.
 
 File: casual.info,  Node: IBuffer Usage,  Prev: IBuffer Install,  Up: IBuffer
 
-5.9.2 IBuffer Usage
--------------------
+5.10.2 IBuffer Usage
+--------------------
 
 �[image src="images/casual-ibuffer-screenshot.png"�]
 
@@ -1950,8 +2055,8 @@ Quick
 
 File: casual.info,  Node: IBuffer Marking and Operating,  Next: IBuffer 
Filtering,  Up: IBuffer Usage
 
-5.9.2.1 IBuffer Marking and Operating
-.....................................
+5.10.2.1 IBuffer Marking and Operating
+......................................
 
 �[image src="images/casual-ibuffer-main-screenshot.png"�]
 
@@ -1974,8 +2079,8 @@ is available.
 
 File: casual.info,  Node: IBuffer Filtering,  Next: IBuffer Sorting,  Prev: 
IBuffer Marking and Operating,  Up: IBuffer Usage
 
-5.9.2.2 IBuffer Filtering
-.........................
+5.10.2.2 IBuffer Filtering
+..........................
 
 �[image src="images/casual-ibuffer-filter-screenshot.png"�]
 
@@ -2105,8 +2210,8 @@ Whether it succeeds in being comprehensible is left to 
user feedback.
 
 File: casual.info,  Node: IBuffer Sorting,  Next: IBuffer Unicode Symbol 
Support,  Prev: IBuffer Filtering,  Up: IBuffer Usage
 
-5.9.2.3 IBuffer Sorting
-.......................
+5.10.2.3 IBuffer Sorting
+........................
 
 �[image src="images/casual-ibuffer-sortby-screenshot.png"�]
 
@@ -2118,8 +2223,8 @@ Sort ordering can be reversed via the _Invert_ command.
 
 File: casual.info,  Node: IBuffer Unicode Symbol Support,  Prev: IBuffer 
Sorting,  Up: IBuffer Usage
 
-5.9.2.4 IBuffer Unicode Symbol Support
-......................................
+5.10.2.4 IBuffer Unicode Symbol Support
+.......................................
 
 By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
 IBuffer will use Unicode symbols as appropriate in its menus.  The
@@ -2136,7 +2241,7 @@ Name        Plain      Unicode
 
 File: casual.info,  Node: Image,  Next: Info,  Prev: IBuffer,  Up: Casual Modes
 
-5.10 Image
+5.11 Image
 ==========
 
 Casual Image is a user interface for Image Mode (*note (emacs)Image
@@ -2157,7 +2262,7 @@ tools.
 
 File: casual.info,  Node: Image Install,  Next: Image Usage,  Up: Image
 
-5.10.1 Image Install
+5.11.1 Image Install
 --------------------
 
 The main menu for Casual Image is ‘casual-image-tmenu’.  Bind this menu
@@ -2168,7 +2273,7 @@ in the keymap ‘image-mode-map’ as follows in your 
initialization file.
 
 File: casual.info,  Node: Image Usage,  Prev: Image Install,  Up: Image
 
-5.10.2 Image Usage
+5.11.2 Image Usage
 ------------------
 
 �[image src="images/casual-image-main-screenshot.png"�]
@@ -2210,7 +2315,7 @@ Misc
 
 File: casual.info,  Node: Image Resize,  Next: Image Unicode Symbol Support,  
Up: Image Usage
 
-5.10.2.1 Image Resize
+5.11.2.1 Image Resize
 .....................
 
 If ImageMagick (version 6 or 7) is installed, Casual Image can resize an
@@ -2237,7 +2342,7 @@ Image Resize Options
 
 File: casual.info,  Node: Image Unicode Symbol Support,  Next: Image Mode 
Command Naming,  Prev: Image Resize,  Up: Image Usage
 
-5.10.2.2 Image Unicode Symbol Support
+5.11.2.2 Image Unicode Symbol Support
 .....................................
 
 By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
@@ -2246,7 +2351,7 @@ Image will use Unicode symbols as appropriate in its 
menus.
 
 File: casual.info,  Node: Image Mode Command Naming,  Prev: Image Unicode 
Symbol Support,  Up: Image Usage
 
-5.10.2.3 Image Mode Command Naming
+5.11.2.3 Image Mode Command Naming
 ..................................
 
 Casual Image makes a number of opinionated changes to the naming of
@@ -2288,7 +2393,7 @@ Copy filename           
‘image-mode-copy-file-name-as-kill’   Push the curre
 
 File: casual.info,  Node: Info,  Next: I-Search,  Prev: Image,  Up: Casual 
Modes
 
-5.11 Info
+5.12 Info
 =========
 
 Casual Info is a user interface for the Emacs Info Reader.  Its top
@@ -2304,7 +2409,7 @@ level library is ‘casual-info’.
 
 File: casual.info,  Node: Info Install,  Next: Info Usage,  Up: Info
 
-5.11.1 Info Install
+5.12.1 Info Install
 -------------------
 
 The main menu for Casual Info is ‘casual-info-tmenu’.  Bind this menu in
@@ -2343,7 +2448,7 @@ window size with the navigation keys.
 
 File: casual.info,  Node: Info Usage,  Prev: Info Install,  Up: Info
 
-5.11.2 Info Usage
+5.12.2 Info Usage
 -----------------
 
 �[image src="images/casual-info-screenshot.png"�]
@@ -2392,7 +2497,7 @@ Info will use Unicode symbols as appropriate in its menus.
 
 File: casual.info,  Node: I-Search,  Next: Make,  Prev: Info,  Up: Casual Modes
 
-5.12 I-Search
+5.13 I-Search
 =============
 
 Casual I-Search is a user interface for Emacs Incremental Search (*note
@@ -2409,7 +2514,7 @@ library is ‘casual-isearch’.
 
 File: casual.info,  Node: I-Search Install,  Next: I-Search Usage,  Up: 
I-Search
 
-5.12.1 I-Search Install
+5.13.1 I-Search Install
 -----------------------
 
 The main menu for Casual I-Search is ‘casual-isearch-tmenu’.  Bind this
@@ -2424,7 +2529,7 @@ preference.
 
 File: casual.info,  Node: I-Search Usage,  Prev: I-Search Install,  Up: 
I-Search
 
-5.12.2 I-Search Usage
+5.13.2 I-Search Usage
 ---------------------
 
 �[image src="images/casual-isearch-tmenu.png"�]
@@ -2466,7 +2571,7 @@ Use ‘C-g’ to dismiss this Transient menu.
 
 File: casual.info,  Node: Make,  Next: Man,  Prev: I-Search,  Up: Casual Modes
 
-5.13 Make
+5.14 Make
 =========
 
 Casual Make is a user interface for ‘make-mode’, a mode tailored for
@@ -2482,7 +2587,7 @@ editing a Makefile.
 
 File: casual.info,  Node: Make Install,  Next: Make Usage,  Up: Make
 
-5.13.1 Make Install
+5.14.1 Make Install
 -------------------
 
 In your initialization file, bind the Transient ‘casual-make-tmenu’ to
@@ -2494,7 +2599,7 @@ your key binding of preference.  Two suggested bindings 
are ‘M-m’ or
 
 File: casual.info,  Node: Make Usage,  Prev: Make Install,  Up: Make
 
-5.13.2 Make Usage
+5.14.2 Make Usage
 -----------------
 
 �[image src="images/casual-make-screenshot.png"�]
@@ -2537,7 +2642,7 @@ shown in the mini-buffer.
 
 File: casual.info,  Node: Makefile Type Selection,  Next: Automatic Variables, 
 Up: Make Usage
 
-5.13.2.1 Makefile Type Selection
+5.14.2.1 Makefile Type Selection
 ................................
 
 As there are different variants of *make* and makefile formats, you can
@@ -2549,7 +2654,7 @@ done by selecting “‘t’ Makefile Type›” in 
‘casual-make-tmenu’.
 
 File: casual.info,  Node: Automatic Variables,  Next: Make Unicode Symbol 
Support,  Prev: Makefile Type Selection,  Up: Make Usage
 
-5.13.2.2 Automatic Variables
+5.14.2.2 Automatic Variables
 ............................
 
 Casual Make provides a menu to enter GNU Make-style *note automatic
@@ -2563,7 +2668,7 @@ from the menu item “‘a’ Automatic Variables›” in 
‘casual-make-tmenu
 
 File: casual.info,  Node: Make Unicode Symbol Support,  Prev: Automatic 
Variables,  Up: Make Usage
 
-5.13.2.3 Make Unicode Symbol Support
+5.14.2.3 Make Unicode Symbol Support
 ....................................
 
 By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
@@ -2572,7 +2677,7 @@ Make will use Unicode symbols as appropriate in its menus.
 
 File: casual.info,  Node: Man,  Next: RE-Builder,  Prev: Make,  Up: Casual 
Modes
 
-5.14 Man
+5.15 Man
 ========
 
 Casual Man is a user interface for ‘Man-mode’, a Man page reader.
@@ -2587,7 +2692,7 @@ Casual Man is a user interface for ‘Man-mode’, a Man page 
reader.
 
 File: casual.info,  Node: Man Install,  Next: Man Usage,  Up: Man
 
-5.14.1 Man Install
+5.15.1 Man Install
 ------------------
 
 In your initialization file, bind the Transient ‘casual-man-tmenu’ to
@@ -2623,7 +2728,7 @@ between ‘Man-mode’ and ‘casual-man-tmenu’.
 
 File: casual.info,  Node: Man Usage,  Prev: Man Install,  Up: Man
 
-5.14.2 Man Usage
+5.15.2 Man Usage
 ----------------
 
 �[image src="images/casual-man-screenshot.png"�]
@@ -2679,7 +2784,7 @@ will use Unicode symbols as appropriate in its menus.
 
 File: casual.info,  Node: RE-Builder,  Next: Timezone,  Prev: Man,  Up: Casual 
Modes
 
-5.15 RE-Builder
+5.16 RE-Builder
 ===============
 
 Casual RE-Builder is a user interface for RE-Builder.  Its top level
@@ -2695,7 +2800,7 @@ library is ‘casual-re-builder’.
 
 File: casual.info,  Node: RE-Builder Install,  Next: RE-Builder Usage,  Up: 
RE-Builder
 
-5.15.1 RE-Builder Install
+5.16.1 RE-Builder Install
 -------------------------
 
 The main menu for Casual RE-Builder is ‘casual-re-builder-tmenu’.  Bind
@@ -2708,7 +2813,7 @@ this menu to your preference in the keymaps 
‘reb-mode-map’ and
 
 File: casual.info,  Node: RE-Builder Usage,  Prev: RE-Builder Install,  Up: 
RE-Builder
 
-5.15.2 RE-Builder Usage
+5.16.2 RE-Builder Usage
 -----------------------
 
 �[image src="images/casual-re-builder-screenshot.png"�]
@@ -2790,7 +2895,7 @@ Name        Plain      Unicode
 
 File: casual.info,  Node: Timezone,  Prev: RE-Builder,  Up: Casual Modes
 
-5.16 Timezone
+5.17 Timezone
 =============
 
 Casual Timezone is a library of commands to work with different time
@@ -2813,7 +2918,7 @@ Casual Timezone only supports systems that have a tz 
database
 
 File: casual.info,  Node: Timezone Install,  Next: Timezone Usage,  Up: 
Timezone
 
-5.16.1 Timezone Install
+5.17.1 Timezone Install
 -----------------------
 
 Casual Timezone is configured as part of Casual EditKit in the Tools
@@ -2826,7 +2931,7 @@ who wish to access it directly.
 
 File: casual.info,  Node: Timezone Usage,  Prev: Timezone Install,  Up: 
Timezone
 
-5.16.2 Timezone Usage
+5.17.2 Timezone Usage
 ---------------------
 
 �[image src="images/casual-timezone-planner-screenshot.png"�]
@@ -2858,7 +2963,7 @@ below.
 
 File: casual.info,  Node: Timezone Formatting,  Next: Planner Configuration,  
Up: Timezone Usage
 
-5.16.2.1 Timezone Formatting
+5.17.2.1 Timezone Formatting
 ............................
 
 The formatted representation of time in Casual Timezone is set by the
@@ -2885,7 +2990,7 @@ These variables can be customized via the Transient menu
 
 File: casual.info,  Node: Planner Configuration,  Next: Zoneinfo Database,  
Prev: Timezone Formatting,  Up: Timezone Usage
 
-5.16.2.2 Planner Configuration
+5.17.2.2 Planner Configuration
 ..............................
 
 The following variables can control how working hours are displayed in
@@ -2905,7 +3010,7 @@ These variables can be customized via the Transient menu
 
 File: casual.info,  Node: Zoneinfo Database,  Next: Timezone Unicode Symbol 
Support,  Prev: Planner Configuration,  Up: Timezone Usage
 
-5.16.2.3 Zoneinfo Database
+5.17.2.3 Zoneinfo Database
 ..........................
 
 The variable ‘casual-timezone-zone-info-database’ is default set to the
@@ -2915,7 +3020,7 @@ zoneinfo database is located at a different path.
 
 File: casual.info,  Node: Timezone Unicode Symbol Support,  Prev: Zoneinfo 
Database,  Up: Timezone Usage
 
-5.16.2.4 Timezone Unicode Symbol Support
+5.17.2.4 Timezone Unicode Symbol Support
 ........................................
 
 By enabling “‘u’ Use Unicode Symbols” from the Settings menu, Casual
@@ -3011,6 +3116,9 @@ Index for this user guide.
 * Calendar Install:                      Calendar Install.     (line  6)
 * Calendar Usage:                        Calendar Usage.       (line  6)
 * Casual Modes:                          Casual Modes.         (line  6)
+* Compile:                               Compile.              (line  6)
+* Compile Install:                       Compile Install.      (line  6)
+* Compile Usage:                         Compile Usage.        (line  6)
 * Copy commands:                         Edit commands.        (line 27)
 * Customization:                         Customization.        (line  6)
 * Cut commands:                          Edit commands.        (line 34)
@@ -3112,6 +3220,7 @@ Variables, functions, commands, and menus referenced by 
this user guide.
 * casual-calc-tmenu:                     Calc.                 (line  6)
 * casual-calendar:                       Calendar.             (line  6)
 * casual-calendar-tmenu:                 Calendar.             (line  6)
+* casual-compile-tmenu:                  Compile.              (line  6)
 * casual-dired-search-replace-tmenu:     Dired Search & Replace.
                                                                (line  6)
 * casual-dired-sort-by-tmenu:            Dired Enhanced Sorting.
@@ -3165,110 +3274,113 @@ Variables, functions, commands, and menus referenced 
by this user guide.
 
 Tag Table:
 Node: Top268
-Node: Introduction4118
-Node: Motivations4286
-Node: Transient Conventions5793
-Node: Requirements7455
-Node: Install7743
-Node: Upgrading to Casual 2x8795
-Node: If you do not use use-package to configure Casual9178
-Node: If you have used use-package to configure Casual10151
-Node: A Note on Package Dependencies11098
-Node: UX Conventions12175
-Node: Casual Modes14925
-Node: Agenda15950
-Node: Agenda Install16343
-Node: Agenda Usage16939
-Node: Bookmarks18841
-Node: Bookmarks Install19211
-Node: Bookmarks Usage20731
-Node: Calc22186
-Node: Calc Install22452
-Node: Calc Usage22795
-Node: Calendar25362
-Node: Calendar Install25817
-Node: Calendar Usage26220
-Node: Diary & Goto Menu27405
-Node: Calendar System Date Conversion27792
-Node: Calendar Settings Menu29582
-Node: Calendar Unicode Symbol Support29997
-Node: Dired30332
-Node: Dired Requirements30705
-Node: macOS31052
-Node: Windows31554
-Node: Dired Install31988
-Node: Dired Usage35481
-Node: Dired Enhanced Sorting37224
-Node: Dired Search & Replace37876
-Node: Bulk Dired Operations38756
-Node: Dired Link39177
-Node: Dired Unicode Symbol Support39554
-Node: EditKit40092
-Node: EditKit Install40901
-Node: EditKit Usage41853
-Node: Register commands43104
-Node: Edit commands43692
-Node: Window management46519
-Node: Search & Replace commands47310
-Node: Open commands47950
-Node: Project commands48381
-Node: Bookmark commands48661
-Node: Emoji & Symbol Insertion48975
-Node: Tool commands49457
-Node: Narrow/Widen Commands49887
-Node: Macro50924
-Node: EditKit Settings51285
-Node: Eshell51968
-Node: Eshell Install52289
-Node: Eshell Usage52583
-Node: Help53649
-Node: Help Install53969
-Node: Help Usage55846
-Node: IBuffer56803
-Node: IBuffer Install57454
-Node: IBuffer Usage59166
-Node: IBuffer Marking and Operating60243
-Node: IBuffer Filtering61217
-Node: IBuffer Sorting66843
-Node: IBuffer Unicode Symbol Support67232
-Node: Image67808
-Node: Image Install68360
-Node: Image Usage68691
-Node: Image Resize69602
-Node: Image Unicode Symbol Support70655
-Node: Image Mode Command Naming71001
-Node: Info74632
-Node: Info Install74937
-Node: Info Usage76617
-Node: I-Search78031
-Node: I-Search Install78419
-Node: I-Search Usage78857
-Node: Make80192
-Node: Make Install80484
-Node: Make Usage80822
-Node: Makefile Type Selection82193
-Node: Automatic Variables82644
-Node: Make Unicode Symbol Support83276
-Node: Man83590
-Node: Man Install83856
-Node: Man Usage85723
-Node: RE-Builder87523
-Node: RE-Builder Install87863
-Node: RE-Builder Usage88346
-Node: Timezone91726
-Node: Timezone Install92463
-Node: Timezone Usage92900
-Node: Timezone Formatting93865
-Node: Planner Configuration94938
-Node: Zoneinfo Database95719
-Node: Timezone Unicode Symbol Support96109
-Node: Customization96441
-Node: Feedback & Discussion96755
-Node: Sponsorship97173
-Node: About Casual97549
-Node: Acknowledgments97847
-Node: Main Index98241
-Node: Variable Index105720
+Node: Introduction4178
+Node: Motivations4346
+Node: Transient Conventions5853
+Node: Requirements7515
+Node: Install7803
+Node: Upgrading to Casual 2x8894
+Node: If you do not use use-package to configure Casual9277
+Node: If you have used use-package to configure Casual10250
+Node: A Note on Package Dependencies11197
+Node: UX Conventions12274
+Node: Casual Modes15024
+Node: Agenda16061
+Node: Agenda Install16454
+Node: Agenda Usage17050
+Node: Bookmarks18952
+Node: Bookmarks Install19322
+Node: Bookmarks Usage20842
+Node: Calc22297
+Node: Calc Install22563
+Node: Calc Usage22906
+Node: Calendar25473
+Node: Calendar Install25930
+Node: Calendar Usage26333
+Node: Diary & Goto Menu27518
+Node: Calendar System Date Conversion27905
+Node: Calendar Settings Menu29695
+Node: Calendar Unicode Symbol Support30110
+Node: Compile30445
+Node: Compile Install31409
+Node: Compile Usage32890
+Node: Dired34042
+Node: Dired Requirements34414
+Node: macOS34761
+Node: Windows35263
+Node: Dired Install35697
+Node: Dired Usage39190
+Node: Dired Enhanced Sorting40933
+Node: Dired Search & Replace41585
+Node: Bulk Dired Operations42465
+Node: Dired Link42886
+Node: Dired Unicode Symbol Support43263
+Node: EditKit43801
+Node: EditKit Install44610
+Node: EditKit Usage45562
+Node: Register commands46813
+Node: Edit commands47401
+Node: Window management50228
+Node: Search & Replace commands51019
+Node: Open commands51659
+Node: Project commands52090
+Node: Bookmark commands52370
+Node: Emoji & Symbol Insertion52684
+Node: Tool commands53166
+Node: Narrow/Widen Commands53596
+Node: Macro54633
+Node: EditKit Settings54994
+Node: Eshell55677
+Node: Eshell Install55998
+Node: Eshell Usage56292
+Node: Help57358
+Node: Help Install57678
+Node: Help Usage59555
+Node: IBuffer60512
+Node: IBuffer Install61165
+Node: IBuffer Usage62879
+Node: IBuffer Marking and Operating63958
+Node: IBuffer Filtering64934
+Node: IBuffer Sorting70562
+Node: IBuffer Unicode Symbol Support70953
+Node: Image71531
+Node: Image Install72083
+Node: Image Usage72414
+Node: Image Resize73325
+Node: Image Unicode Symbol Support74378
+Node: Image Mode Command Naming74724
+Node: Info78355
+Node: Info Install78660
+Node: Info Usage80340
+Node: I-Search81754
+Node: I-Search Install82142
+Node: I-Search Usage82580
+Node: Make83915
+Node: Make Install84207
+Node: Make Usage84545
+Node: Makefile Type Selection85916
+Node: Automatic Variables86367
+Node: Make Unicode Symbol Support86999
+Node: Man87313
+Node: Man Install87579
+Node: Man Usage89446
+Node: RE-Builder91246
+Node: RE-Builder Install91586
+Node: RE-Builder Usage92069
+Node: Timezone95449
+Node: Timezone Install96186
+Node: Timezone Usage96623
+Node: Timezone Formatting97588
+Node: Planner Configuration98661
+Node: Zoneinfo Database99442
+Node: Timezone Unicode Symbol Support99832
+Node: Customization100164
+Node: Feedback & Discussion100478
+Node: Sponsorship100896
+Node: About Casual101272
+Node: Acknowledgments101570
+Node: Main Index101964
+Node: Variable Index109662
 
 End Tag Table
 
diff --git a/docs/casual.org b/docs/casual.org
index a6c2e10619..559bc245ed 100644
--- a/docs/casual.org
+++ b/docs/casual.org
@@ -134,6 +134,7 @@ Configuration of a particular Casual user interface is 
performed per mode. Go to
 - [[#bookmarks-install][Bookmarks]]
 - [[#calc-install][Calc]]
 - [[#calendar-install][Calendar]]
+- [[#compile-install][Compile]]
 - [[#dired-install][Dired]]
 - [[#editkit-install][EditKit]]
 - [[#eshell-install][Eshell]]
@@ -235,6 +236,7 @@ The following modes are supported by Casual:
 #+INCLUDE: "./bookmarks.org" :minlevel 2
 #+INCLUDE: "./calc.org" :minlevel 2
 #+INCLUDE: "./calendar.org" :minlevel 2
+#+INCLUDE: "./compile.org" :minlevel 2
 #+INCLUDE: "./dired.org" :minlevel 2
 #+INCLUDE: "./editkit.org" :minlevel 2
 #+INCLUDE: "./eshell.org" :minlevel 2
diff --git a/docs/casual.texi b/docs/casual.texi
index 329dfc39f2..ecdd6cfb2c 100644
--- a/docs/casual.texi
+++ b/docs/casual.texi
@@ -87,6 +87,7 @@ Casual Modes
 * Bookmarks::
 * Calc::
 * Calendar::
+* Compile::
 * Dired::
 * EditKit::
 * Eshell::
@@ -127,6 +128,11 @@ Calendar Usage
 * Calendar Settings Menu::
 * Calendar Unicode Symbol Support::
 
+Compile
+
+* Compile Install::
+* Compile Usage::
+
 Dired
 
 * Dired Requirements::
@@ -389,6 +395,8 @@ Configuration of a particular Casual user interface is 
performed per mode. Go to
 @item
 @ref{Calendar Install, , Calendar}
 @item
+@ref{Compile Install, , Compile}
+@item
 @ref{Dired Install, , Dired}
 @item
 @ref{EditKit Install, , EditKit}
@@ -531,6 +539,7 @@ The following modes are supported by Casual:
 * Bookmarks::
 * Calc::
 * Calendar::
+* Compile::
 * Dired::
 * EditKit::
 * Eshell::
@@ -1001,6 +1010,111 @@ From the main menu, choosing “@kbd{,} Settings›” will 
provide a menu of fr
 
 By enabling “@kbd{u} Use Unicode Symbols” from the Settings menu, Casual 
Calendar will use Unicode symbols as appropriate in its menus.
 
+@node Compile
+@section Compile
+
+@cindex Compile
+@vindex casual-compile-tmenu
+
+Casual Compile is a user interface for the output of the @code{compile} 
command (@ref{Compilation,,,emacs,}). This output buffer uses the major mode 
@code{compilation-mode}, whose commands are surfaced by Casual Compile.
+
+The output of Emacs-wrapped Grep commands such as @code{rgrep}, @code{grep}, 
and @code{lgrep} uses @code{grep-mode} which is derived from 
@code{compilation-mode}. As such the main menu @code{casual-compile-tmenu} can 
be used for both @code{compile} and Grep commands.
+
+The screenshot below shows the menu for compilation results.
+
+@image{images/casual-compile-screenshot,,,,png}
+
+The screenshot below shows the menu for Grep results. Note the menu label 
changes based on the output mode (in this case @code{grep-mode}).
+
+@image{images/casual-compile-grep-screenshot,,,,png}
+
+@menu
+* Compile Install::
+* Compile Usage::
+@end menu
+
+@node Compile Install
+@subsection Compile Install
+
+@cindex Compile Install
+
+In your initialization file, bind the Transient @code{casual-compile-tmenu} to 
your key binding of preference.
+
+@lisp
+(keymap-set compilation-mode-map "C-o" #'casual-compile-tmenu)
+@end lisp
+
+@code{casual-compile-tmenu} deviates from the default bindings of 
@code{compilation-mode-map} as shown in the table below to support using a 
single key on an @samp{en.US} keyboard.
+
+@multitable {aaaaaaaaaaaaaaa} {aaaaaaaaaaaaaa} {aaaaaaaaaaaaaaaaaaaaaaaaaa} 
{aaaaaaaaaaaaaaaaaaa}
+@headitem Default Binding
+@tab Casual Binding
+@tab Command
+@tab Notes
+@item M-p
+@tab k
+@tab compilation-previous-error
+@tab vi-style navigation
+@item M-n
+@tab j
+@tab compilation-next-error
+@tab vi-style navigation
+@item M-@{
+@tab [
+@tab compilation-previous-file
+@tab 
+@item M-@}
+@tab ]
+@tab compilation-next-file
+@tab 
+@item C-o
+@tab o
+@tab compilation-display-error
+@tab 
+@end multitable
+
+The following keybindings are recommended to support consistent behavior 
between @code{compilation-mode-map} and @code{casual-compile-tmenu}.
+
+@lisp
+(keymap-set compilation-mode-map "k" #'compilation-previous-error)
+(keymap-set compilation-mode-map "j" #'compilation-next-error)
+(keymap-set compilation-mode-map "o" #'compilation-display-error)
+(keymap-set compilation-mode-map "[" #'compilation-previous-file)
+(keymap-set compilation-mode-map "]" #'compilation-next-file)
+@end lisp
+
+@node Compile Usage
+@subsection Compile Usage
+
+@cindex Compile Usage
+
+@image{images/casual-compile-screenshot,,,,png}
+
+After running @code{compile}, invoke @code{casual-compile-tmenu} in the buffer 
named @samp{✳︎compilation✳︎} using the binding @code{C-o} (or your binding of 
preference).
+
+The following sections are offered in the menu:
+
+@table @asis
+@item Follow
+Navigate the point while opening the location of the error in the source file 
in another window.
+@item Error
+Error operations.
+@item File
+If there are errors in multiple files, navigate to the file.
+@item Compile
+Get compile for different Elisp types. Note that the “@kbd{k} Kill” item is 
displayed when there is a running job.
+@end table
+
+
+If the output window is from a Grep command, @code{casual-compile-tmenu} will 
adjust its label accordingly as shown below.
+
+@image{images/casual-compile-grep-screenshot,,,,png}
+
+
+@majorheading Compile Mode Unicode Symbol Support
+
+By enabling “@kbd{u} Use Unicode Symbols” from the Settings menu, Casual 
Compile will use Unicode symbols as appropriate in its menus.
+
 @node Dired
 @section Dired
 
diff --git a/docs/compile.org b/docs/compile.org
new file mode 100644
index 0000000000..b6e0514f30
--- /dev/null
+++ b/docs/compile.org
@@ -0,0 +1,73 @@
+* Compile
+#+CINDEX: Compile
+#+VINDEX: casual-compile-tmenu
+
+Casual Compile is a user interface for the output of the ~compile~ command 
([[info:emacs#Compilation]]). This output buffer uses the major mode 
~compilation-mode~, whose commands are surfaced by Casual Compile.
+
+The output of Emacs-wrapped Grep commands such as ~rgrep~, ~grep~, and ~lgrep~ 
uses ~grep-mode~ which is derived from ~compilation-mode~. As such the main 
menu ~casual-compile-tmenu~ can be used for both ~compile~ and Grep commands.
+
+The screenshot below shows the menu for compilation results.
+
+[[file:images/casual-compile-screenshot.png]]
+
+The screenshot below shows the menu for Grep results. Note the menu label 
changes based on the output mode (in this case ~grep-mode~).
+
+[[file:images/casual-compile-grep-screenshot.png]]
+
+** Compile Install
+:PROPERTIES:
+:CUSTOM_ID: compile-install
+:END:
+
+#+CINDEX: Compile Install
+
+In your initialization file, bind the Transient ~casual-compile-tmenu~ to your 
key binding of preference.
+
+#+begin_src elisp :lexical no
+  (keymap-set compilation-mode-map "C-o" #'casual-compile-tmenu)
+#+end_src
+
+~casual-compile-tmenu~ deviates from the default bindings of 
~compilation-mode-map~ as shown in the table below to support using a single 
key on an =en.US= keyboard.
+
+| Default Binding | Casual Binding | Command                    | Notes        
       |
+|-----------------+----------------+----------------------------+---------------------|
+| M-p             | k              | compilation-previous-error | vi-style 
navigation |
+| M-n             | j              | compilation-next-error     | vi-style 
navigation |
+| M-{             | [              | compilation-previous-file  |              
       |
+| M-}             | ]              | compilation-next-file      |              
       |
+| C-o             | o              | compilation-display-error  |              
       |
+
+The following keybindings are recommended to support consistent behavior 
between ~compilation-mode-map~ and ~casual-compile-tmenu~.
+
+#+begin_src elisp :lexical no
+  (keymap-set compilation-mode-map "k" #'compilation-previous-error)
+  (keymap-set compilation-mode-map "j" #'compilation-next-error)
+  (keymap-set compilation-mode-map "o" #'compilation-display-error)
+  (keymap-set compilation-mode-map "[" #'compilation-previous-file)
+  (keymap-set compilation-mode-map "]" #'compilation-next-file)
+#+end_src
+
+** Compile Usage
+#+CINDEX: Compile Usage
+
+[[file:images/casual-compile-screenshot.png]]
+
+After running ~compile~, invoke ~casual-compile-tmenu~ in the buffer named 
=✳︎compilation✳︎= using the binding ~C-o~ (or your binding of preference).
+
+The following sections are offered in the menu:
+
+- Follow :: Navigate the point while opening the location of the error in the 
source file in another window.
+- Error :: Error operations.
+- File :: If there are errors in multiple files, navigate to the file.
+- Compile :: Get compile for different Elisp types. Note that the 
“{{{kbd(k)}}} Kill” item is displayed when there is a running job.
+
+
+If the output window is from a Grep command, ~casual-compile-tmenu~ will 
adjust its label accordingly as shown below.
+
+[[file:images/casual-compile-grep-screenshot.png]]
+
+  
+#+TEXINFO: @majorheading Compile Mode Unicode Symbol Support
+
+By enabling “{{{kbd(u)}}} Use Unicode Symbols” from the Settings menu, Casual 
Compile will use Unicode symbols as appropriate in its menus.
+
diff --git a/docs/images/casual-compile-grep-screenshot.png 
b/docs/images/casual-compile-grep-screenshot.png
new file mode 100644
index 0000000000..e5711a1e73
Binary files /dev/null and b/docs/images/casual-compile-grep-screenshot.png 
differ
diff --git a/docs/images/casual-compile-screenshot.png 
b/docs/images/casual-compile-screenshot.png
new file mode 100644
index 0000000000..95528db0b7
Binary files /dev/null and b/docs/images/casual-compile-screenshot.png differ
diff --git a/lisp/Makefile b/lisp/Makefile
index 5bd00d6df4..750b1597ad 100644
--- a/lisp/Makefile
+++ b/lisp/Makefile
@@ -23,6 +23,7 @@ agenda-tests                                  \
 bookmarks-tests                                        \
 calc-tests                                     \
 calendar-tests                                 \
+compile-tests                                  \
 dired-tests                                    \
 editkit-tests                                  \
 eshell-tests                                   \
@@ -55,6 +56,10 @@ calc-tests:
 calendar-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-calendar.make tests
 
+.PHONY: compile-tests
+compile-tests:
+       $(MAKE) -C $(SRC_DIR) -f Makefile-compile.make tests
+
 .PHONY: dired-tests
 dired-tests:
        $(MAKE) -C $(SRC_DIR) -f Makefile-dired.make tests
diff --git a/lisp/Makefile-compile.make b/lisp/Makefile-compile.make
new file mode 100644
index 0000000000..ab09c7f592
--- /dev/null
+++ b/lisp/Makefile-compile.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-compile
+ELISP_INCLUDES=casual-compile-utils.el \
+casual-compile-settings.el
+ELISP_PACKAGES=
+ELISP_TEST_INCLUDES=casual-compile-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-compile-settings.el b/lisp/casual-compile-settings.el
new file mode 100644
index 0000000000..30bc846d91
--- /dev/null
+++ b/lisp/casual-compile-settings.el
@@ -0,0 +1,114 @@
+;;; casual-compile-settings.el --- Casual Compile 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 'compile)
+(require 'casual-lib)
+
+(transient-define-prefix casual-compile-settings-tmenu ()
+  "Casual Compile settings menu."
+  ["Casual Compile Settings"
+   [("s" "Scroll Output" casual-compile--customize-compilation-scroll-output
+     :description (lambda ()
+                    (if compilation-scroll-output
+                        (format "Scroll Output (%s)" compilation-scroll-output)
+                      "Scroll Output (unset)")))
+
+    ("e" "Autojump First Error"
+     casual-compile--customize-compilation-auto-jump-to-first-error
+     :description (lambda ()
+                    (casual-lib-checkbox-label
+                     compilation-auto-jump-to-first-error
+                     "Autojump First Error")))
+    ("m" "Max Output Line Length"
+     casual-compile--customize-compilation-max-output-line-length
+     :description (lambda ()
+                    (if compilation-max-output-line-length
+                        (format "Max Output Line Length (%s)"
+                                compilation-max-output-line-length)
+                      "Max Output Line Length (unhidden)")))]
+   [("G" "Compilation Group" casual-compile--customize-group)
+    (casual-lib-customize-unicode)
+    (casual-lib-customize-hide-navigation)]]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   ("a" "About" casual-compile-about :transient nil)
+   (casual-lib-quit-all)])
+
+(defun casual-compile--customize-group ()
+  "Customize Compilefile group."
+  (interactive)
+  (customize-group "compilation"))
+
+(defun casual-compile--customize-compilation-scroll-output ()
+  "If non-nil, scroll the *compilation* buffer window as output appears.
+
+Customize `compilation-scroll-output'."
+  (interactive)
+  (customize-variable 'compilation-scroll-output))
+
+(defun casual-compile--customize-compilation-auto-jump-to-first-error ()
+  "If non-nil, automatically jump to the first error during compilation.
+
+Customize `compilation-auto-jump-to-first-error'."
+  (interactive)
+  (customize-variable 'compilation-auto-jump-to-first-error))
+
+(defun casual-compile--customize-compilation-max-output-line-length ()
+  "Output lines that are longer than this value will be hidden.
+
+Customize `compilation-max-output-line-length'."
+  (interactive)
+  (customize-variable 'compilation-max-output-line-length))
+
+(defun casual-compile-about-compile ()
+  "Casual Compile is a Transient menu for `compilation-mode'.
+
+Learn more about using Casual Compile 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 Compile, consider making a modest financial
+contribution to help support its development and maintenance.
+URL `https://www.buymeacoffee.com/kickingvegas'
+
+Casual Compile was conceived and crafted by Charles Choi in San Francisco,
+California.
+
+Thank you for using Casual Compile.
+
+Always choose love."
+  (ignore))
+
+(defun casual-compile-about ()
+  "About information for Casual Compile."
+  (interactive)
+  (describe-function #'casual-compile-about-compile))
+
+(provide 'casual-compile-settings)
+;;; casual-compile-settings.el ends here
diff --git a/lisp/casual-compile-utils.el b/lisp/casual-compile-utils.el
new file mode 100644
index 0000000000..125876a884
--- /dev/null
+++ b/lisp/casual-compile-utils.el
@@ -0,0 +1,66 @@
+;;; casual-compile-utils.el --- Casual Compile 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 'simple)
+(require 'grep)
+(require 'compile)
+(require 'casual-lib)
+
+(defconst casual-compile-unicode-db
+  '((:previous . '("↑" "Previous"))
+    (:next . '("↓" "Next"))
+    (:goto . '("🚀" "Goto…"))
+    (:refresh . '("⟳" "Refresh"))
+    (:kill . '("×" "Kill"))
+    (:display . '("👀" "Display")))
+
+  "Unicode symbol DB to use for Compile Transient menus.")
+
+(defun casual-compile-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-compile-unicode-db))
+
+(defun casual-compile--select-mode-label (clabel glabel &optional dlabel)
+  "Depending on `major-mode', output CLABEL, GLABEL or DLABEL."
+  (let ((dlabel (if dlabel dlabel clabel)))
+    (cond
+     ((eq major-mode 'grep-mode) glabel)
+     ((eq major-mode 'compilation-mode) clabel)
+     (t dlabel))))
+
+(defun casual-compile--compilation-running-p ()
+  "Predicate if compilation is running."
+  (let ((buffer (compilation-find-buffer)))
+    (if (get-buffer-process buffer)
+       t
+      nil)))
+
+(provide 'casual-compile-utils)
+;;; casual-compile-utils.el ends here
diff --git a/lisp/casual-compile.el b/lisp/casual-compile.el
new file mode 100644
index 0000000000..071dc0641f
--- /dev/null
+++ b/lisp/casual-compile.el
@@ -0,0 +1,113 @@
+;;; casual-compile.el --- Transient UI for Compilation Mode -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2025  Charles 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
+;; `compilation-mode'.
+
+;; INSTALL
+
+;; In your initialization file, bind the Transient `casual-compile-tmenu' to
+;; your key binding of preference.
+
+;; (keymap-set compilation-mode-map "C-o" #'casual-compile-tmenu)
+
+;; The following keybindings are recommended to support consistent behavior
+;; between `compilation-mode-map' and `casual-compile-tmenu'.
+
+;; (keymap-set compilation-mode-map "k" #'compilation-previous-error)
+;; (keymap-set compilation-mode-map "j" #'compilation-next-error)
+;; (keymap-set compilation-mode-map "o" #'compilation-display-error)
+;; (keymap-set compilation-mode-map "[" #'compilation-previous-file)
+;; (keymap-set compilation-mode-map "]" #'compilation-next-file)
+
+;;; Code:
+(require 'casual-compile-settings)
+(require 'casual-compile-utils)
+
+(transient-define-prefix casual-compile-tmenu ()
+  "Casual main menu for `compilation-mode'."
+  :refresh-suffixes t
+  ["Casual Compile"
+   :description (lambda ()
+                  (format "%s Results"
+                          (casual-compile--select-mode-label "Compilation"
+                                                             "Grep")))
+   ["Follow"
+    ("p" "Previous" previous-error-no-select
+     :description (lambda () (casual-compile-unicode-get :previous))
+     :transient t)
+    ("n" "Next" next-error-no-select
+     :description (lambda () (casual-compile-unicode-get :next))
+     :transient t)]
+
+   ["Item"
+    :description (lambda () (casual-compile--select-mode-label "Error"
+                                                               "Match"))
+    :pad-keys t
+    ("k" "Previous" compilation-previous-error
+     :description (lambda () (casual-compile-unicode-get :previous))
+     :transient t)
+    ("j" "Next" compilation-next-error
+     :description (lambda () (casual-compile-unicode-get :next))
+     :transient t)
+    ("o" "Display" compilation-display-error
+     :description (lambda () (casual-compile-unicode-get :display))
+     :transient t)
+    ("RET" "Goto" compile-goto-error
+     :description (lambda () (casual-compile-unicode-get :goto)))]
+
+   ["File"
+    ("[" "Previous" compilation-previous-file
+     :description (lambda () (casual-compile-unicode-get :previous))
+     :transient t)
+    ("]" "Next" compilation-next-file
+     :description (lambda () (casual-compile-unicode-get :next))
+     :transient t)]
+
+   ["Compile"
+    :description (lambda ()
+                   (casual-compile--select-mode-label
+                    "Compile"
+                    "Refresh"))
+    ("g" "Recompile" recompile
+     :description (lambda ()
+                    (casual-compile--select-mode-label
+                     "Recompile"
+                     (casual-compile-unicode-get :refresh)))
+
+     :transient t)
+    ("c" "Compile" compile
+     :if-not (lambda () (derived-mode-p 'grep-mode)))
+    ("k" "Kill" kill-compilation
+     :description (lambda () (casual-compile-unicode-get :kill))
+     :transient t
+     :if casual-compile--compilation-running-p)
+    ]]
+
+  [:class transient-row
+   (casual-lib-quit-one)
+   (casual-lib-quit-all)
+   ("," "Settings›" casual-compile-settings-tmenu)
+   ("q" "Quit" quit-window)])
+
+(provide 'casual-compile)
+;;; casual-compile.el ends here
diff --git a/tests/Makefile b/tests/Makefile
index ce30421d6e..ae04ecd1dd 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -22,6 +22,7 @@ agenda-tests                                  \
 bookmarks-tests                                        \
 calc-tests                                     \
 calendar-tests                                 \
+compile-tests                                  \
 dired-tests                                    \
 editkit-tests                                  \
 eshell-tests                                   \
@@ -41,6 +42,7 @@ agenda-tests                                  \
 bookmarks-tests                                        \
 calc-tests                                     \
 calendar-tests                                 \
+compile-tests                                  \
 dired-tests                                    \
 editkit-tests                                  \
 eshell-tests                                   \
@@ -68,6 +70,9 @@ calc-tests:
 calendar-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
+compile-tests:
+       $(MAKE) -C $(SRC_DIR) $@
+
 dired-tests:
        $(MAKE) -C $(SRC_DIR) $@
 
diff --git a/tests/casual-compile-test-utils.el 
b/tests/casual-compile-test-utils.el
new file mode 100644
index 0000000000..8de50ccd7f
--- /dev/null
+++ b/tests/casual-compile-test-utils.el
@@ -0,0 +1,58 @@
+;;; casual-compile-test-utils.el --- Casual Test Utils       -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2024-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)
+(require 'kmacro)
+(require 'compile)
+
+(defun casualt-compile-setup (&optional filename)
+  "Casual menu test setup function."
+  (when filename
+    (let ((temp-filename (concat "/tmp/" filename)))
+      (with-temp-file temp-filename
+        (insert "# Hello
+Hello 1
+Hello 2
+Hello 3")
+        (goto-char (point-min)))
+      (find-file temp-filename)
+      (compilation-mode t)
+      (rgrep "Hello" "foo" "/tmp/")
+      (switch-to-buffer "*grep*")
+      )))
+
+(defun casualt-compile-breakdown (&optional filename)
+  "Casual menu test breakdown function, if CLEAR is non-nil then clear state."
+  (when filename
+    (let ((temp-filename (concat "/tmp/" filename)))
+      (switch-to-buffer "*grep*")
+      (kill-buffer)
+      (switch-to-buffer filename)
+      (kill-buffer)
+      (delete-file temp-filename))))
+
+(provide 'casual-compile-test-utils)
+;;; casual-compile-test-utils.el ends here
diff --git a/tests/test-casual-compile-settings.el 
b/tests/test-casual-compile-settings.el
new file mode 100644
index 0000000000..b656feaa68
--- /dev/null
+++ b/tests/test-casual-compile-settings.el
@@ -0,0 +1,56 @@
+;;; test-casual-compile-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-compile-test-utils)
+(require 'casual-compile-settings)
+
+(ert-deftest test-casual-compile-settings-tmenu ()
+  (let ()
+    (cl-letf ((casualt-mock #'casual-compile--customize-group)
+              (casualt-mock 
#'casual-compile--customize-compilation-scroll-output)
+              (casualt-mock 
#'casual-compile--customize-compilation-auto-jump-to-first-error)
+              (casualt-mock 
#'casual-compile--customize-compilation-max-output-line-length)
+              (casualt-mock #'casual-compile-about))
+
+      (let ((test-vectors
+             '((:binding "s" :command 
casual-compile--customize-compilation-scroll-output)
+               (:binding "e" :command 
casual-compile--customize-compilation-auto-jump-to-first-error)
+               (:binding "m" :command 
casual-compile--customize-compilation-max-output-line-length)
+               (:binding "G" :command casual-compile--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-compile-about))))
+
+        (casualt-suffix-testcase-runner test-vectors
+                                        #'casual-compile-settings-tmenu
+                                        '(lambda () (random 5000)))))))
+
+(ert-deftest test-casual-compile-about ()
+  (should (stringp (casual-compile-about))))
+
+(provide 'test-casual-compile-settings)
+;;; test-casual-compile-setttings.el ends here
diff --git a/tests/test-casual-compile-utils.el 
b/tests/test-casual-compile-utils.el
new file mode 100644
index 0000000000..0ee744930f
--- /dev/null
+++ b/tests/test-casual-compile-utils.el
@@ -0,0 +1,50 @@
+;;; test-casual-compile-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-compile-test-utils)
+(require 'casual-compile-utils)
+
+(ert-deftest test-casual-compile-unicode-get ()
+  (let ((casual-lib-use-unicode nil))
+    (should (string-equal (casual-compile-unicode-get :previous) "Previous"))
+    (should (string-equal (casual-compile-unicode-get :next) "Next"))
+    (should (string-equal (casual-compile-unicode-get :goto) "Goto…"))
+    (should (string-equal (casual-compile-unicode-get :refresh) "Refresh"))
+    (should (string-equal (casual-compile-unicode-get :kill) "Kill"))
+    (should (string-equal (casual-compile-unicode-get :display) "Display")))
+
+  (let ((casual-lib-use-unicode t))
+    (should (string-equal (casual-compile-unicode-get :previous) "↑"))
+    (should (string-equal (casual-compile-unicode-get :next) "↓"))
+    (should (string-equal (casual-compile-unicode-get :goto) "🚀"))
+    (should (string-equal (casual-compile-unicode-get :refresh) "⟳"))
+    (should (string-equal (casual-compile-unicode-get :kill) "×"))
+    (should (string-equal (casual-compile-unicode-get :display) "👀"))
+    ))
+
+
+(provide 'test-casual-compile-utils)
+;;; test-casual-compile-utils.el ends here
diff --git a/tests/test-casual-compile.el b/tests/test-casual-compile.el
new file mode 100644
index 0000000000..5e2e0937c6
--- /dev/null
+++ b/tests/test-casual-compile.el
@@ -0,0 +1,74 @@
+;;; test-casual-compile.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-compile-test-utils)
+(require 'casual-lib-test-utils)
+(require 'casual-compile)
+
+;; TODO: Need to figure out a way to deal with exiting out of grep.
+;; (ert-deftest test-casual-compile-tmenu ()
+;;   (let ((tempfile "foo"))
+;;     ;;(casualt-compile-setup tempfile)
+
+;;     (cl-letf ((casualt-mock #'previous-error-no-select)
+;;               (casualt-mock #'next-error-no-select)
+;;               (casualt-mock #'compilation-previous-error)
+;;               (casualt-mock #'compilation-next-error)
+;;               (casualt-mock #'compilation-display-error)
+;;               (casualt-mock #'compile-goto-error)
+;;               (casualt-mock #'compilation-previous-file)
+;;               (casualt-mock #'compilation-next-file)
+;;               (casualt-mock #'compile)
+;;               (casualt-mock #'recompile)
+;;               (casualt-mock #'kill-compilation)
+;;               (casualt-mock #'casual-compile-settings-tmenu)
+;;               (casualt-mock #'quit-window))
+
+;;       (let ((test-vectors
+;;              '((:binding "n" :command next-error-no-select)
+;;                (:binding "p" :command previous-error-no-select)
+;;                (:binding "j" :command compilation-next-error)
+;;                (:binding "k" :command compilation-previous-error)
+;;                (:binding "o" :command compilation-display-error)
+;;                (:binding "RET" :command compile-goto-error)
+;;                (:binding "[" :command compilation-previous-file)
+;;                (:binding "]" :command compilation-next-file)
+;;                ;; (:binding "c" :command compile)
+;;                ;; (:binding "g" :command recompile)
+;;                ;; (:binding "k" :command kill-compilation)
+;;                (:binding "," :command casual-compile-settings-tmenu)
+;;                (:binding "q" :command quit-window))
+;;              ))
+
+;;         (casualt-suffix-testcase-runner test-vectors
+;;                                         #'casual-compile-tmenu
+;;                                         '(lambda () (random 5000)))))
+;;     ;; (casualt-compile-breakdown tempfile)
+;;     ))
+
+(provide 'test-casual-compile)
+;;; test-casual-compile.el ends here

Reply via email to