branch: externals/ergoemacs-mode commit 9b74f2366038c1142072e92fabe233201cafc2f7 Author: Matthew Fidler <514778+mattfid...@users.noreply.github.com> Commit: Matthew Fidler <514778+mattfid...@users.noreply.github.com>
Fix describe bindings to show ergoemacs pass-through keys. --- ergoemacs-theme-engine.el | 86 ++++++++++++++++++++++++++++++++--------------- ergoemacs-themes.el | 5 ++- 2 files changed, 61 insertions(+), 30 deletions(-) diff --git a/ergoemacs-theme-engine.el b/ergoemacs-theme-engine.el index 336c653..90a899a 100644 --- a/ergoemacs-theme-engine.el +++ b/ergoemacs-theme-engine.el @@ -333,6 +333,64 @@ (defvar ergoemacs--emacs-command-emulation-map nil "Keymap to describe the emacs-command-emulations") +(defun ergoemacs-describe-translations--now () + "Describe translations in current buffer." + (setq ergoemacs--emacs-command-emulation-map (make-sparse-keymap)) + (when ergoemacs-mode-send-emacs-keys + ;; Turn of ergoemacs-mode keys for tranlsation + (setq ergoemacs-mode-regular nil + ergeoemacs-mode-term-raw-mode nil + ergoemacs--ena-prefix-override-keymap nil + ergoemacs--ena-prefix-repeat-keymap nil + ergoemacs--ena-region-keymap nil + ergoemacs-mode-send-emacs-keys nil) + (unwind-protect + (dolist (elt ergoemacs--emacs-command-emulation-list) + (let* ( + ;; Get the emacs key + (emacs-key (vconcat (cdr elt))) + ;; Get Currently bound command + (emacs-command (key-binding emacs-key t t)) + ;; Get the ergoemacs-mode keys + (command (car elt)) + (keys (where-is-internal command ergoemacs-override-keymap nil t t)) + first-elt) + (when keys + (dolist (k keys) + (setq first-elt (aref k 0)) + (unless (and (numberp first-elt) (= first-elt 27)) + (define-key ergoemacs--emacs-command-emulation-map k emacs-command)))))) + (setq ergoemacs-mode-regular t + ergeoemacs-mode-term-raw-mode nil + ergoemacs--ena-prefix-override-keymap nil + ergoemacs--ena-prefix-repeat-keymap nil + ergoemacs--ena-region-keymap nil + ergoemacs-mode-send-emacs-keys t)) + (substitute-command-keys "\\{ergoemacs--emacs-command-emulation-map}"))) + +(defun ergoemacs-describe-bindings (&optional prefix buffer) + "Display a buffer showing a list of all defined keys, and their definitions. +The keys are displayed in order of precedence. + +The optional argument PREFIX, if non-nil, should be a key sequence; +then we display only bindings that start with that prefix. +The optional argument BUFFER specifies which buffer's bindings +to display (default, the current buffer). BUFFER can be a buffer +or a buffer name." + (interactive) + (or buffer (setq buffer (current-buffer))) + (help-setup-xref (list #'describe-bindings prefix buffer) + (called-interactively-p 'interactive)) + (with-help-window (help-buffer) + ;; Be aware that `describe-buffer-bindings' puts its output into + ;; the current buffer. + (with-current-buffer (help-buffer) + (when ergoemacs-mode-send-emacs-keys + (insert "Ergoemacs-mode translation in this buffer\n") + (insert (ergoemacs-describe-translations--now)) + (insert "\n\n")) + (describe-buffer-bindings buffer prefix)))) + (defun ergoemacs-theme-describe () "Display the full documentation for Ergoemacs." (interactive) @@ -393,33 +451,7 @@ (help-xref-button 1 'help-url (replace-regexp-in-string "[.]svg\\'" ".png" (nth 2 elt))))) (insert "\n\n")))) (insert "\n\n") - (setq required-p t) - (when ergoemacs-mode-send-emacs-keys - (setq ergoemacs--emacs-command-emulation-map (make-sparse-keymap)) - (dolist (elt ergoemacs--emacs-command-emulation-list) - (let* (; Turn of ergoemacs-mode keys for tranlsation - (ergoemacs-mode-regular nil) - (ergeoemacs-mode-term-raw-mode nil) - (ergoemacs--ena-prefix-override-keymap nil) - (ergoemacs--ena-prefix-repeat-keymap nil) - (ergoemacs--ena-region-keymap nil) - (ergoemacs-mode-send-emacs-keys nil) - ;; Get the emacs key - (emacs-key (vconcat (cdr elt))) - ;; Get Currently bound command - (emacs-command (with-current-buffer cb (key-binding emacs-key t t))) - ;; Get the ergoemacs-mode keys - (command (car elt)) - (keys (where-is-internal command ergoemacs-override-keymap nil t t)) - first-elt) - (when keys - (dolist (k keys) - (setq first-elt (aref k 0)) - (unless (and (numberp first-elt) (= first-elt 27)) - (message "do") - (define-key ergoemacs--emacs-command-emulation-map k command)))))) - (insert "Commands that ergoemacs keys run in current buffer\n\n") - (insert (substitute-command-keys "\\{ergoemacs--emacs-command-emulation-map}"))) + (buffer-string))))) (defun ergoemacs-theme--svg-elt-nonabbrev (what) diff --git a/ergoemacs-themes.el b/ergoemacs-themes.el index c567446..76ebe0a 100644 --- a/ergoemacs-themes.el +++ b/ergoemacs-themes.el @@ -655,7 +655,8 @@ These keys do not depend on the layout." (define-key keymap [remap describe-mode] 'ergoemacs-describe-major-mode) (define-key keymap [remap cua-paste] 'ergoemacs-paste) - (define-key keymap [remap cua-cut-region] 'ergoemacs-cut-line-or-region)) + (define-key keymap [remap cua-cut-region] 'ergoemacs-cut-line-or-region) + (define-key keymap [remap describe-bindings] 'ergoemacs-describe-bindings)) (defun ergoemacs-set-menu-bar-file () "File menu." @@ -1320,8 +1321,6 @@ In a terminal, this can be either arrow keys (e.g. meta+O A == <up>) or regular (ergoemacs-unset-keys ergoemacs-override-keymap) (ergoemacs-set-standard-vars) - - (ergoemacs-set-standard-fixed ergoemacs-override-keymap) (dolist (map (list ergoemacs-override-keymap ergoemacs-mode-term-raw-keymap)) (ergoemacs-set-move-char map)