[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] 42/287: Push shortcuts to the bottom. Should allow overrides.
From: |
Matthew Fidler |
Subject: |
[elpa] 42/287: Push shortcuts to the bottom. Should allow overrides. |
Date: |
Wed, 02 Jul 2014 14:44:27 +0000 |
mlf176f2 pushed a commit to branch externals/ergoemacs-mode
in repository elpa.
commit 8963c6c34a3e78bf14370e551eefd8bb3f061a27
Author: Matthew L. Fidler <address@hidden>
Date: Wed Jun 4 09:47:04 2014 -0500
Push shortcuts to the bottom. Should allow overrides.
---
ergoemacs-modal.el | 37 +++++++++++++-------------
ergoemacs-mode.el | 63 ++++++++++++++++++++++-----------------------
ergoemacs-shortcuts.el | 10 ++-----
ergoemacs-theme-engine.el | 26 ++++++------------
4 files changed, 61 insertions(+), 75 deletions(-)
diff --git a/ergoemacs-modal.el b/ergoemacs-modal.el
index 94b9cbd..94c5acb 100644
--- a/ergoemacs-modal.el
+++ b/ergoemacs-modal.el
@@ -325,12 +325,15 @@ Typically function keys")
(defvar ergoemacs-modal-keymap nil
"`ergoemacs-mode' modal keymap. Attempts to capture ALL keystrokes.")
-(defun ergoemacs-modal-keymap (&optional map)
+(defvar ergoemacs-modal-base-keymap nil
+ "`ergoemacs-mode' modal keymap. Attempts to capture ALL keystrokes.")
+
+(defun ergoemacs-modal-base-keymap (&optional map)
"Returns the ergoemacs-modal keymap"
- (if ergoemacs-modal-keymap
+ (if ergoemacs-modal-base-keymap
(if map
- (make-composed-keymap (list map ergoemacs-modal-keymap))
- ergoemacs-modal-keymap)
+ (make-composed-keymap (list map ergoemacs-modal-base-keymap))
+ ergoemacs-modal-base-keymap)
(let ((ret (make-sparse-keymap)))
(unless ret
(setq ret (make-sparse-keymap)))
@@ -377,30 +380,27 @@ Typically function keys")
"<end>"
"<insert>"
"<deletechar>"))
- (setq ergoemacs-modal-keymap ret))
- (ergoemacs-modal-keymap map)))
+ (setq ergoemacs-modal-base-keymap ret))
+ (ergoemacs-modal-base-keymap map)))
(defvar ergoemacs-modal-list '())
(defun ergoemacs-modal-toggle (type)
"Toggle ergoemacs command modes."
- (let* ((x (assq 'ergoemacs-modal ergoemacs-emulation-mode-map-alist))
- (help-list (gethash type ergoemacs-translation-text))
+ (let* ((help-list (gethash type ergoemacs-translation-text))
keymap
(type type)
tmp
(ergoemacs-ignore-advice t))
- (setq ergoemacs-emulation-mode-map-alist
- (delq x ergoemacs-emulation-mode-map-alist))
(cond
((or (not ergoemacs-modal-list) ;; First time to turn on
(not (eq (nth 0 ergoemacs-modal-list) type)) ;; New modal
)
(push type ergoemacs-modal-list)
- (setq keymap (make-composed-keymap
- (list (ergoemacs-local-map type t)
- (ergoemacs-modal-keymap))))
- (push (cons 'ergoemacs-modal keymap)
- ergoemacs-emulation-mode-map-alist)
+ (setq ergoemacs-modal-keymap
+ (make-composed-keymap
+ (list (ergoemacs-local-map type t)
+ (ergoemacs-modal-base-keymap))))
+ (ergoemacs-add-emulation)
(set-default 'ergoemacs-modal type)
(setq ergoemacs-modal type)
(unless ergoemacs-default-cursor
@@ -428,12 +428,11 @@ Typically function keys")
(if type
(progn ;; Turn off current modal, turn on last modal.
(setq help-list (gethash type ergoemacs-translation-text))
- (setq keymap
+ (setq ergoemacs-modal-keymap
(make-composed-keymap
(list (ergoemacs-local-map type t)
- (ergoemacs-modal-keymap))))
- (push (cons 'ergoemacs-modal keymap)
- ergoemacs-emulation-mode-map-alist)
+ (ergoemacs-modal-base-keymap))))
+ (ergoemacs-add-emulation)
(set-default 'ergoemacs-modal type)
(setq ergoemacs-modal type)
(unless ergoemacs-default-cursor
diff --git a/ergoemacs-mode.el b/ergoemacs-mode.el
index c770bac..94d99eb 100644
--- a/ergoemacs-mode.el
+++ b/ergoemacs-mode.el
@@ -598,15 +598,7 @@ bindings the keymap is:
(progn
;; add key
(define-key ergoemacs-local-keymap key command)
- (let ((x (assq major ergoemacs-emulation-mode-map-alist)))
- ;; Delete keymap.
- (if x
- (setq ergoemacs-emulation-mode-map-alist (delq x
ergoemacs-emulation-mode-map-alist)))
- ;; Put at the top of the list
- (setq ergoemacs-emulation-mode-map-alist
- (append ergoemacs-emulation-mode-map-alist
- (list (cons major ergoemacs-local-keymap))))
- (ergoemacs-shuffle-keys)))))
+ (ergoemacs-add-emulation major ergoemacs-local-keymap))))
(defun ergoemacs-local-unset-key (key)
"Unset a key in the ergoemacs local map."
@@ -706,30 +698,37 @@ However instead of using M-a `eval-buffer', you could use
M-a `eb'"
(setq ergoemacs-shortcut-keys nil)
(ergoemacs-debug "WARNING: ergoemacs-shortcut-keys was turned on;
Turning off."))))
+(defun ergoemacs-add-emulation (&optional var keymap keymap-list)
+ "Add emulation map
+VAR is the emulation map variable
+KEYMAP is the emulation map keymap
+KEYMAP-LIST is a list of emulation maps.
+This is added to `ergoemacs-emulation-mode-map-alist' while keeping the order
correct."
+ (let ((small-emulation ergoemacs-emulation-mode-map-alist))
+ (while (memq (car (car small-emulation))
+ '(ergoemacs-modal
+ ergoemacs-repeat-keys
+ ergoemacs-read-input-keys))
+ (pop small-emulation))
+ (when (eq (car (nth (- (length small-emulation) 1) small-emulation))
+ 'ergoemacs-shortcut-keys)
+ (setq small-emulation (nbutlast small-emulation 1)))
+ (when (and var keymap)
+ (setq x (assq var small-emulation))
+ (when x
+ (delq x small-emulation))
+ (push (cons var keymap) small-emulation))
+ (when (listp keymap-list)
+ (setq small-emulation (append keymap-list small-emulation)))
+ (setq ergoemacs-emulation-mode-map-alist
+ `((ergoemacs-modal ,@(or ergoemacs-modal-keymap
(make-sparse-keymap)))
+ (ergoemacs-repeat-keys ,@(or ergoemacs-repeat-keymap
(make-sparse-keymap)))
+ (ergoemacs-read-input-keys ,@(or ergoemacs-read-input-keymap
(make-sparse-keymap)))
+ ,@small-emulation
+ (ergoemacs-shortcut-keys ,@(or ergoemacs-shortcut-keymap
(make-sparse-keymap)))))))
+
(defun ergoemacs-shuffle-keys (&optional var keymap keymap-list)
- "Shuffle ergoemacs keymaps.
-When VAR and KEYMAP are specified, replace the keymap in the
-`ergoemacs-emulation-mode-map-alist'."
- ;; Promotes keymaps in `ergoemacs-emulation-mode-map-alist'
- (mapc
- (lambda(what)
- (if (and keymap (eq var what))
- (let ((x (assq what ergoemacs-emulation-mode-map-alist)))
- (when x
- (delq x ergoemacs-emulation-mode-map-alist))
- (push (cons var keymap) ergoemacs-emulation-mode-map-alist))
- (let ((x (assq what ergoemacs-emulation-mode-map-alist)))
- (and x (setq ergoemacs-emulation-mode-map-alist
- (cons x (delq x ergoemacs-emulation-mode-map-alist)))))))
- ;; Promoted from least to most important
- '(ergoemacs-shortcut-keys
- ergoemacs-modal
- ergoemacs-repeat-keys
- ergoemacs-read-input-keys))
- ;;
- ;; ergoemacs-shortcut-keys should be at the bottom of the list
-
- ;; Demote
+ "Shuffle ergoemacs keymaps in `minor-mode-map-alist'."
(let ((x (assq 'ergoemacs-unbind-keys minor-mode-map-alist)))
(setq minor-mode-map-alist (append (delq x minor-mode-map-alist) (list
x)))))
diff --git a/ergoemacs-shortcuts.el b/ergoemacs-shortcuts.el
index 54d4a1d..3602f26 100644
--- a/ergoemacs-shortcuts.el
+++ b/ergoemacs-shortcuts.el
@@ -1440,13 +1440,9 @@ Basically, this gets the keys called and passes the
arguments to`ergoemacs-read-
(defvar ergoemacs-repeat-keymap nil)
(defun ergoemacs-install-repeat-keymap (keymap &optional mode-line)
"Installs repeat KEYMAP."
- (let* ((x (assq 'ergoemacs-repeat-keys ergoemacs-emulation-mode-map-alist)))
- (setq ergoemacs-repeat-keymap keymap)
- (setq ergoemacs-repeat-keys t)
- (when x
- (setq ergoemacs-emulation-mode-map-alist (delq x
ergoemacs-emulation-mode-map-alist)))
- (push (cons 'ergoemacs-repeat-keys ergoemacs-repeat-keymap)
- ergoemacs-emulation-mode-map-alist))
+ (setq ergoemacs-repeat-keymap keymap)
+ (ergoemacs-add-emulation)
+ (setq ergoemacs-repeat-keys t)
(when mode-line
(ergoemacs-mode-line mode-line)))
diff --git a/ergoemacs-theme-engine.el b/ergoemacs-theme-engine.el
index 66205e6..9074be3 100644
--- a/ergoemacs-theme-engine.el
+++ b/ergoemacs-theme-engine.el
@@ -826,7 +826,7 @@ ergoemacs-get-keymaps-for-hook OBJ HOOK")
(set (make-local-variable emulation-var) t)
(setq x (assq emulation-var ergoemacs-emulation-mode-map-alist))
(when (or (not x) always)
- (ergoemacs-shuffle-keys
+ (ergoemacs-add-emulation
emulation-var (oref (ergoemacs-get-fixed-map obj map-name)
map))))))))))
(defgeneric ergoemacs-create-hooks ()
@@ -1356,14 +1356,12 @@ DONT-COLLAPSE doesn't collapse empty keymaps"
(and (not (eq nil theme))(symbolp theme)
(symbol-name theme))
(and (stringp ergoemacs-theme) ergoemacs-theme)
(and (not (eq nil ergoemacs-theme)) (symbolp
ergoemacs-theme) (symbol-name ergoemacs-theme))))
- (setq ergoemacs-emulation-mode-map-alist
- `(,(cons 'ergoemacs-read-input-keys read-map)
- ,()
- ,(cons 'ergoemacs-shortcut-keys shortcut-map)
- ,@(mapcar
- (lambda(remap)
- (cons remap (oref (ergoemacs-get-fixed-map theme-obj remap)
map)))
- (ergoemacs-get-hooks theme-obj "-mode\\'")))))))
+ (ergoemacs-add-emulation
+ nil nil
+ (mapcar
+ (lambda(remap)
+ (cons remap (oref (ergoemacs-get-fixed-map theme-obj remap) map)))
+ (ergoemacs-get-hooks theme-obj "-mode\\'"))))))
@@ -2499,12 +2497,7 @@ Returns list of: read-keymap shortcut-keymap keymap
shortcut-list unbind-keymap
(unless (boundp emulation-var)
(set-default emulation-var nil)
(set (make-local-variable emulation-var) t))
- (setq x (assq emulation-var ergoemacs-emulation-mode-map-alist))
- (when x
- (setq ergoemacs-emulation-mode-map-alist (delq x
ergoemacs-emulation-mode-map-alist)))
- (setq ergoemacs-emulation-mode-map-alist
- (append ergoemacs-emulation-mode-map-alist
- (list (cons emulation-var replace))))
+ (ergoemacs-add-emulation emulation-var replace)
(if always-modify-p
(setq all-always-p nil)
(push (list hook map-name) ergoemacs-theme-hook-installed)))
@@ -3400,8 +3393,7 @@ This also:
;; `ergoemacs-read-input-keymap', then `ergoemacs-shortcut-keymap'
;; in `ergoemacs-emulation-mode-map-alist'
- (push (cons 'ergoemacs-shortcut-keys ergoemacs-shortcut-keymap)
ergoemacs-emulation-mode-map-alist)
- (push (cons 'ergoemacs-read-input-keys ergoemacs-read-input-keymap)
ergoemacs-emulation-mode-map-alist)
+ (ergoemacs-add-emulation)
(add-hook 'emulation-mode-map-alists 'ergoemacs-emulation-mode-map-alist)
(ergoemacs-theme-make-hooks ergoemacs-theme)
(set-default 'ergoemacs-mode t)
- [elpa] 23/287: Basic classes written, (continued)
- [elpa] 23/287: Basic classes written, Matthew Fidler, 2014/07/02
- [elpa] 29/287: Started parsing., Matthew Fidler, 2014/07/02
- [elpa] 34/287: Now can get the fixed maps for a list of components., Matthew Fidler, 2014/07/02
- [elpa] 36/287: Use pushnew for get-hooks., Matthew Fidler, 2014/07/02
- [elpa] 37/287: Added ergoemacs-keymap-collapse and ergoemacs-keymap-empty-p, Matthew Fidler, 2014/07/02
- [elpa] 40/287: Remove shortcut override mode., Matthew Fidler, 2014/07/02
- [elpa] 44/287: Suppress shortcuts, Matthew Fidler, 2014/07/02
- [elpa] 39/287: Starting applying keymaps to ergoemacs-emulation-mode-map-alist, Matthew Fidler, 2014/07/02
- [elpa] 45/287: Fix ergoemacs-describe-key, Matthew Fidler, 2014/07/02
- [elpa] 31/287: Created composite map list, Matthew Fidler, 2014/07/02
- [elpa] 42/287: Push shortcuts to the bottom. Should allow overrides.,
Matthew Fidler <=
- [elpa] 49/287: Bug fix for substitute-command-keys, Matthew Fidler, 2014/07/02
- [elpa] 43/287: Be more conservative with substituting key commands., Matthew Fidler, 2014/07/02
- [elpa] 46/287: Fix Issue #7, Matthew Fidler, 2014/07/02
- [elpa] 50/287: Another bug-fix for substitute-command-keys, Matthew Fidler, 2014/07/02
- [elpa] 52/287: Debugging ergoemacs-theme obect, Matthew Fidler, 2014/07/02
- [elpa] 51/287: more substitute-command-keys fixes, Matthew Fidler, 2014/07/02
- [elpa] 58/287: Fix misplaced paren, Matthew Fidler, 2014/07/02
- [elpa] 57/287: Added basic variable/mode initialization routines., Matthew Fidler, 2014/07/02
- [elpa] 54/287: Maps seem correct now, Matthew Fidler, 2014/07/02
- [elpa] 48/287: Unstage the incompatible, Matthew Fidler, 2014/07/02