[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/evil-escape b205051996 056/133: More stable passthrough
|
From: |
ELPA Syncer |
|
Subject: |
[nongnu] elpa/evil-escape b205051996 056/133: More stable passthrough |
|
Date: |
Wed, 3 Jan 2024 21:59:52 -0500 (EST) |
branch: elpa/evil-escape
commit b2050519967aee4125537a0d07ea052f09ef0df1
Author: syl20bnr <sylvain.benner@gmail.com>
Commit: syl20bnr <sylvain.benner@gmail.com>
More stable passthrough
Temporarily deactivate evil-escape while executing passthrough
Also add support for evilified state
---
evil-escape.el | 77 +++++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 52 insertions(+), 25 deletions(-)
diff --git a/evil-escape.el b/evil-escape.el
index 1adfc59c93..ed8a56cab0 100644
--- a/evil-escape.el
+++ b/evil-escape.el
@@ -5,7 +5,7 @@
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; Keywords: convenience editing evil
;; Created: 22 Oct 2014
-;; Version: 2.23
+;; Version: 2.24
;; Package-Requires: ((emacs "24") (evil "1.0.9"))
;; URL: https://github.com/syl20bnr/evil-escape
@@ -116,6 +116,12 @@ This variable is used to restore the original function
bound to the
first key of the escape key sequence when `evil-escape'
mode is disabled.")
+(defvar evil-escape-evilified-state-shadowed-func nil
+ "Original function of `evil-evilified-state-map' shadowed by `evil-escape'.
+This variable is used to restore the original function bound to the
+first key of the escape key sequence when `evil-escape'
+mode is disabled.")
+
(defvar evil-escape-iedit-state-shadowed-func nil
"Original function of `evil-iedit-state-map' shadowed by `evil-escape'.
This variable is used to restore the original function bound to the
@@ -190,15 +196,8 @@ with a key sequence."
:insert-func
evil-escape--insert-state-insert-func
:delete-func
evil-escape--insert-state-delete-func))
;; emacs state
- (let ((exit-func (lambda () (interactive)
- (cond ((string-match "magit" (symbol-name major-mode))
- (evil-escape--escape-with-q))
- ((eq 'paradox-menu-mode major-mode)
- (evil-escape--escape-with-q))
- ((eq 'gist-list-menu-mode major-mode)
- (quit-window))
- (t (evil-normal-state))))))
- (eval `(evil-escape-define-escape "emacs-state" evil-emacs-state-map
,exit-func)))
+ (eval `(evil-escape-define-escape "emacs-state" evil-emacs-state-map
+ evil-escape--emacs-state-exit-func))
;; visual state
(eval `(evil-escape-define-escape "visual-state" evil-visual-state-map
evil-exit-visual-state
:shadowed-func
,evil-escape-motion-state-shadowed-func))
@@ -261,35 +260,56 @@ with a key sequence."
(eval '(evil-escape-define-escape "iedit-insert-state"
evil-iedit-insert-state-map
evil-iedit-state/quit-iedit-mode
:insert-func
evil-escape--default-insert-func
- :delete-func
evil-escape--default-delete-func)))))
+ :delete-func
evil-escape--default-delete-func))))
+
+ ;; evilified state if installed
+ (eval-after-load 'evil-evilified-state
+ '(progn
+ (setq evil-escape-evilified-state-shadowed-func
+ (or evil-escape-evilified-state-shadowed-func
+ (lookup-key evil-evilified-state-map
(evil-escape--first-key))))
+ (eval `(evil-escape-define-escape
+ "evilified-state" evil-evilified-state-map
+ evil-escape--emacs-state-exit-func
+ :shadowed-func ,evil-escape-evilified-state-shadowed-func)))))
(defun evil-escape--undefine-keys ()
"Unset the key bindings defined in `evil-escape--define-keys'."
(let ((first-key (evil-escape--first-key)))
;; bulk undefine
(dolist (map '(evil-insert-state-map
+ evil-motion-state-map
evil-emacs-state-map
evil-visual-state-map
+ evil-lisp-state-map
+ evil-evilified-state-map
+ evil-iedit-state-map
+ evil-iedit-insert-state-map
minibuffer-local-map
+ isearch-mode-map
evil-ex-completion-map))
(define-key (eval map) first-key nil))
;; motion state
- (if evil-escape-motion-state-shadowed-func
+ (when evil-escape-motion-state-shadowed-func
(define-key evil-motion-state-map
(kbd first-key) evil-escape-motion-state-shadowed-func))
;; isearch
- (if evil-escape-isearch-shadowed-func
+ (when evil-escape-isearch-shadowed-func
(define-key isearch-mode-map
(kbd first-key) evil-escape-isearch-shadowed-func))
;; list state
- (if evil-escape-lisp-state-shadowed-func
+ (when evil-escape-lisp-state-shadowed-func
(define-key evil-lisp-state-map
(kbd first-key) evil-escape-lisp-state-shadowed-func))
+ ;; evilified state
+ (when evil-escape-evilified-state-shadowed-func
+ (define-key evil-evilified-state-map
+ (kbd first-key) evil-escape-evilified-state-shadowed-func))
;; iedit state
- (eval-after-load 'evil-iedit-state
- '(progn (define-key evil-iedit-state-map
- (kbd first-key) evil-escape-iedit-state-shadowed-func)
- (define-key evil-iedit-insert-state-map (kbd first-key) nil)))))
+ (when evil-escape-iedit-state-shadowed-func
+ (define-key evil-iedit-state-map
+ (kbd first-key) evil-escape-iedit-state-shadowed-func)
+ (define-key evil-iedit-insert-state-map (kbd first-key) nil))))
(defun evil-escape--default-insert-func (key)
"Insert KEY in current buffer if not read only."
@@ -319,6 +339,17 @@ with a key sequence."
(call-interactively 'deft-filter-increment))
(t (evil-escape--default-delete-func))))
+(defun evil-escape--emacs-state-exit-func ()
+ "Return the exit function to execute."
+ (interactive)
+ (cond ((string-match "magit" (symbol-name major-mode))
+ (evil-escape--escape-with-q))
+ ((eq 'paradox-menu-mode major-mode)
+ (evil-escape--escape-with-q))
+ ((eq 'gist-list-menu-mode major-mode)
+ (quit-window))
+ (t (evil-normal-state))))
+
(defun evil-escape--escape-with-q ()
"Send `q' key press event to exit from a buffer."
(setq unread-command-events (listify-key-sequence "q")))
@@ -341,15 +372,11 @@ from the `post-command-hook'."
(progn
(if shadowed
(define-key map key shadowed)
- ;; trick of the death, we remove the current binding
- ;; in order to get the binding in the other active key maps
- (define-key map key nil)
- (define-key map key (key-binding key)))
+ (evil-escape--undefine-keys))
(setq evil-escape--first-pass nil))
;; second pass
- (let ((escape-func (evil-escape--escape-function-symbol from)))
- (define-key map key escape-func)
- (remove-hook 'post-command-hook passthrough))))
+ (evil-escape--define-keys)
+ (remove-hook 'post-command-hook passthrough)))
(defun evil-escape--setup-passthrough (from map &optional shadowed-func)
"Setup a pass through for the next command"
- [nongnu] elpa/evil-escape 2e7bf1e62e 021/133: Support undo-tree, (continued)
- [nongnu] elpa/evil-escape 2e7bf1e62e 021/133: Support undo-tree, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape e0a0c9a9ee 023/133: Add support for paradox and gist-list menu, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 0b62cb6637 025/133: Fix multiple inserted occurrences of `f` in isearch and ex-command context, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 6cb4fa408a 026/133: Add evil-iedit-state, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 6d46b81bbc 030/133: Fix regression for evil-iedit-state, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 3637f13210 055/133: Correctly handle iedit-state, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape da5498d25e 035/133: Correctly restore evil-lisp-state shadowed function by evil-escape, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape cf3e18673d 051/133: Undefine mapping on first key when evil-escape is disabled, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape cbfc43840f 063/133: Ensure that map is defined when undefining keys, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape b8c9b4631d 049/133: Add support for helm-ag-edit, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape b205051996 056/133: More stable passthrough,
ELPA Syncer <=
- [nongnu] elpa/evil-escape afa9c9c321 067/133: Fixes #37 Capital r deletes a char inappropriately, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 67843e9dd4 041/133: Fix recursive `f` input during isearch in certain buffers, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape e78ffcdbeb 036/133: Explicitly disable any running transient map, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape e556c7a6b6 057/133: Fix line highlight flicker on escape, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 05d9e5fc80 052/133: Don't break deft-mode, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 457386c7bc 043/133: Generalize passthrough, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 6c6379c19b 065/133: Update README for 3.0, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape bc054dbe1e 059/133: Add documentation to generated wrapper functions, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape 1488a2c9c3 037/133: When replaying macro, pass shadow func, ELPA Syncer, 2024/01/03
- [nongnu] elpa/evil-escape f8fe5c98d2 083/133: Add `evil-escape-inhibit-functions`, ELPA Syncer, 2024/01/03