branch: elpa/casual
commit f7c60384a4ae46dfde86cb5a1e1961f6815374ef
Merge: d440f3ad2f 796344f604
Author: Charles Choi <[email protected]>
Commit: GitHub <[email protected]>
Merge pull request #112 from kickingvegas/103-support-sentence-spacing-style
Add "Reformat" menu and enhance EditKit Settings menu
---
docs/editkit.org | 17 +++
docs/images/casual-editkit-edit-screenshot.png | Bin 165011 -> 229267 bytes
docs/images/casual-editkit-reformat-screenshot.png | Bin 0 -> 232698 bytes
docs/images/casual-editkit-settings-screenshot.png | Bin 0 -> 262123 bytes
lisp/Makefile-editkit.make | 4 +-
lisp/casual-editkit-settings.el | 125 ++++++++++++++++++++-
lisp/casual-editkit-utils.el | 53 ++++++++-
lisp/casual-editkit.el | 1 -
tests/test-casual-editkit-settings.el | 36 ++++--
tests/test-casual-editkit-utils.el | 43 ++++++-
10 files changed, 255 insertions(+), 24 deletions(-)
diff --git a/docs/editkit.org b/docs/editkit.org
index 2e205aff3c..4bf04b9a1f 100644
--- a/docs/editkit.org
+++ b/docs/editkit.org
@@ -110,6 +110,12 @@ Sorting operations on different sections of text are
supported, as well as suppo
[[file:images/casual-editkit-sort-screenshot.png]]
+*** Reformat (~casual-editkit-reformat-tmenu~)
+Commands to reformat text such as filling, centering, and repunctuating
sentences are provided here. Press ~?~ or ~C-h~ to get help for a specific
command.
+
+[[file:images/casual-editkit-reformat-screenshot.png]]
+
+
** Window management (~casual-editkit-window-tmenu~)
This menu provides support for different Emacs window management commands.
Note that in Emacs, /window/ is defined
[[https://www.gnu.org/software/emacs/manual/html_node/elisp/Basic-Windows.html#:~:text=A%20window%20is%20an%20area,view%20several%20buffers%20at%20once.][differently]]
than its usage in contemporary graphical user interfaces.
[[file:images/casual-editkit-window-screenshot.png]]
@@ -158,6 +164,17 @@ Commands for managing macros are provided for by this
menu. Note that macro crea
[[file:images/casual-editkit-macro-screenshot.png]]
+** Settings (~casual-editkit-settings-tmenu~)
+Configuration of common editing-related settings are provided here. Most all
settings are set via the ~customize-variable~ interface with the following
exceptions for:
+
+- “Auto-fill Mode (~auto-fill-mode~)”
+- “Indent Tabs Mode (~indent-tabs-mode~)”
+- “Fill Column (~set-fill-column~)”
+
+Those commands will instead apply to the current buffer. The variables listed
above can be more permanently set via ~M-x customize-variable~.
+
+[[file:images/casual-editkit-settings-screenshot.png]]
+
* Sponsorship
If you enjoy using Casual EditKit, consider making a modest financial
contribution to help support its development and maintenance.
diff --git a/docs/images/casual-editkit-edit-screenshot.png
b/docs/images/casual-editkit-edit-screenshot.png
index b05b77c211..5417a51e04 100644
Binary files a/docs/images/casual-editkit-edit-screenshot.png and
b/docs/images/casual-editkit-edit-screenshot.png differ
diff --git a/docs/images/casual-editkit-reformat-screenshot.png
b/docs/images/casual-editkit-reformat-screenshot.png
new file mode 100644
index 0000000000..905079a854
Binary files /dev/null and b/docs/images/casual-editkit-reformat-screenshot.png
differ
diff --git a/docs/images/casual-editkit-settings-screenshot.png
b/docs/images/casual-editkit-settings-screenshot.png
new file mode 100644
index 0000000000..b766925fd8
Binary files /dev/null and b/docs/images/casual-editkit-settings-screenshot.png
differ
diff --git a/lisp/Makefile-editkit.make b/lisp/Makefile-editkit.make
index 576e2f7510..a8bc5704e7 100644
--- a/lisp/Makefile-editkit.make
+++ b/lisp/Makefile-editkit.make
@@ -17,8 +17,8 @@ include Makefile--defines.make
PACKAGE_NAME=casual-editkit
ELISP_INCLUDES=casual-editkit-constants.el \
-casual-editkit-utils.el \
-casual-editkit-settings.el
+casual-editkit-settings.el \
+casual-editkit-utils.el
ELISP_PACKAGES=
ELISP_TEST_INCLUDES=casual-editkit-test-utils.el
PACKAGE_PATHS= \
diff --git a/lisp/casual-editkit-settings.el b/lisp/casual-editkit-settings.el
index 7473c77251..b373295b4c 100644
--- a/lisp/casual-editkit-settings.el
+++ b/lisp/casual-editkit-settings.el
@@ -22,21 +22,94 @@
;;
;;; Code:
+(require 'simple)
+(require 'autorevert)
+(require 'delsel)
+(require 'saveplace)
+(require 'savehist)
(require 'casual-lib)
-
(transient-define-prefix casual-editkit-settings-tmenu ()
"Casual EditKit settings menu."
["Casual EditKit: Settings"
- ["Customize"
+ ["Format/Layout"
+ ("f" "Auto-fill Mode" auto-fill-mode
+ :transient t
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ auto-fill-function
+ "Auto-fill Mode")))
+
+ ("t" "Indent Tabs Mode" indent-tabs-mode
+ :transient t
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ indent-tabs-mode
+ "Indent Tabs Mode")))
+
+ ("." "Double Space" casual-editkit--customize-sentence-end-double-space
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ sentence-end-double-space
+ "Double Space Sentences")))
+ ("C" "Fill Column" set-fill-column
+ :description (lambda ()
+ (format "Fill Column (%d)" fill-column)))]
+
+ ["Save"
+ ("p" "Save Place Mode" casual-editkit--customize-save-place-mode
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ save-place-mode
+ "Save Place Mode")))
+
+ ("h" "Save History Mode" casual-editkit--customize-savehist-mode
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ savehist-mode
+ "Save History Mode")))]
+
+ ["Misc"
+ ("S" "Delete Selection Mode"
casual-editkit--customize-delete-selection-mode
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ delete-selection-mode
+ "Delete Selection Mode")))
+
+ ("N" "Require Final Newline"
casual-editkit--customize-require-final-newline
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ require-final-newline
+ "Require Final Newline")))
+
+
+ ("v" "View Read-Only" casual-editkit--customize-view-read-only
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ view-read-only
+ "View Read-Only")))]]
+
+ [["Global Auto-Revert Buffers"
+ ("F" "File Buffers" casual-editkit--customize-global-auto-revert-mode
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ global-auto-revert-mode
+ "File Buffers")))
+
+ ("B" "Non-File Buffers"
casual-editkit--customize-global-auto-revert-non-file-buffers
+ :description (lambda ()
+ (casual-lib-checkbox-label
+ global-auto-revert-non-file-buffers
+ "Non-File Buffers")))]
+
+ ["Casual"
(casual-lib-customize-unicode)
(casual-lib-customize-hide-navigation)]]
[:class transient-row
- (casual-lib-quit-one)
- ("a" "About" casual-editkit-about :transient nil)
-
- (casual-lib-quit-all)])
+ (casual-lib-quit-one)
+ ("a" "About" casual-editkit-about :transient nil)
+ (casual-lib-quit-all)])
(defun casual-editkit-about-editkit ()
"Casual EditKit is a user interface library for Emacs editing commands.
@@ -70,5 +143,45 @@ Always choose love."
(interactive)
(describe-function #'casual-editkit-about-editkit))
+(defun casual-editkit--customize-sentence-end-double-space ()
+ "Customize variable `sentence-end-double-space'."
+ (interactive)
+ (customize-variable 'sentence-end-double-space))
+
+(defun casual-editkit--customize-delete-selection-mode ()
+ "Customize variable `delete-selection-mode'."
+ (interactive)
+ (customize-variable 'delete-selection-mode))
+
+(defun casual-editkit--customize-require-final-newline ()
+ "Customize variable `require-final-newline'."
+ (interactive)
+ (customize-variable 'require-final-newline))
+
+(defun casual-editkit--customize-save-place-mode ()
+ "Customize variable `save-place-mode'."
+ (interactive)
+ (customize-variable 'save-place-mode))
+
+(defun casual-editkit--customize-savehist-mode ()
+ "Customize variable `savehist-mode'."
+ (interactive)
+ (customize-variable 'savehist-mode))
+
+(defun casual-editkit--customize-view-read-only ()
+ "Customize variable `view-read-only'."
+ (interactive)
+ (customize-variable 'view-read-only))
+
+(defun casual-editkit--customize-global-auto-revert-mode ()
+ "Customize variable `global-auto-revert-mode'."
+ (interactive)
+ (customize-variable 'global-auto-revert-mode))
+
+(defun casual-editkit--customize-global-auto-revert-non-file-buffers ()
+ "Customize variable `global-auto-revert-non-file-buffers'."
+ (interactive)
+ (customize-variable 'global-auto-revert-non-file-buffers))
+
(provide 'casual-editkit-settings)
;;; casual-editkit-settings.el ends here
diff --git a/lisp/casual-editkit-utils.el b/lisp/casual-editkit-utils.el
index e236b8b86f..2fc45124a6 100644
--- a/lisp/casual-editkit-utils.el
+++ b/lisp/casual-editkit-utils.el
@@ -27,8 +27,10 @@
(require 'org-agenda)
(require 'recentf)
(require 'simple)
-(require 'casual-lib)
+(require 'text-mode)
+(require 'tabify)
(require 'casual-editkit-constants)
+(require 'casual-editkit-settings)
;;; Predicates
@@ -227,7 +229,9 @@ Commands pertaining to editing operations can be accessed
here."
:if-not casual-editkit-buffer-read-only-p)
("a" "Align Regexp" align-regexp
:inapt-if-not use-region-p)
- ("R" "Rectangle›" casual-editkit-rectangle-tmenu)]]
+ ("R" "Rectangle›" casual-editkit-rectangle-tmenu)
+ ("r" "Reformat›" casual-editkit-reformat-tmenu
+ :if-not (lambda () buffer-read-only))]]
[:class transient-row
@@ -727,6 +731,51 @@ Commands pertaining to macro operations can be accessed
here."
casual-editkit-navigation-group)
+;;;###autoload (autoload 'casual-editkit-reformat-tmenu "casual-editkit-utils"
nil t)
+(transient-define-prefix casual-editkit-reformat-tmenu ()
+ "Menu for ‘Reformat’ commands.
+
+Commands pertaining to reformat operations such as refill can be
+accessed here."
+
+
+ ["Reformat"
+ ["Fill"
+ :pad-keys t
+ ("p" "Paragraph" fill-paragraph)
+ ("r" "Region" fill-region
+ :inapt-if-not use-region-p)
+ ("P" "Region as Paragraph" fill-region-as-paragraph
+ :inapt-if-not use-region-p)
+ ("M-p" "Individual Paragraphs" fill-individual-paragraphs
+ :inapt-if-not use-region-p)
+ ("n" "Non-Uniform Paragraphs" fill-nonuniform-paragraphs
+ :inapt-if-not use-region-p)]
+
+ ["Center"
+ ("C-l" "Line" center-line)
+ ("C-r" "Region" center-region
+ :inapt-if-not use-region-p)
+ ("C-p" "Paragraph" center-paragraph)]
+
+ ["Misc"
+ ("R" "Repunctuate" repunctuate-sentences)
+ ("u" "Untabify" untabify
+ :inapt-if-not use-region-p)]]
+
+ ["Configure"
+ ("a" "Auto-fill Mode" auto-fill-mode
+ :description (lambda ()
+ (casual-lib-checkbox-label auto-fill-function "Auto-fill
Mode")))
+ ("d" "Double Space" casual-editkit--customize-sentence-end-double-space
+ :description (lambda ()
+ (casual-lib-checkbox-label sentence-end-double-space
"Double Space Sentences")))
+
+ ("C" "Fill Column" set-fill-column
+ :description (lambda ()
+ (format "Fill Column (%d)" fill-column)))]
+ casual-editkit-navigation-group)
+
;;; Functions
(defun casual-editkit-macro-info ()
"Get Info for syntax of regexps."
diff --git a/lisp/casual-editkit.el b/lisp/casual-editkit.el
index 266ca306d2..dcd171024e 100644
--- a/lisp/casual-editkit.el
+++ b/lisp/casual-editkit.el
@@ -37,7 +37,6 @@
;;; Code:
(require 'casual-editkit-utils)
-(require 'casual-editkit-settings)
;;;###autoload (autoload 'casual-editkit-main-tmenu "casual-editkit" nil t)
(transient-define-prefix casual-editkit-main-tmenu ()
diff --git a/tests/test-casual-editkit-settings.el
b/tests/test-casual-editkit-settings.el
index c45fef22fd..4756f0a676 100644
--- a/tests/test-casual-editkit-settings.el
+++ b/tests/test-casual-editkit-settings.el
@@ -29,18 +29,30 @@
(require 'casual-editkit-settings)
(ert-deftest test-casual-editkit-settings-tmenu ()
- (let ((tmpfile "casual-editkit-settings-tmenu.txt"))
- (casualt-editkit-setup tmpfile)
- (cl-letf ()
- (let ((test-vectors
- '((:binding "u" :command
casual-lib-customize-casual-lib-use-unicode)
- (:binding "n" :command
casual-lib-customize-casual-lib-hide-navigation)
- (:binding "a" :command casual-editkit-about))))
-
- (casualt-suffix-testcase-runner test-vectors
- #'casual-editkit-settings-tmenu
- '(lambda () (random 5000)))))
- (casualt-editkit-breakdown tmpfile)))
+ (casualt-editkit-setup)
+ (cl-letf ((casualt-mock #'auto-fill-mode)
+ (casualt-mock #'indent-tabs-mode)
+ (casualt-mock #'set-fill-column))
+ (let ((test-vectors
+ '((:binding "f" :command auto-fill-mode)
+ (:binding "t" :command indent-tabs-mode)
+ (:binding "C" :command set-fill-column)
+ (:binding "." :command
casual-editkit--customize-sentence-end-double-space)
+ (:binding "p" :command casual-editkit--customize-save-place-mode)
+ (:binding "h" :command casual-editkit--customize-savehist-mode)
+ (:binding "S" :command
casual-editkit--customize-delete-selection-mode)
+ (:binding "N" :command
casual-editkit--customize-require-final-newline)
+ (:binding "v" :command casual-editkit--customize-view-read-only)
+ (:binding "F" :command
casual-editkit--customize-global-auto-revert-mode)
+ (:binding "B" :command
casual-editkit--customize-global-auto-revert-non-file-buffers)
+ (:binding "u" :command
casual-lib-customize-casual-lib-use-unicode)
+ (:binding "n" :command
casual-lib-customize-casual-lib-hide-navigation)
+ (:binding "a" :command casual-editkit-about))))
+
+ (casualt-suffix-testcase-runner test-vectors
+ #'casual-editkit-settings-tmenu
+ '(lambda () (random 5000)))))
+ (casualt-editkit-breakdown))
(ert-deftest test-casual-editkit-about ()
(should (stringp (casual-editkit-about))))
diff --git a/tests/test-casual-editkit-utils.el
b/tests/test-casual-editkit-utils.el
index 00ee75e4ee..00d9b5dc28 100644
--- a/tests/test-casual-editkit-utils.el
+++ b/tests/test-casual-editkit-utils.el
@@ -130,7 +130,8 @@
(:binding "K" :command keep-lines)
(:binding "f" :command fill-paragraph)
(:binding "a" :command align-regexp)
- (:binding "R" :command casual-editkit-rectangle-tmenu))))
+ (:binding "R" :command casual-editkit-rectangle-tmenu)
+ (:binding "r" :command casual-editkit-reformat-tmenu))))
(casualt-mock-active-region)
(casualt-suffix-testcase-runner test-vectors
#'casual-editkit-edit-tmenu
@@ -621,6 +622,46 @@
'(lambda () (random 5000)))))
(casualt-editkit-breakdown tmpfile)))
+
+(ert-deftest test-casual-editkit-reformat-tmenu ()
+ (let ((tmpfile "casual-editkit-reformat-tmenu.txt"))
+ (casualt-editkit-setup tmpfile)
+ (cl-letf (((symbol-function #'use-region-p) (lambda () t))
+ (casualt-mock #'fill-paragraph)
+ (casualt-mock #'fill-region)
+ (casualt-mock #'fill-region-as-paragraph)
+ (casualt-mock #'fill-individual-paragraphs)
+ (casualt-mock #'fill-nonuniform-paragraphs)
+ (casualt-mock #'center-line)
+ (casualt-mock #'center-region)
+ (casualt-mock #'center-paragraph)
+ (casualt-mock #'repunctuate-sentences)
+ (casualt-mock #'untabify)
+ (casualt-mock #'auto-fill-mode)
+ (casualt-mock #'set-fill-column))
+
+ (let ((test-vectors
+ '((:binding "p" :command fill-paragraph)
+ (:binding "r" :command fill-region)
+ (:binding "P" :command fill-region-as-paragraph)
+ (:binding "M-p" :command fill-individual-paragraphs)
+ (:binding "n" :command fill-nonuniform-paragraphs)
+ (:binding "C-l" :command center-line)
+ (:binding "C-r" :command center-region)
+ (:binding "C-p" :command center-paragraph)
+ (:binding "R" :command repunctuate-sentences)
+ (:binding "u" :command untabify)
+ (:binding "a" :command auto-fill-mode)
+ (:binding "d" :command
casual-editkit--customize-sentence-end-double-space)
+ (:binding "C" :command set-fill-column)
+
+ )))
+ (set-mark-command nil)
+ (casualt-suffix-testcase-runner test-vectors
+ #'casual-editkit-reformat-tmenu
+ '(lambda () (random 5000)))))
+ (casualt-editkit-breakdown tmpfile)))
+
;; -------
(provide 'test-casual-editkit-utils)
;;; test-casual-editkit-utils.el ends here