From 9b9d026b613fd90230f0bdde9f87b2142d9bfc53 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Thu, 6 Jan 2022 22:54:56 -0600 Subject: Add god-mode I'm trying this out ... again --- init.el | 13 ++++++++++++- lisp/+god-mode.el | 17 +++++++++++++++++ lisp/+modeline.el | 18 ++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lisp/+god-mode.el diff --git a/init.el b/init.el index 7f0733c..970ab83 100644 --- a/init.el +++ b/init.el @@ -862,6 +862,8 @@ See also `crux-reopen-as-root-mode'." :fork (:repo "duckwork/discord.el")))) (setup (:straight electric-cursor) + (:option electric-cursor-alist '((overwrite-mode . hbar) + (god-local-mode . box))) (electric-cursor-mode +1)) (setup (:straight elfeed) @@ -1010,6 +1012,14 @@ See also `crux-reopen-as-root-mode'." (:file-match (rx ".rkt" eos) (rx ".scm" eos))) +(setup (:straight god-mode) + (setq god-mode-enable-function-key-translation nil) + (:also-load +god-mode) + (:+key "C-M-g" #'god-local-mode) + (:with-mode god-local-mode + (:bind "i" #'+god-mode-insert + "a" #'+god-mode-append))) + (setup (:straight helpful) (run-with-idle-timer 0.5 nil 'require 'helpful) @@ -1194,7 +1204,8 @@ See also `crux-reopen-as-root-mode'." +modeline-ace-window-display +modeline-modified ,(+modeline-concat - '(+modeline-reading-mode + '(+modeline-god-mode + +modeline-reading-mode +modeline-narrowed) ",") +modeline-buffer-name diff --git a/lisp/+god-mode.el b/lisp/+god-mode.el new file mode 100644 index 0000000..f70e76b --- /dev/null +++ b/lisp/+god-mode.el @@ -0,0 +1,17 @@ +;;; +god-mode.el -*- lexical-binding: t; -*- + +;;; Code: + +(defun +god-mode-insert () + "Leave `god-local-mode' at point." + (interactive) + (god-local-mode -1)) + +(defun +god-mode-append () + "Leave `god-local-mode' after point." + (interactive) + (forward-char 1) + (god-local-mode -1)) + +(provide '+god-mode) +;;; +god-mode.el ends here diff --git a/lisp/+modeline.el b/lisp/+modeline.el index 4063d83..a0195f1 100644 --- a/lisp/+modeline.el +++ b/lisp/+modeline.el @@ -240,5 +240,23 @@ The order of elements matters: whichever one matches first is applied." (concat (or spacer +modeline-default-spacer) (window-parameter (selected-window) 'ace-window-path)))) +(defun +modeline-god-mode (&optional spacer) + "Display an icon when `god-mode' is active." + (when (and (boundp 'god-local-mode) god-local-mode) + (concat (or spacer +modeline-default-spacer) + (propertize "Ω" + 'help-echo (concat "God mode is active." + "\nmouse-1: exit God mode.") + 'local-map (purecopy + (simple-modeline-make-mouse-map + 'mouse-1 (lambda (e) + (interactive "e") + (with-selected-window + (posn-window + (event-start ev)) + (god-local-mode -1) + (force-mode-line-update))))) + 'mouse-face 'mode-line-highlight)))) + (provide '+modeline) ;;; +modeline.el ends here -- cgit 1.4.1-21-gabe81