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