branch: externals/ergoemacs-mode commit 9acd2057fafe96ff7937e877f2d6edd04cc05dfe Author: Fidler <matthew.fid...@gmail.com> Commit: Fidler <matthew.fid...@gmail.com>
Fix Issue #451 by coding a new old binding function --- ergoemacs-functions.el | 21 ++++++ ergoemacs-map.el | 173 +++++++++++++++++++++++++------------------------ 2 files changed, 108 insertions(+), 86 deletions(-) diff --git a/ergoemacs-functions.el b/ergoemacs-functions.el index 4516828..9edc59b 100644 --- a/ergoemacs-functions.el +++ b/ergoemacs-functions.el @@ -2730,6 +2730,27 @@ With a prefix argument like \\[universial-argument] in an (unless (fboundp 'ergoemacs-test) (autoload 'ergoemacs-test (expand-file-name "ergoemacs-test.el" ergoemacs-dir) nil t)) +(defun ergoemacs-where-is-old-binding () + "Find where the old binding of a key is now located." + (interactive) + (let (ergoemacs-mode + key-seq + cmd + key-seq2) + (unwind-protect + (progn + (setq overriding-terminal-local-map (ergoemacs :original global-map)) + (setq key-seq (read-key-sequence "Old Emacs Command: ") + cmd (key-binding key-seq) + overriding-terminal-local-map nil + key-seq2 (where-is-internal cmd nil t))) + (setq overriding-terminal-local-map nil)) + (message "%s; %s" key-seq key-seq2) + (if key-seq2 + (message "Old Emacs Key: %s-> Ergoemacs Key: %s" (ergoemacs-key-description key-seq) + (ergoemacs-key-description key-seq2)) + (message "Could not find old emacs %s" (ergoemacs-key-description key-seq))))) + (provide 'ergoemacs-functions) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ergoemacs-functions.el ends here diff --git a/ergoemacs-map.el b/ergoemacs-map.el index 4c8cc2a..c2a77a7 100644 --- a/ergoemacs-map.el +++ b/ergoemacs-map.el @@ -953,92 +953,93 @@ If it is a tranisent map, assign the :dont-modify-p property to t." "Modifies Active maps. When INI is non-nil, add conditional maps to `minor-mode-map-alist'." - (let ((char-map (get-char-property-and-overlay (point) 'keymap)) - (local-map (get-text-property (point) 'local-map)) - (current-local-map (current-local-map)) - tmp) - (when (and overriding-terminal-local-map - (not (eq overriding-terminal-local-map ergoemacs-map--modify-active-last-overriding-terminal-local-map)) - (not (ergoemacs overriding-terminal-local-map :installed-p)) - (not (memq 'add-keymap-witness overriding-terminal-local-map))) - ;; (ergoemacs-map--temporary-map-properties overriding-terminal-local-map) - (setq overriding-terminal-local-map (ergoemacs overriding-terminal-local-map))) - - (when (and overriding-local-map - (not (eq overriding-local-map ergoemacs-map--modify-active-last-overriding-local-map)) - (not (ergoemacs overriding-local-map :installed-p))) - ;; (ergoemacs-map--temporary-map-properties overriding-local-map) - (setq overriding-local-map (ergoemacs overriding-local-map))) - - (ergoemacs-save-buffer-state - (when (and char-map (symbolp char-map)) - (setq char-map (ergoemacs-sv char-map))) - (when (and (listp char-map) - (car char-map) - (not (eq (car char-map) ergoemacs-map--modify-active-last-char-map)) - (not (ergoemacs (car char-map) :installed-p))) - (cond - ((cdr char-map) - ;; Overlay - (overlay-put (cdr char-map) 'keymap (ergoemacs (car char-map)))) - (t ;; Text Property - (put-text-property (previous-single-char-property-change (point) 'keymap) - (next-single-char-property-change (point) 'keymap) - 'keymap - (ergoemacs (car char-map)))))) - (when (and local-map (symbolp local-map)) - (setq local-map (ergoemacs-sv local-map))) - (when (and local-map - (not (eq local-map ergoemacs-map--modify-active-last-local-map)) - (not (ergoemacs local-map :installed-p))) - (put-text-property (previous-single-char-property-change (point) 'local-map) - (next-single-char-property-change (point) 'local-map) - 'local-map (ergoemacs local-map))) - ;; Save before any changes happen (ie in calc) - (when (and (not ergoemacs-map--saved-global-map) - (ergoemacs :ignore-global-changes-p)) - (setq ergoemacs-map--saved-global-map (copy-keymap global-map))) - ;; Restore outside of modes that change the global map (calc) - (when (and ergoemacs-map--saved-global-map - (not (ergoemacs :ignore-global-changes-p))) - (setq global-map (copy-keymap ergoemacs-map--saved-global-map) - ergoemacs-map--saved-global-map nil) - (use-global-map global-map)) - (when (and (setq tmp (current-global-map)) - (ergoemacs-keymapp tmp) - (not (eq tmp global-map)) - (or (not ergoemacs-map--last-global-map) - (not (eq ergoemacs-map--last-global-map tmp))) - (not (ergoemacs tmp :installed-p))) - (use-global-map (ergoemacs tmp)) - (setq ergoemacs-map--last-global-map (current-global-map))) - (when (and current-local-map (not (ergoemacs current-local-map :installed-p)) - (not (minibufferp))) - (setq ergoemacs-map--breadcrumb (format "%s" major-mode)) - (when (eq major-mode 'ess-mode) - (setq ergoemacs-map--breadcrumb (format "ess-mode-%s" ess-language))) - (use-local-map (ergoemacs current-local-map)) - (setq ergoemacs-map--breadcrumb "")) - (when (and (minibufferp) ergoemacs-read-from-minibuffer-map) - (use-local-map (ergoemacs ergoemacs-read-from-minibuffer-map)) - (setq ergoemacs-read-from-minibuffer-map nil - ergoemacs-map--breadcrumb "")) - ;; Run deferred "hooks" - (when (and (minibufferp) ergoemacs-component-struct--composed-hook-minibuffer) - (dolist (elt (reverse ergoemacs-component-struct--composed-hook-minibuffer)) - (when (equal (ergoemacs (symbol-value elt) :map-key) - (ergoemacs ergoemacs-read-from-minibuffer-map :map-key)) - (use-local-map (make-composed-keymap (cdr elt) (current-local-map)))) - (ergoemacs-save-buffer-state - (set (make-local-variable (car elt)) (make-composed-keymap (cdr elt) (symbol-value (car elt)))))) - (setq ergoemacs-component-struct--composed-hook-minibuffer nil))) - (setq ergoemacs-map--modify-active-last-overriding-terminal-local-map overriding-terminal-local-map - ergoemacs-map--modify-active-last-overriding-local-map overriding-local-map - ergoemacs-map--modify-active-last-char-map char-map - ergoemacs-map--modify-active-last-local-map local-map) - (ergoemacs-map--emulation-mode-map-alists) - (ergoemacs-map--minor-mode-map-alist ini) - (ergoemacs-map--minor-mode-overriding-map-alist))) + (when ergoemacs-mode + (let ((char-map (get-char-property-and-overlay (point) 'keymap)) + (local-map (get-text-property (point) 'local-map)) + (current-local-map (current-local-map)) + tmp) + (when (and overriding-terminal-local-map + (not (eq overriding-terminal-local-map ergoemacs-map--modify-active-last-overriding-terminal-local-map)) + (not (ergoemacs overriding-terminal-local-map :installed-p)) + (not (memq 'add-keymap-witness overriding-terminal-local-map))) + ;; (ergoemacs-map--temporary-map-properties overriding-terminal-local-map) + (setq overriding-terminal-local-map (ergoemacs overriding-terminal-local-map))) + + (when (and overriding-local-map + (not (eq overriding-local-map ergoemacs-map--modify-active-last-overriding-local-map)) + (not (ergoemacs overriding-local-map :installed-p))) + ;; (ergoemacs-map--temporary-map-properties overriding-local-map) + (setq overriding-local-map (ergoemacs overriding-local-map))) + + (ergoemacs-save-buffer-state + (when (and char-map (symbolp char-map)) + (setq char-map (ergoemacs-sv char-map))) + (when (and (listp char-map) + (car char-map) + (not (eq (car char-map) ergoemacs-map--modify-active-last-char-map)) + (not (ergoemacs (car char-map) :installed-p))) + (cond + ((cdr char-map) + ;; Overlay + (overlay-put (cdr char-map) 'keymap (ergoemacs (car char-map)))) + (t ;; Text Property + (put-text-property (previous-single-char-property-change (point) 'keymap) + (next-single-char-property-change (point) 'keymap) + 'keymap + (ergoemacs (car char-map)))))) + (when (and local-map (symbolp local-map)) + (setq local-map (ergoemacs-sv local-map))) + (when (and local-map + (not (eq local-map ergoemacs-map--modify-active-last-local-map)) + (not (ergoemacs local-map :installed-p))) + (put-text-property (previous-single-char-property-change (point) 'local-map) + (next-single-char-property-change (point) 'local-map) + 'local-map (ergoemacs local-map))) + ;; Save before any changes happen (ie in calc) + (when (and (not ergoemacs-map--saved-global-map) + (ergoemacs :ignore-global-changes-p)) + (setq ergoemacs-map--saved-global-map (copy-keymap global-map))) + ;; Restore outside of modes that change the global map (calc) + (when (and ergoemacs-map--saved-global-map + (not (ergoemacs :ignore-global-changes-p))) + (setq global-map (copy-keymap ergoemacs-map--saved-global-map) + ergoemacs-map--saved-global-map nil) + (use-global-map global-map)) + (when (and (setq tmp (current-global-map)) + (ergoemacs-keymapp tmp) + (not (eq tmp global-map)) + (or (not ergoemacs-map--last-global-map) + (not (eq ergoemacs-map--last-global-map tmp))) + (not (ergoemacs tmp :installed-p))) + (use-global-map (ergoemacs tmp)) + (setq ergoemacs-map--last-global-map (current-global-map))) + (when (and current-local-map (not (ergoemacs current-local-map :installed-p)) + (not (minibufferp))) + (setq ergoemacs-map--breadcrumb (format "%s" major-mode)) + (when (eq major-mode 'ess-mode) + (setq ergoemacs-map--breadcrumb (format "ess-mode-%s" ess-language))) + (use-local-map (ergoemacs current-local-map)) + (setq ergoemacs-map--breadcrumb "")) + (when (and (minibufferp) ergoemacs-read-from-minibuffer-map) + (use-local-map (ergoemacs ergoemacs-read-from-minibuffer-map)) + (setq ergoemacs-read-from-minibuffer-map nil + ergoemacs-map--breadcrumb "")) + ;; Run deferred "hooks" + (when (and (minibufferp) ergoemacs-component-struct--composed-hook-minibuffer) + (dolist (elt (reverse ergoemacs-component-struct--composed-hook-minibuffer)) + (when (equal (ergoemacs (symbol-value elt) :map-key) + (ergoemacs ergoemacs-read-from-minibuffer-map :map-key)) + (use-local-map (make-composed-keymap (cdr elt) (current-local-map)))) + (ergoemacs-save-buffer-state + (set (make-local-variable (car elt)) (make-composed-keymap (cdr elt) (symbol-value (car elt)))))) + (setq ergoemacs-component-struct--composed-hook-minibuffer nil))) + (setq ergoemacs-map--modify-active-last-overriding-terminal-local-map overriding-terminal-local-map + ergoemacs-map--modify-active-last-overriding-local-map overriding-local-map + ergoemacs-map--modify-active-last-char-map char-map + ergoemacs-map--modify-active-last-local-map local-map) + (ergoemacs-map--emulation-mode-map-alists) + (ergoemacs-map--minor-mode-map-alist ini) + (ergoemacs-map--minor-mode-overriding-map-alist)))) (defvar ergoemacs-map--quit-map nil