From e5288c990b80dc9ebb9da0ead2a2d03cadd3f042 Mon Sep 17 00:00:00 2001 From: Akhil Wali Date: Tue, 24 Sep 2019 21:32:07 +1200 Subject: [PATCH 1/5] Add god-mode module --- init.example.el | 1 + modules/README.org | 1 + modules/editor/god/autoload/god.el | 76 ++++++++++++++++++++++++++++++ modules/editor/god/config.el | 9 ++++ modules/editor/god/doctor.el | 8 ++++ modules/editor/god/packages.el | 4 ++ 6 files changed, 99 insertions(+) create mode 100644 modules/editor/god/autoload/god.el create mode 100644 modules/editor/god/config.el create mode 100644 modules/editor/god/doctor.el create mode 100644 modules/editor/god/packages.el diff --git a/init.example.el b/init.example.el index aadb388dd..2fbab8d84 100644 --- a/init.example.el +++ b/init.example.el @@ -46,6 +46,7 @@ :editor (evil +everywhere); come to the dark side, we have cookies file-templates ; auto-snippets for empty files + ;;god ; run Emacs commands without modifier keys fold ; (nigh) universal code folding ;;(format +onsave) ; automated prettiness ;;lispy ; vim for lisp, for people who dont like vim diff --git a/modules/README.org b/modules/README.org index 2b329620a..bf953cd21 100644 --- a/modules/README.org +++ b/modules/README.org @@ -52,6 +52,7 @@ Modules that affect and augment your ability to manipulate or insert text. + [[file:editor/file-templates/README.org][file-templates]]: Auto-inserted templates in blank new files + [[file:editor/fold/README.org][fold]]: universal code folding + [[file:editor/format/README.org][format]] =+onsave=: ++ god: run Emacs commands without modifier keys + [[file:editor/lispy/README.org][lispy]]: + multiple-cursors: + [[file:editor/parinfer/README.org][parinfer]]: diff --git a/modules/editor/god/autoload/god.el b/modules/editor/god/autoload/god.el new file mode 100644 index 000000000..3245eb1a1 --- /dev/null +++ b/modules/editor/god/autoload/god.el @@ -0,0 +1,76 @@ +;; editor/god/autoload/god.el -*- lexical-binding: t; -*- + +(defvar god-default-color (face-background 'cursor) + "Default cursor and bar color.") + +(defvar god-read-only-mode-color "Gray" + "Cursor and bar color when `read-only-mode' is enabled.") + +(defvar god-overwrite-mode-color "Yellow" + "Cursor and bar color when `overwrite-mode' is enabled.") + +(defvar god-fill-overflow-color "IndianRed" + "Cursor and bar color when fill column width has been exceeded.") + +;;;###autoload +(defvar god-default-exempt-major-modes + '(Custom-mode + Info-mode + ag-mode + calculator-mode + calendar-mode + cider-test-report-mode + compilation-mode + debugger-mode + dired-mode + edebug-mode + ediff-mode + eww-mode + geben-breakpoint-list-mode + git-commit-mode + grep-mode + ibuffer-mode + magit-popup-mode + org-agenda-mode + pdf-outline-buffer-mode + recentf-dialog-mode + sldb-mode + sly-db-mode + vc-annotate-mode + wdired-mode) + "Major modes in which `god-local-mode' will not be enabled on +initialization.") + +;;;###autoload +(defun god--configure-cursor-and-modeline () + "Configure cursor type, cursor color and doom-modeline bar color depending on mode." + (let* ((is-fill-overflow (> (current-column) fill-column)) + (previous-cursor-color (face-background 'cursor)) + (previous-modeline-color (and (facep 'doom-modeline-bar) + (face-background 'doom-modeline-bar))) + (is-god-mode (and (boundp 'god-local-mode) + god-local-mode)) + (next-cursor-type + (cond (buffer-read-only 'box) + ((and overwrite-mode is-god-mode) 'hollow) + ((or is-god-mode overwrite-mode) 'box) + (t 'bar))) + (next-cursor-and-modeline-color + (cond (buffer-read-only god-read-only-mode-color) + (is-fill-overflow god-fill-overflow-color) + (overwrite-mode god-overwrite-mode-color) + (t god-default-color)))) + (setq cursor-type next-cursor-type) + (unless (eq previous-cursor-color next-cursor-and-modeline-color) + (set-cursor-color next-cursor-and-modeline-color)) + (when (and (facep 'doom-modeline-bar) + (fboundp 'doom-modeline-refresh-bars) + (not (eq previous-modeline-color next-cursor-and-modeline-color))) + (set-face-attribute 'doom-modeline-bar nil :background next-cursor-and-modeline-color) + (doom-modeline-refresh-bars)))) + +;;;###autoload +(defun god--toggle-on-overwrite () + (if (bound-and-true-p overwrite-mode) + (god-local-mode-pause) + (god-local-mode-resume))) diff --git a/modules/editor/god/config.el b/modules/editor/god/config.el new file mode 100644 index 000000000..998d83f91 --- /dev/null +++ b/modules/editor/god/config.el @@ -0,0 +1,9 @@ +;;; editor/god/config.el -*- lexical-binding: t; -*- + +(use-package! god-mode + :commands (god-local-mode god-mode-all) + :hook ((after-init . god-mode-all) + (post-command . god--configure-cursor-and-modeline) + (overwrite-mode . god--toggle-on-overwrite)) + :config + (setq god-exempt-major-modes god-default-exempt-major-modes)) diff --git a/modules/editor/god/doctor.el b/modules/editor/god/doctor.el new file mode 100644 index 000000000..66b0b1e84 --- /dev/null +++ b/modules/editor/god/doctor.el @@ -0,0 +1,8 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; editor/god/doctor.el + +(when (featurep! :editor evil) + (warn! "god-mode is not really compatible with evil")) + +(when (featurep! :editor objed) + (warn! "god-mode is not really compatible with objed")) diff --git a/modules/editor/god/packages.el b/modules/editor/god/packages.el new file mode 100644 index 000000000..a62830687 --- /dev/null +++ b/modules/editor/god/packages.el @@ -0,0 +1,4 @@ +;; -*- no-byte-compile: t; -*- +;;; editor/god/packages.el + +(package! god-mode) From d14a910cf48a54a6616690cafef5c8f0f6218965 Mon Sep 17 00:00:00 2001 From: Akhil Wali Date: Sat, 5 Oct 2019 09:02:13 +1300 Subject: [PATCH 2/5] Rename and refactor god-mode hooks --- modules/editor/god/autoload/god.el | 4 ++-- modules/editor/god/config.el | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/modules/editor/god/autoload/god.el b/modules/editor/god/autoload/god.el index 3245eb1a1..6c8f1d7b7 100644 --- a/modules/editor/god/autoload/god.el +++ b/modules/editor/god/autoload/god.el @@ -42,7 +42,7 @@ initialization.") ;;;###autoload -(defun god--configure-cursor-and-modeline () +(defun +god--configure-cursor-and-modeline-h () "Configure cursor type, cursor color and doom-modeline bar color depending on mode." (let* ((is-fill-overflow (> (current-column) fill-column)) (previous-cursor-color (face-background 'cursor)) @@ -70,7 +70,7 @@ initialization.") (doom-modeline-refresh-bars)))) ;;;###autoload -(defun god--toggle-on-overwrite () +(defun +god--toggle-on-overwrite-h () (if (bound-and-true-p overwrite-mode) (god-local-mode-pause) (god-local-mode-resume))) diff --git a/modules/editor/god/config.el b/modules/editor/god/config.el index 998d83f91..d5d3e9e0d 100644 --- a/modules/editor/god/config.el +++ b/modules/editor/god/config.el @@ -1,9 +1,9 @@ ;;; editor/god/config.el -*- lexical-binding: t; -*- (use-package! god-mode - :commands (god-local-mode god-mode-all) - :hook ((after-init . god-mode-all) - (post-command . god--configure-cursor-and-modeline) - (overwrite-mode . god--toggle-on-overwrite)) + :commands god-local-mode + :hook (doom-after-init-modules . god-mode-all) :config - (setq god-exempt-major-modes god-default-exempt-major-modes)) + (setq god-exempt-major-modes god-default-exempt-major-modes) + (add-hook! 'post-command-hook #'+god--configure-cursor-and-modeline-h) + (add-hook! 'overwrite-mode-hook #'+god--toggle-on-overwrite-h)) From 394a1aaac093a076a2e1e69a44449b5eaa7af954 Mon Sep 17 00:00:00 2001 From: Akhil Wali Date: Sat, 5 Oct 2019 09:03:16 +1300 Subject: [PATCH 3/5] Rename god-... -> +god-... --- modules/editor/god/autoload/god.el | 18 +++++++++--------- modules/editor/god/config.el | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/editor/god/autoload/god.el b/modules/editor/god/autoload/god.el index 6c8f1d7b7..e5451bd37 100644 --- a/modules/editor/god/autoload/god.el +++ b/modules/editor/god/autoload/god.el @@ -1,19 +1,19 @@ ;; editor/god/autoload/god.el -*- lexical-binding: t; -*- -(defvar god-default-color (face-background 'cursor) +(defvar +god-default-color (face-background 'cursor) "Default cursor and bar color.") -(defvar god-read-only-mode-color "Gray" +(defvar +god-read-only-mode-color "Gray" "Cursor and bar color when `read-only-mode' is enabled.") -(defvar god-overwrite-mode-color "Yellow" +(defvar +god-overwrite-mode-color "Yellow" "Cursor and bar color when `overwrite-mode' is enabled.") -(defvar god-fill-overflow-color "IndianRed" +(defvar +god-fill-overflow-color "IndianRed" "Cursor and bar color when fill column width has been exceeded.") ;;;###autoload -(defvar god-default-exempt-major-modes +(defvar +god-default-exempt-major-modes '(Custom-mode Info-mode ag-mode @@ -56,10 +56,10 @@ initialization.") ((or is-god-mode overwrite-mode) 'box) (t 'bar))) (next-cursor-and-modeline-color - (cond (buffer-read-only god-read-only-mode-color) - (is-fill-overflow god-fill-overflow-color) - (overwrite-mode god-overwrite-mode-color) - (t god-default-color)))) + (cond (buffer-read-only +god-read-only-mode-color) + (is-fill-overflow +god-fill-overflow-color) + (overwrite-mode +god-overwrite-mode-color) + (t +god-default-color)))) (setq cursor-type next-cursor-type) (unless (eq previous-cursor-color next-cursor-and-modeline-color) (set-cursor-color next-cursor-and-modeline-color)) diff --git a/modules/editor/god/config.el b/modules/editor/god/config.el index d5d3e9e0d..0be161368 100644 --- a/modules/editor/god/config.el +++ b/modules/editor/god/config.el @@ -4,6 +4,6 @@ :commands god-local-mode :hook (doom-after-init-modules . god-mode-all) :config - (setq god-exempt-major-modes god-default-exempt-major-modes) + (setq god-exempt-major-modes +god-default-exempt-major-modes) (add-hook! 'post-command-hook #'+god--configure-cursor-and-modeline-h) (add-hook! 'overwrite-mode-hook #'+god--toggle-on-overwrite-h)) From 3e11008a7f0be9099616fbd7c672d69d6b8af48b Mon Sep 17 00:00:00 2001 From: Akhil Wali Date: Sat, 5 Oct 2019 09:05:05 +1300 Subject: [PATCH 4/5] Use bound-and-true-p instead of (and (boundp ...)) --- modules/editor/god/autoload/god.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/editor/god/autoload/god.el b/modules/editor/god/autoload/god.el index e5451bd37..c7a3d63b4 100644 --- a/modules/editor/god/autoload/god.el +++ b/modules/editor/god/autoload/god.el @@ -48,8 +48,7 @@ initialization.") (previous-cursor-color (face-background 'cursor)) (previous-modeline-color (and (facep 'doom-modeline-bar) (face-background 'doom-modeline-bar))) - (is-god-mode (and (boundp 'god-local-mode) - god-local-mode)) + (is-god-mode (bound-and-true-p god-local-mode)) (next-cursor-type (cond (buffer-read-only 'box) ((and overwrite-mode is-god-mode) 'hollow) From 1560dadb087cf670f9787b0bcaeaec2fa55b8085 Mon Sep 17 00:00:00 2001 From: Akhil Wali Date: Sat, 5 Oct 2019 09:41:00 +1300 Subject: [PATCH 5/5] Use pushnew! to set god-exempt-major-modes --- modules/editor/god/autoload/god.el | 29 ----------------------------- modules/editor/god/config.el | 22 +++++++++++++++++++++- 2 files changed, 21 insertions(+), 30 deletions(-) diff --git a/modules/editor/god/autoload/god.el b/modules/editor/god/autoload/god.el index c7a3d63b4..f634c9135 100644 --- a/modules/editor/god/autoload/god.el +++ b/modules/editor/god/autoload/god.el @@ -12,35 +12,6 @@ (defvar +god-fill-overflow-color "IndianRed" "Cursor and bar color when fill column width has been exceeded.") -;;;###autoload -(defvar +god-default-exempt-major-modes - '(Custom-mode - Info-mode - ag-mode - calculator-mode - calendar-mode - cider-test-report-mode - compilation-mode - debugger-mode - dired-mode - edebug-mode - ediff-mode - eww-mode - geben-breakpoint-list-mode - git-commit-mode - grep-mode - ibuffer-mode - magit-popup-mode - org-agenda-mode - pdf-outline-buffer-mode - recentf-dialog-mode - sldb-mode - sly-db-mode - vc-annotate-mode - wdired-mode) - "Major modes in which `god-local-mode' will not be enabled on -initialization.") - ;;;###autoload (defun +god--configure-cursor-and-modeline-h () "Configure cursor type, cursor color and doom-modeline bar color depending on mode." diff --git a/modules/editor/god/config.el b/modules/editor/god/config.el index 0be161368..7806b7760 100644 --- a/modules/editor/god/config.el +++ b/modules/editor/god/config.el @@ -4,6 +4,26 @@ :commands god-local-mode :hook (doom-after-init-modules . god-mode-all) :config - (setq god-exempt-major-modes +god-default-exempt-major-modes) + (pushnew! god-exempt-major-modes + 'Custom-mode + 'Info-mode + 'ag-mode + 'calculator-mode + 'calendar-mode + 'cider-test-report-mode + 'compilation-mode + 'debugger-mode + 'edebug-mode + 'ediff-mode + 'eww-mode + 'geben-breakpoint-list-mode + 'ibuffer-mode + 'org-agenda-mode + 'pdf-outline-buffer-mode + 'recentf-dialog-mode + 'sldb-mode + 'sly-db-mode + 'wdired-mode) + (add-hook! 'post-command-hook #'+god--configure-cursor-and-modeline-h) (add-hook! 'overwrite-mode-hook #'+god--toggle-on-overwrite-h))