branch: externals/ergoemacs-mode
commit a5febc9591de5953528547e020f44fe1cfccfebd
Author: Matthew Fidler <[email protected]>
Commit: Matthew Fidler <[email protected]>
Remove shift selection and try to fix C-S-x C-S-c
---
ergoemacs-advice.el | 7 +------
ergoemacs-command-loop.el | 41 ++++++++++++++++++++++++++++++++++++-----
ergoemacs-mode.el | 6 +++---
3 files changed, 40 insertions(+), 14 deletions(-)
diff --git a/ergoemacs-advice.el b/ergoemacs-advice.el
index 9338ce6..38af9d6 100644
--- a/ergoemacs-advice.el
+++ b/ergoemacs-advice.el
@@ -99,12 +99,7 @@ TYPE is the type of translation installed."
(if ergoemacs-mode
(ergoemacs-mode--undefined-advice)
(call-interactively orig-fun)))
-
- (defun ergoemacs-advice-handle-shift-selection ()
- "Allow `ergoemacs-mode' to do shift selection on keys like Alt+# to Alt+3."
- (when (eq 'ergoemacs-command-loop--shift-translate (key-binding
(this-single-command-keys)))
- (setq this-command-keys-shift-translated t)))
-
+
(defun ergoemacs-advice-read-key ()
"Drop single command keys for read-key." ; For compataiblity with emacs 25.5
(setq ergoemacs-command-loop--single-command-keys nil))
diff --git a/ergoemacs-command-loop.el b/ergoemacs-command-loop.el
index dd340c6..95da1af 100644
--- a/ergoemacs-command-loop.el
+++ b/ergoemacs-command-loop.el
@@ -862,7 +862,7 @@ KEYS is the keys information"
(defun ergoemacs-command--dispach-cua ()
"Dispatches the CUA C-x and C-c."
- (when ergoemacs-mode-cua-mode
+ (when (and (not this-command-keys-shift-translated) ergoemacs-mode-cua-mode)
(let ((keys (this-single-command-keys)))
(when (and (= 1 (length keys))
(memq (aref keys 0) ergoemacs-command--cua-key-codes)
@@ -881,15 +881,46 @@ KEYS is the keys information"
(defun ergoemacs-command--cua-timer-on ()
"Turn on the cua timer."
- (when (and mark-active ergoemacs-mode-cua-mode)
- (setq erogemacs-command--cua-timer
- (run-at-time t ergoemacs-command-loop-blink-rate
#'ergoemacs-command--dispach-cua))))
+ (if (and mark-active ergoemacs-mode-cua-mode
+ (not (eq erogemacs-command--cua-timer 'shift)))
+ (setq erogemacs-command--cua-timer
+ (run-at-time t ergoemacs-command-loop-blink-rate
#'ergoemacs-command--dispach-cua))
+ (unless mark-active
+ (ergoemacs-command--cua-timer-off)
+ (setq erogemacs-command--cua-timer nil))))
(defun ergoemacs-command--cua-timer-off ()
"Turn off the cua timer."
- (when erogemacs-command--cua-timer
+ (when (timerp erogemacs-command--cua-timer)
(cancel-timer erogemacs-command--cua-timer)))
+
+;;;;;;;;;;;;
+;; Taken and modified from cua-base
+(defun ergoemacs-cua--shift-control-prefix (prefix)
+ ;; handle S-C-x and S-C-c by emulating the fast double prefix function.
+ ;; Don't record this command
+ (setq this-command last-command)
+ ;; Restore the prefix arg
+ ;; This should make it so that exchange-point-and-mark gets the prefix when
+ ;; you do C-u S-C-x C-x work (where the C-u is properly passed to the C-x
+ ;; C-x binding after the first S-C-x was rewritten to just C-x).
+ (prefix-command-preserve-state)
+ ;; Activate the cua--prefix-repeat-keymap
+ (setq erogemacs-command--cua-timer 'shift)
+ (ergoemacs-command--cua-timer-off)
+ ;; Repalce key
+ (setq unread-command-events (list prefix)))
+
+(defun ergoemacs-cua--shift-control-c-prefix ()
+ (interactive)
+ (ergoemacs-cua--shift-control-prefix ?\C-c))
+
+(defun ergoemacs-cua--shift-control-x-prefix ()
+ (interactive)
+ (ergoemacs-cua--shift-control-prefix ?\C-x))
+;;;;
+
(add-hook 'ergoemacs-post-command-hook #'ergoemacs-command--cua-timer-on)
(add-hook 'ergoemacs-shutdown-hook #'ergoemacs-command--cua-timer-off)
diff --git a/ergoemacs-mode.el b/ergoemacs-mode.el
index 5d0536c..07b4502 100644
--- a/ergoemacs-mode.el
+++ b/ergoemacs-mode.el
@@ -412,7 +412,9 @@ after initializing ergoemacs-mode.
(defvar ergoemacs-mark-active-cua-keymap (let ((map (make-sparse-keymap)))
(define-key map (kbd "C-c
<ergoemacs-timeout>") 'ergoemacs-copy-line-or-region)
- (define-key map (kbd "C-v
<ergoemacs-timeout>") 'ergoemacs-paste)
+ (define-key map (kbd "C-x
<ergoemacs-timeout>") 'ergoemacs-cut-line-or-region)
+ (define-key map [(shift control c)]
'ergoemacs-cua--shift-control-c-prefix)
+ (define-key map [(shift control x)]
'ergoemacs-cua--shift-control-x-prefix)
map)
"The keybinding that is active when the mark is active.")
@@ -440,7 +442,6 @@ after initializing ergoemacs-mode.
(when ergoemacs-mode-cua-mode
(add-hook 'minor-mode-map-alist ergoemacs-minor-cua-alist))
(advice-add 'undefined :around #'ergoemacs-advice-undefined)
- (advice-add 'handle-shift-selection :before
#'ergoemacs-advice-handle-shift-selection)
(advice-add 'read-key :before #'ergoemacs-advice-read-key))
(defun ergoemacs-remove-override-keymap ()
@@ -450,7 +451,6 @@ after initializing ergoemacs-mode.
(when ergoemacs-mode-cua-mode
(remove-hook 'minor-mode-map-alist ergoemacs-minor-cua-alist))
(advice-remove 'undefined #'ergoemacs-advice-undefined)
- (advice-remove 'handle-shift-selection
#'ergoemacs-advice-handle-shift-selection)
(advice-remove 'read-key #'ergoemacs-advice-read-key))