branch: externals/ergoemacs-mode
commit 9b726651669fcee392628e6a80bd87093530bdfb
Author: Matthew Fidler <[email protected]>
Commit: Matthew Fidler <[email protected]>
Use passthrough for kill-line
---
ergoemacs-advice.el | 2 +-
ergoemacs-cua.el | 41 ++++++++++++++++++++++++++---------------
ergoemacs-functions.el | 25 +++++++++++++++++++++++++
ergoemacs-mode.el | 4 +++-
ergoemacs-themes.el | 2 +-
5 files changed, 56 insertions(+), 18 deletions(-)
diff --git a/ergoemacs-advice.el b/ergoemacs-advice.el
index 38af9d6..39da47e 100644
--- a/ergoemacs-advice.el
+++ b/ergoemacs-advice.el
@@ -96,7 +96,7 @@ TYPE is the type of translation installed."
(defun ergoemacs-advice-undefined (orig-fun)
"Allow `ergoemacs-mode' to display keys, and intercept ending <apps> keys."
- (if ergoemacs-mode
+ (if (and ergoemacs-mode (not ergoemacs--temporary-disable))
(ergoemacs-mode--undefined-advice)
(call-interactively orig-fun)))
diff --git a/ergoemacs-cua.el b/ergoemacs-cua.el
index 7a276ba..6584e63 100644
--- a/ergoemacs-cua.el
+++ b/ergoemacs-cua.el
@@ -113,21 +113,36 @@ This is also used to select the region keymaps.")
This override is enabled for active regions before the copy and paste are
enabled.")
-
-
(defvar ergoemacs-inhibit-cua-keys nil
"Buffer-local variable that may disable the CUA keymappings.")
(make-variable-buffer-local 'ergoemacs-inhibit-cua-keys)
(defvar ergeoemacs-mode-term-raw-mode)
+(defvar ergoemacs-mode)
+(defvar ergoemacs--temporary-disable)
(defun ergoemacs--select-keymaps ()
"Setup conditions for selecting the proper keymaps in
`ergoemacs--keymap-alist'."
- ;; The prefix override (when mark-active) operates in three substates:
- ;; [1] Before using a prefix key
- ;; [2] Immediately after using a prefix key
- ;; [3] A fraction of a second later
- (setq ergoemacs--ena-region-keymap ; Determines if the ergion is active
+ (when ergoemacs--temporary-disable
+ ;; The temporary disable commands set `ergoemacs--temporary-disable' to t
+ ;; The first time when the keys are put on the `unread-command-events',
`ergoemacs-mode' is disabled
+ ;; The second command is executed, and `ergoemacs-mode' is turned back on
and `ergoemacs--temporary-disable' is to nil
+ (if ergoemacs-mode
+ (progn
+ (setq ergoemacs--ena-region-keymap nil
+ ergoemacs--ena-prefix-override-keymap nil
+ ergoemacs--ena-prefix-repeat-keymap nil
+ ergoemacs-mode nil)
+ (message "disable ergoemacs again"))
+ (setq ergoemacs--temporary-disable nil
+ ergoemacs-mode t))
+ (message "enable ergoemacs again"))
+ (when ergoemacs-mode
+ ;; The prefix override (when mark-active) operates in three substates:
+ ;; [1] Before using a prefix key
+ ;; [2] Immediately after using a prefix key
+ ;; [3] A fraction of a second later
+ (setq ergoemacs--ena-region-keymap ; Determines if the ergion is active
(and (not ergeoemacs-mode-term-raw-mode) (region-active-p) (not
deactivate-mark))
;; Enable Override -- This is the first state where the keys are
intercepted; cua state [1]
ergoemacs--ena-prefix-override-keymap
@@ -144,10 +159,7 @@ This override is enabled for active regions before the
copy and paste are enable
(and ergoemacs--ena-region-keymap
(not ergeoemacs-mode-term-raw-mode)
(or (timerp ergoemacs--prefix-override-timer)
- (eq ergoemacs--prefix-override-timer 'shift))))
- ;; In ergoemacs-mode the corresponding `cua--ena-cua-keys-keymap' and
`cua--ena-global-mark-keymap' are not needed or used
- (message "r: %s po: %s pr: %s")
- )
+ (eq ergoemacs--prefix-override-timer 'shift))))))
(defun ergoemacs--prefix-override-timeout ()
"This is whap happens on the `ergoemacs-mode' timeout for C-c and C-v are
supplied."
@@ -253,10 +265,9 @@ Pass prefix ARG to the respective copy functions."
(defun ergoemacs--cua-post-command-handler ()
"Post command hook for `ergoemacs-mode' based cua keys."
- (when ergoemacs-mode
- (condition-case nil
- (ergoemacs--cua-post-command-handler-1)
- (error nil))))
+ (condition-case nil
+ (ergoemacs--cua-post-command-handler-1)
+ (error nil)))
(add-hook 'post-command-hook #'ergoemacs--cua-post-command-handler)
(add-hook 'pre-command-hook #'ergoemacs--cua-pre-command-handler)
diff --git a/ergoemacs-functions.el b/ergoemacs-functions.el
index e1773f3..14f6ffa 100644
--- a/ergoemacs-functions.el
+++ b/ergoemacs-functions.el
@@ -95,12 +95,37 @@
(declare-function w32-long-file-name "compat")
(declare-function term-paste "term")
(declare-function calc-yank "calc-yank")
+(defvar ergoemacs-temporary-disable)
(defcustom ergoemacs-isearch-backward-char-to-edit nil
"Backward char will edit isearch."
:type 'boolean
:group 'ergoemacs-mode)
+(defun ergoemacs--send-emacs-key (key)
+ "This replays the events from the intial key press.
+
+REPEAT is the flag that tells it if is repeated environmennt."
+ ;; Don't record this command
+ (setq ergoemacs--temporary-disable t
+ this-command last-command)
+ ;; Restore the prefix arg
+ (prefix-command-preserve-state)
+ ;; Push the key back on the event queue
+ (setq unread-command-events (list (cons 'no-record key))))
+
+(defun ergoemacs-kill-line (&optional arg)
+ "Kill the rest of the (visual) line.
+
+This is often `kill-visual-line' or `kill-line'.
+
+The ARG was is used in the above functions, and is called by
+temporarily turning off `ergoemacs-mode' and then sending the
+emacs defualt kill line control k key to the `unread-command-events'"
+ (interactive "P")
+ (ergoemacs--send-emacs-key ?\C-k))
+
+
(defvar ergoemacs-delete-functions
'(delete-backward-char delete-char kill-word backward-kill-word)
diff --git a/ergoemacs-mode.el b/ergoemacs-mode.el
index f407da6..7b0c219 100644
--- a/ergoemacs-mode.el
+++ b/ergoemacs-mode.el
@@ -118,7 +118,6 @@ Added beginning-of-buffer Alt+n (QWERTY notation) and
end-of-buffer Alt+Shift+n"
:initialize #'custom-initialize-default
:group 'ergoemacs-mode)
-
(defcustom ergoemacs-mode-line t
"Determines when the ergoemacs-mode modeline indicator is shown."
:type '(choice
@@ -155,6 +154,9 @@ The TEXT will be what the mode-line is set to be."
(font-lock-add-keywords 'emacs-lisp-mode ergoemacs-font-lock-keywords)
+(defvar ergoemacs--temporary-disable nil
+ "Variable for temporarily disabling `ergoemacs-mode'")
+
(defvar ergoemacs-mode-startup-hook nil
diff --git a/ergoemacs-themes.el b/ergoemacs-themes.el
index 04231fc..52431e4 100644
--- a/ergoemacs-themes.el
+++ b/ergoemacs-themes.el
@@ -544,7 +544,7 @@ These keys do not depend on the layout."
(defun ergoemacs-set-kill-line (keymap)
"Kill Line for KEYMAP."
- (ergoemacs-define-key keymap (kbd "M-g") 'kill-line)
+ (ergoemacs-define-key keymap (kbd "M-g") 'ergoemacs-kill-line)
(ergoemacs-define-key keymap (kbd "M-G") 'ergoemacs-kill-line-backward))
(defun ergoemacs-set-text-transform (keymap)