branch: externals/ergoemacs-mode commit 0d2d1c6b0916a18b0f9e1942a7c11d6bd2b47656 Author: Matthew Fidler <514778+mattfid...@users.noreply.github.com> Commit: Matthew Fidler <514778+mattfid...@users.noreply.github.com>
Change how sending emacs keys works --- ergoemacs-calculate-bindings.el | 2 +- ergoemacs-cua.el | 17 +++++++++++------ ergoemacs-functions.el | 36 +++++++++++++++++------------------- ergoemacs-mode.el | 22 ++++++++++++++++++---- ergoemacs-themes.el | 2 +- 5 files changed, 48 insertions(+), 31 deletions(-) diff --git a/ergoemacs-calculate-bindings.el b/ergoemacs-calculate-bindings.el index 3cd6c18..4202453 100644 --- a/ergoemacs-calculate-bindings.el +++ b/ergoemacs-calculate-bindings.el @@ -95,7 +95,7 @@ ("C-x b" switch-to-buffer) ("C-x C-b" ibuffer) ("C-x C-b" execute-extended-command) - ("C-k" ergoemacs-kill-line) + ("C-k" kill-line) ("M-TAB" ergoemacs-call-keyword-completion)) "Ergoemacs short command names." :group 'ergoemacs-themes diff --git a/ergoemacs-cua.el b/ergoemacs-cua.el index cf53284..c73bb61 100644 --- a/ergoemacs-cua.el +++ b/ergoemacs-cua.el @@ -120,21 +120,25 @@ This override is enabled for active regions before the copy and paste are enable (defvar ergeoemacs-mode-term-raw-mode) (defvar ergoemacs-mode) (defvar ergoemacs--temporary-disable) - +(defvar ergoemacs-mode-regular) +(defvar ergoemacs-mode-send-emacs-keys) (defun ergoemacs--select-keymaps () "Setup conditions for selecting the proper keymaps in `ergoemacs--keymap-alist'." (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 + (if ergoemacs-mode-regular (progn (setq ergoemacs--ena-region-keymap nil ergoemacs--ena-prefix-override-keymap nil ergoemacs--ena-prefix-repeat-keymap nil - ergoemacs-mode nil)) + ergoemacs-mode-regular nil + ergoemacs-mode-send-emacs-keys nil)) (setq ergoemacs--temporary-disable nil - ergoemacs-mode t))) + ergoemacs-mode-regular t + ;; This assumes that `ergoemacs--tempoary-disable' is only called on the remap keys layer + ergoemacs-mode-send-emacs-keys t))) (when ergoemacs-mode ;; The prefix override (when mark-active) operates in three substates: ;; [1] Before using a prefix key @@ -263,9 +267,10 @@ Pass prefix ARG to the respective copy functions." (defun ergoemacs--cua-post-command-handler () "Post command hook for `ergoemacs-mode' based cua keys." - (condition-case nil + (when ergoemacs-mode + (condition-case nil (ergoemacs--cua-post-command-handler-1) - (error nil))) + (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 5066c60..d67ff56 100644 --- a/ergoemacs-functions.el +++ b/ergoemacs-functions.el @@ -102,22 +102,32 @@ :type 'boolean :group 'ergoemacs-mode) -(defun ergoemacs--send-emacs-key (key) +(defun ergoemacs--send-emacs-key (key &optional key2 key3) "This replays the events from the intial key press. -REPEAT is the flag that tells it if is repeated environmennt." +KEY is the first key in the sequence. +KEY2 is the optional second key in the sequence. +KEY3 is the optional third key in the sequence." ;; 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)))) - - - + (when key3 + (setq unread-command-events (cons (cons 'no-record key3) + unread-command-events))) + (when key2 + (setq unread-command-events (cons (cons 'no-record key2) + unread-command-events))) + (setq unread-command-events (cons (cons 'no-record key) + unread-command-events))) + +(defun ergoemacs-kill-line () + "Ergoemacs replacement for `kill-line' using `ergoemacs--send-emacs-key'." + (interactive) + (ergoemacs--send-emacs-key ?\C-k)) - (defvar ergoemacs-delete-functions '(delete-backward-char delete-char kill-word backward-kill-word) "Defines deletion functions that ergoemacs is aware of.") @@ -1122,18 +1132,6 @@ Subsequent calls expands the selection to larger semantic unit." (mark-sexp -1)))) ;;; TEXT TRANSFORMATION RELATED - -(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)) - (defun ergoemacs-kill-line-backward (&optional number) "Kill text between the beginning of the line to the cursor position. If there's no text, delete the previous line ending." diff --git a/ergoemacs-mode.el b/ergoemacs-mode.el index 7b0c219..a127e78 100644 --- a/ergoemacs-mode.el +++ b/ergoemacs-mode.el @@ -126,6 +126,16 @@ Added beginning-of-buffer Alt+n (QWERTY notation) and end-of-buffer Alt+Shift+n" (const :tag "Never Show Mode Line" nil)) :group 'ergoemacs-mode) +(defcustom ergoemacs-mode-send-emacs-keys t + "When t, send corresponding Emacs keys for `ergoemacs-mode' commands." + :type 'boolean + :group 'ergoemacs-mode) + +(defvar ergoemacs--send-emacs-keys-map (let ((map (make-sparse-keymap))) + (define-key map [remap kill-line] 'ergoemacs-kill-line) + map) + "This defines the remaps for the `ergoemacs-mode-send-emacs-keys' commands.") + (defun ergoemacs-mode-line (&optional text) "Set ergoemacs-mode-line. @@ -182,6 +192,7 @@ The TEXT will be what the mode-line is set to be." (defvar ergoemacs-post-command-hook nil) (defvar ergeoemacs-mode-term-raw-mode nil) +(defvar ergoemacs-mode-regular nil) (defun ergoemacs-post-command-hook () "Run `ergoemacs-mode' post command hooks." (when ergoemacs-mode @@ -253,6 +264,7 @@ IS-ERGOEMACS is true when the `ergoemacs-mode' keybindings are installed." (dolist (k ergoemacs-mode--save-keymaps-list) (set k (ergoemacs-mode--get-map k is-ergoemacs)))) + ;; ErgoEmacs minor mode ;;;###autoload (define-minor-mode ergoemacs-mode @@ -279,7 +291,7 @@ The `execute-extended-command' is now \\[execute-extended-command]. (add-hook 'pre-command-hook #'ergoemacs-pre-command-hook) (add-hook 'post-command-hook #'ergoemacs-post-command-hook) (add-hook 'after-load-functions #'ergoemacs-after-load-functions) - + (setq ergoemacs-mode-regular t) (setq ergoemacs-mode--default-frame-alist nil) (dolist (elt (reverse default-frame-alist)) (push elt ergoemacs-mode--default-frame-alist)) @@ -317,6 +329,7 @@ The `execute-extended-command' is now \\[execute-extended-command]. (remove-hook 'after-load-functions #'ergoemacs-after-load-functions) (ergoemacs-mode--restore-maps) (define-key global-map [menu-bar] ergoemacs-old-menu) + (setq ergoemacs-mode-regular nil) (message "Ergoemacs-mode turned OFF."))) (defvar ergoemacs-translate--event-hash (make-hash-table) @@ -430,9 +443,10 @@ after initializing ergoemacs-mode. (ergoemacs--ena-prefix-override-keymap . ,ergoemacs--prefix-override-keymap) (ergoemacs--ena-prefix-repeat-keymap . ,ergoemacs--prefix-repeat-keymap) (ergoemacs--ena-region-keymap . ,ergoemacs-mark-active-keymap) - (ergoemacs-mode . ,ergoemacs-user-keymap) - (ergoemacs-mode . ,ergoemacs-override-keymap) - (ergoemacs-mode . ,ergoemacs-keymap))) + (ergoemacs-mode-regular . ,ergoemacs-user-keymap) + (ergoemacs-mode-regular . ,ergoemacs-override-keymap) + (ergoemacs-mode-regular . ,ergoemacs-keymap) + (ergoemacs-mode-send-emacs-keys . ,ergoemacs--send-emacs-keys-map))) (add-hook 'emulation-mode-map-alists ergoemacs-override-alist) (advice-add 'undefined :around #'ergoemacs-advice-undefined) (advice-add 'read-key :before #'ergoemacs-advice-read-key)) diff --git a/ergoemacs-themes.el b/ergoemacs-themes.el index 52431e4..04231fc 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") 'ergoemacs-kill-line) + (ergoemacs-define-key keymap (kbd "M-g") 'kill-line) (ergoemacs-define-key keymap (kbd "M-G") 'ergoemacs-kill-line-backward)) (defun ergoemacs-set-text-transform (keymap)