[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ergoemacs-mode 9e58dd5 261/325: Simplify
From: |
Stefan Monnier |
Subject: |
[elpa] externals/ergoemacs-mode 9e58dd5 261/325: Simplify |
Date: |
Sat, 23 Oct 2021 18:49:06 -0400 (EDT) |
branch: externals/ergoemacs-mode
commit 9e58dd5f70f12cf310bb3645dd1cb9c68cc677db
Author: Matthew Fidler <514778+mattfidler@users.noreply.github.com>
Commit: Matthew Fidler <514778+mattfidler@users.noreply.github.com>
Simplify
---
ergoemacs-macros.el | 24 +-
ergoemacs-map-properties.el | 1124 -------------------------------------------
ergoemacs-mode.el | 2 +-
ergoemacs-translate.el | 53 +-
4 files changed, 14 insertions(+), 1189 deletions(-)
diff --git a/ergoemacs-macros.el b/ergoemacs-macros.el
index 6bd8fae..c12015f 100644
--- a/ergoemacs-macros.el
+++ b/ergoemacs-macros.el
@@ -51,28 +51,6 @@ If SYMBOL is void, return nil"
(ignore-errors (default-value ,symbol))
(ignore-errors (symbol-value ,symbol))))
-(defvar ergoemacs-theme-component-properties
- '(:bind
- :bind-keymap
- :bind*
- :bind-keymap*
- :commands
- :interpreter
- :defer
- :demand
- :package-name
- :ergoemacs-require
- :no-load
- :no-require
- :just-first-keys
- :variable-modifiers
- :variable-prefixes
- :layout)
- "List of ergoemacs-theme-component properties.")
-
-(defvar ergoemacs-theme-components--modified-plist nil
- "Modified plist.")
-
(fset 'ergoemacs-theme-component--parse-keys-and-body
#'(lambda (keys-and-body &optional parse-function skip-first)
"Split KEYS-AND-BODY into keyword-and-value pairs and the remaining
body.
@@ -285,7 +263,7 @@ When arg1 can be a property. The following properties are
supported:
(ergoemacs-map--cache-- --hash-key (progn ,@body)))))))
(defmacro ergoemacs-no-specials (&rest body)
- "Revert some `ergoemacs-mode' functions to their C defintions in BODY."
+ "Revert some `ergoemacs-mode' function s to their C defintions in BODY."
`(cl-letf (((symbol-function 'read-key-sequence)
#'ergoemacs--real-read-key-sequence)
((symbol-function 'describe-key) #'ergoemacs--real-describe-key))
,@body))
diff --git a/ergoemacs-map-properties.el b/ergoemacs-map-properties.el
index 155c800..1809efc 100644
--- a/ergoemacs-map-properties.el
+++ b/ergoemacs-map-properties.el
@@ -35,1058 +35,6 @@
(eval-when-compile
(require 'ergoemacs-macros))
-(defvar ergoemacs-translate--parent-map)
-(defvar ergoemacs-translate--modal-parent-map)
-(defvar ergoemacs--gzip)
-(defvar ergoemacs-map-keymap--load-autoloads-p)
-(defvar ergoemacs--original-local-map)
-(defvar ergoemacs--system)
-(defvar ergoemacs-breadcrumb-hash)
-(defvar ergoemacs-dir)
-(defvar ergoemacs-directories-where-keys-from-hook-are-deferred)
-(defvar ergoemacs-functions-that-always-override-ergoemacs-mode)
-(defvar ergoemacs-hooks-that-always-override-ergoemacs-mode)
- (defvar ergoemacs-map-properties--after-ergoemacs)
-(defvar ergoemacs-map-properties--before-ergoemacs)
-(defvar ergoemacs-map-properties--get-or-generate-map-key)
-(defvar ergoemacs-map-properties--indirect-keymaps)
-(defvar ergoemacs-map-properties--key-struct)
-(defvar ergoemacs-map-properties--plist-hash)
-(defvar ergoemacs-mode--fast-p)
-(defvar ergoemacs-remap-ignore)
-(defvar ergoemacs-saved-global-map)
-(defvar ergoemacs-map-properties--label-atoms-maps)
-(defvar icicle-search-key-prefix)
-(defvar icicle-search-map)
-
-(declare-function ergoemacs-command-loop--spinner-display
"ergoemacs-command-loop")
-
-(declare-function ergoemacs-map-keymap "ergoemacs-mapkeymap")
-(declare-function ergoemacs-emacs-exe "ergoemacs-functions")
-(declare-function ergoemacs-setcdr "ergoemacs-lib")
-(declare-function ergoemacs-warn "ergoemacs-lib")
-
-(declare-function ergoemacs-translate--define-key "ergoemacs-translate")
-(declare-function ergoemacs-translate--escape-to-meta "ergoemacs-translate")
-(declare-function ergoemacs-key-description "ergoemacs-key-description")
-
-(declare-function icicle-remap "icicles-opt")
-
-(defun ergoemacs-map-properties--keymap-value (keymap)
- "Return the keymap value of KEYMAP.
-KEYMAP can be a symbol, keymap or ergoemacs-mode keymap"
- (let (tmp)
- (or (and (integerp keymap) keymap)
- (and (listp keymap) (ergoemacs-keymapp keymap) keymap)
- (and (symbolp keymap) (ergoemacs-keymapp (setq tmp (symbol-value
keymap))) tmp)
- (and (symbolp keymap) (ergoemacs-keymapp (setq tmp (symbol-function
keymap))) tmp)
- ;; (ignore-errors (and (setq tmp (ergoemacs-gethash keymap
ergoemacs-map-properties--plist-hash))
- ;; (setq tmp (ergoemacs-gethash :map-list tmp))
- ;; (symbol-value (car tmp))))
- ;; (ignore-errors (and (setq tmp (plist-get keymap :map-list))
(symbol-value (nth 0 tmp))))
- )))
-
-(defun ergoemacs-map-properties--composed-p (keymap)
- "Determine if the KEYMAP is a composed keymap."
- (and (ergoemacs-keymapp keymap)
- (ignore-errors (eq 'keymap (car keymap)))
- (ignore-errors (eq 'keymap (cl-caadr keymap)))))
-
-;; FIXME: Write test or function
-(defun ergoemacs-map-properties--all-sparse-p (keymap)
- "Determines if all components of a KEYMAP are sparse keymaps.
-This does not include submaps, which may also be a full keymap."
- (if (not (ergoemacs-keymapp keymap)) t
- (let ((ret t)
- (kv (ergoemacs-map-properties--keymap-value keymap)))
- (cond
- ((ergoemacs-map-properties--composed-p kv)
- (setq ret
- (catch 'found-full
- (dolist (map (ergoemacs keymap :composed-list))
- (when (ergoemacs-keymapp map)
- (unless (ergoemacs-map-properties--all-sparse-p map)
- (throw 'found-full nil)))) t)))
- (t
- (setq ret (not (ignore-errors (char-table-p (nth 1 kv)))))))
- (when ret
- (setq ret (ergoemacs-map-properties--all-sparse-p (keymap-parent
keymap))))
- ret)))
-
-(defun ergoemacs-map-properties--composed-list (keymap &optional melt label)
- "Return the list of maps in a composed KEYMAP.
-If there are no maps, return nil.
-
-When MELT is true, combine all the keymaps (with the exception of
-the parent-map).
-
-When LABEL is non-nil, label the keymap."
- (if (not (ergoemacs-map-properties--composed-p keymap)) nil
- (let ((parent (keymap-parent keymap))
- ret)
- (unwind-protect
- (progn
- (when parent
- (set-keymap-parent keymap nil))
- (dolist (map (reverse (cdr keymap)))
- (when label
- (ergoemacs :label map))
- (if (consp map)
- (if melt
- (setq ret (append (cdr map) ret))
- (push (cons (car map) (cdr map)) ret))
- (push map ret))))
- (when parent
- (set-keymap-parent keymap parent))
- (when melt
- (setq ret (append '(keymap) ret))))
- ret)))
-
-(defun ergoemacs-map-properties--composed (keymap &optional force)
- "Return a list of `ergoemacs-mode' map-keys for the composed KEYMAP list.
-
-When FORCE is non-nil, force the abiity to get map-keys by assigning them."
- (let ((composed-list (ergoemacs-map-properties--composed-list keymap nil
force)))
- (and composed-list
- (catch 'not-bound
- (mapcar
- (lambda(comp)
- (when (ergoemacs-keymapp comp)
- (let ((ret (ergoemacs-map-properties--key-struct comp)))
- (when (and (not force) (not ret))
- (throw 'not-bound nil))
- ret))) composed-list)))))
-
-
-(defun ergoemacs-map-properties--key-struct (keymap &optional force)
- "Return the maps linked to the current KEYMAP.
-
-This only works if the KEYMAP is an `ergoemacs-mode' map.
-
-:map-key is the key of the current map.
-
-:composed is a list of the `ergoemacs-map-properties--key-struct'
- of each of the composed maps.
-
-:parent is the `ergoemacs-map-properties--key-struct' of the
- current map.
-
-This will return the keymap structure prior to `ergoemacs-mode' modifications.
-
-When FORCE is non-nil, make sure the keymaps have `ergoemacs-mode' labels."
- ;;|-----------+------------+--------------+--------------|
- ;;| Condition | Call Count | Elapsed Time | Average Time |
- ;;|-----------+------------+--------------+--------------|
- ;;| Pre Hash | 237982 | 100.52800000 | 0.0004224185 |
- ;;| Post Hash | 150045 | 40.600999999 | 0.0002705921 |
- ;;|-----------+------------+--------------+--------------|
- (let* ((keymap (ergoemacs-map-properties--keymap-value keymap))
- (map-key (ergoemacs keymap :map-key))
- (composed (ergoemacs-map-properties--composed keymap force))
- parent
- (hash-key (or (and (not composed) (integerp map-key) map-key)
- (and composed (not (consp map-key)) (cdr keymap))))
- (ret (or (and (consp map-key) (car map-key))
- (and hash-key (ergoemacs-gethash hash-key
ergoemacs-map-properties--key-struct)))))
- (unless ret
- (when (and force (not (or map-key composed)))
- (ergoemacs :label keymap)
- (setq map-key (ergoemacs keymap :map-key)
- composed (ergoemacs-map-properties--composed keymap)
- parent (ergoemacs-map-properties--parent keymap)))
- (when map-key
- (setq ret (plist-put ret :map-key map-key)))
- (when composed
- (setq ret (plist-put ret :composed composed)))
- (when (or map-key composed)
- (setq parent (ergoemacs-map-properties--parent keymap t))
- (when parent
- (setq ret (plist-put ret :parent parent))))
- (puthash hash-key ret ergoemacs-map-properties--key-struct))
- ret))
-
-
-(defun ergoemacs-map-properties--key-hash (keymap &optional force)
- "Return the maps linked to the current KEYMAP.
-
-This only works if the KEYMAP is an `ergoemacs-mode' map.
-
-When FORCE is non-nil, make sure every map has an
-`ergoemacs-mode' keymap identifier installed in it.
-
-:map-key is the key of the current map.
-
-:composed is a list of the `ergoemacs-map-properties--key-struct'
- of each of the composed maps.
-
-:parent is the `ergoemacs-map-properties--key-struct' of the current map.
-
-This will return the keymap structure prior to `ergoemacs-mode' modifications."
- ;;|-----------+------------+--------------+--------------|
- ;;| Condition | Call Count | Elapsed Time | Average Time |
- ;;|-----------+------------+--------------+--------------|
- ;;| Pre Hash | 237982 | 100.52800000 | 0.0004224185 |
- ;;| Post Hash | 150045 | 40.600999999 | 0.0002705921 |
- ;;| Hash Key | 76379 | 15.183000000 | 0.0001987850 |
- ;;|-----------+------------+--------------+--------------|
- (cond
- ((integerp keymap) (list keymap))
- ((ergoemacs-keymapp keymap)
- (let* ((keymap (ergoemacs-map-properties--keymap-value keymap))
- (map-key (ergoemacs keymap :map-key))
- (composed (ergoemacs-map-properties--composed-list keymap force))
- (parent (and composed (keymap-parent keymap)))
- (ret (or (and (consp map-key) (car map-key))
- (and composed
- (append
- (mapcar
- (lambda(map)
- (ergoemacs map :map-key))
- composed)
- (list (and parent (ergoemacs parent :map-key)))))
- (and (integerp map-key) (list map-key)))))
- ret))))
-
-(defun ergoemacs-map-properties--default-global-file (&optional other)
- "What is the global key hash file.
-
-When OTHER is non-nil, get the OTHER file instead of the global
-file."
- (let* ((file (expand-file-name (format "ergoemacs-%s-%s.el%s" (or other
"global") ergoemacs--system (or (and ergoemacs--gzip ".gz") ""))
- ergoemacs-dir))
- (extras (expand-file-name "ergoemacs-extras" user-emacs-directory))
- (file2 (expand-file-name (format "ergoemacs-%s-%s.el%s" (or other
"global") ergoemacs--system (or (and ergoemacs--gzip ".gz") ""))
- extras)))
- (if (not (file-exists-p extras))
- (make-directory extras t))
- (or
- (and (file-readable-p file2) file2)
- (and (file-readable-p file) file)
- (and (file-writable-p file) file)
- file2)))
-
-(defvar ergoemacs-map-properties--const-keymaps nil
- "Variable listing constant keymaps.")
-
-(defun ergoemacs-map-properties--map-regexp (&optional at-end)
- "Generate a regular expression of all known maps.
-When AT-END is non-nil, replace the end of the regular expression
-with this string. Otherwise, it is assumed to be \"$\".r"
- (concat (regexp-opt (mapcar (lambda(x) (symbol-name x))
ergoemacs-map-properties--label-atoms-maps) 'symbols) (or (and at-end "$") "")))
-
-
-(defun ergoemacs-map-properties--label-echo (keymap-symbol map id)
- "When KEYMAP-SYMBOL is bound, label MAP to ID.
-
-Also let the user know that the labeling was performed."
- (when (boundp keymap-symbol)
- (ergoemacs :spinner '("🎫→%s" "Label→%s" "Label->%s") keymap-symbol)
- (if (ergoemacs map :installed-p)
- (ergoemacs :label (ergoemacs map :original) id)
- (if (ergoemacs map :composed-p)
- (ergoemacs-warn "%s was not labeled to %s since it was a composed
keymap.")
- (ergoemacs :label (ergoemacs map :original) id)))))
-
-(defun ergoemacs-map-properties--global-submap-p (key)
- "Determine if KEY is defining a global submap.
-If so, return the a vector with the key relative to the submap.
-The submap value is stored in the variable
`ergoemacs-map-properties--global-submap-p'."
- (let* ((key (or (ergoemacs-translate--escape-to-meta key) key))
- (len (length key))
- cur-map
- (i 1))
- (catch 'found-submap
- (while (<= i len)
- (setq cur-map (lookup-key (ergoemacs :global-map) (substring key 0 i))
- cur-map (or (and (symbolp cur-map) (boundp cur-map) (symbol-value
cur-map))
- (and (symbolp cur-map) (fboundp cur-map)
(symbol-function cur-map))
- cur-map))
- (when (and (ergoemacs-keymapp cur-map)
- (integerp (ergoemacs cur-map :map-key)))
- (setq ergoemacs-map-properties--global-submap-p cur-map)
- (throw 'found-submap (substring key i)))
- (setq i (1+ i))) nil)))
-
-(defun ergoemacs-map-properties--before-ergoemacs (&optional after)
- "Get a keymap of keys that changed before or after loading ergoemacs.
-
-By default this gives a keymap of keys changed before
-ergoemacs-mode loaded.
-
-When AFTER is non-nil, this is a list of keys that changed after
-`ergoemacs-mode' loaded."
- (or (and (not after) ergoemacs-map-properties--before-ergoemacs)
- (and after ergoemacs-map-properties--after-ergoemacs)
- (let ((hash-table (ergoemacs-gethash :extract-lookup (ergoemacs-gethash
(list :map-key most-negative-fixnum) ergoemacs-map-properties--plist-hash)))
- (original-global-map (ergoemacs :global-map))
- (before-map (make-sparse-keymap))
- tmp)
- (unwind-protect
- (progn
- (setq ergoemacs-map-keymap--load-autoloads-p nil)
- (ergoemacs-map-keymap
- (lambda (cur-key item)
- (unless (or (consp cur-key) (eq item 'ergoemacs-prefix))
- (setq tmp (ergoemacs-gethash cur-key hash-table cur-key))
- (cond
- ;; bach mode doesn't save menu-bar or tool-bar
information
- ((memq (elt cur-key 0) '(menu-bar tool-bar iconify-frame
make-frame-visible)))
- ;; batch mode also doesn't save mouse-events
- ((memq (event-basic-type (elt cur-key 0)) '(mouse-1
mouse-2 mouse-3 mouse-4 mouse-4)))
- ;; M-O is bound to facemenu keymap by default, except in
- ;; terminal/batch mode
- ((and (>= (length cur-key) 2)
- (eq (elt cur-key 0) 27)
- (eq (elt cur-key 1) 111)
- (eq (lookup-key original-global-map [27 111])
'facemenu-keymap)))
- ((eq 'ergoemacs-labeled (elt cur-key (- (length cur-key)
1))))
- ((and (symbolp item) (string-match-p "clipboard"
(symbol-name item))))
- ((and (equal [27 115 104 102] cur-key) (eq item
'hi-lock-find-patterns)))
- ;; If this is bound to another keymap, assume it doesn't
affect user maps.
- ;; For example the M-s keymap, or M-g keymaps.
- ((ergoemacs-map-properties--global-submap-p cur-key))
- ((and tmp (not (equal tmp item))
- (or (not after)
- (not (and
ergoemacs-map-properties--before-ergoemacs
- (eq item (lookup-key
ergoemacs-map-properties--before-ergoemacs cur-key))))))
- (ergoemacs :define-key before-map cur-key item))
- ((and (not tmp)
- (or (not after)
- (not (and
ergoemacs-map-properties--before-ergoemacs
- (lookup-key
ergoemacs-map-properties--before-ergoemacs cur-key)))))
- (ergoemacs :define-key before-map cur-key tmp)))))
- original-global-map t))
- (setq ergoemacs-map-keymap--load-autoloads-p t))
- (if after
- (progn
- (setq ergoemacs-map-properties--after-ergoemacs before-map)
- (ergoemacs before-map :label)
- (ergoemacs :map-list before-map
'ergoemacs-map-properties--after-ergoemacs))
- (setq ergoemacs-map-properties--before-ergoemacs before-map)
- (ergoemacs before-map :label)
- (ergoemacs :map-list before-map
'ergoemacs-map-properties--before-ergoemacs))
- before-map)))
-
-(defvar ergoemacs-map-properties--protect-local nil)
-(defun ergoemacs-map-properties--protect-local (hook fn)
- "Protect a local map's modification.
-
-Save information about what HOOK is running function FN."
- (let ((fn (or (and (symbolp fn) fn) 'lambda)))
- (if (not hook)
- (setq ergoemacs-map-properties--protect-local nil)
- (setq ergoemacs-map-properties--protect-local (list hook fn)))))
-
-
-(defvar ergoemacs-map-properties--modify-run-mode-hooks-excluded
- '(font-lock-mode-hook emojify-emojify-mode-line mu4e-update-mail-and-index
- change-major-mode-hook after-change-major-mode-hook)
- "List of hooks where keymaps should not be modified.")
-
-(defun ergoemacs-map-properties--modify-run-mode-hooks-p (hook)
- "Should the HOOK be modified?
-This tests if HOOK is:
-- bound with `boundp'
-- matches mode-hook
-- Is not in `ergoemacs-map-properties--modify-run-mode-hooks-excluded'"
- (and (boundp hook)
- (string-match-p "mode-hook\\'" (symbol-name hook))
- (not (memq hook
ergoemacs-map-properties--modify-run-mode-hooks-excluded))))
-
-(defun ergoemacs-map-properties--modify-run-mode-hooks (&rest hooks)
- "Modify HOOKS to run `ergoemacs-map-properties--protect-local' before hook."
- (let (tmp hook-value)
- (dolist (hook (or (and (consp hooks) hooks) (list hooks)))
- (if (consp hook)
- (dolist (lhook hook)
- (ergoemacs-map-properties--modify-run-mode-hooks lhook))
- (when (and hook (ergoemacs-map-properties--modify-run-mode-hooks-p
hook))
- (set hook
- (cond
- ((and (setq hook-value (symbol-value hook))
- (consp hook-value))
- (mapcar
- (lambda(fn)
- (if (or (eq fn t) (and (setq tmp (documentation fn))
- (stringp tmp)
- (string-match-p "^Ergoemacs
protect local" tmp)))
- fn
- `(lambda() "Ergoemacs protect local"
- (ergoemacs-map-properties--protect-local ',hook ',fn)
- (funcall ',fn))))
- hook-value))
- (t ;; For now do nothing
- hook-value))))))))
-
-
-(defun ergoemacs-map-properties--reset-run-mode-hooks (&rest hooks)
- "Reset HOOKS as if `ergoemacs-map-properties--modify-run-mode-hooks' wasn't
run."
- (let (tmp hook-value)
- (dolist (hook (or (and (consp hooks) hooks) (list hooks)))
- (if (consp hook)
- (dolist (lhook hook)
- (ergoemacs-map-properties--reset-run-mode-hooks lhook))
- (when (and hook
- (boundp hook)
- (string-match-p "mode-hook" (symbol-name hook))
- (ergoemacs-map-properties--modify-run-mode-hooks-p hook))
- (set hook
- (cond
- ((and (setq hook-value (symbol-value hook))
- (consp hook))
- (mapcar
- (lambda(fn)
- (if (or (eq fn t) (and (setq tmp (documentation fn))
- (stringp tmp)
- (string-match-p "^Ergoemacs
protect local" tmp)
- (setq tmp (ignore-errors (car (cdr
(nth 1 (nth 4 fn))))))))
- tmp
- fn))
- hook-value))
- (t ;; For now don't touch these.
- hook-value))))))))
-
-
-(defvar ergoemacs-map-properties--hook-map-hash (make-hash-table :test 'equal)
- "Hash table of user hook maps that `ergoemacs-mode' saves.")
-
-(defun ergoemacs-map-properties--hook-define-key (keymap key def)
- "Save hook-defined keys on separate keymaps.
-
-The KEYMAP is the keymap where keys are going to be defined.
-
-The KEY is the key that is being defined.
-
-The DEF is the key definition.
-
-These keymaps are saved in `ergoemacs-map-properties--hook-map-hash'."
- (ergoemacs keymap :label)
- (let* ((kbd key)
- (key (ergoemacs keymap :map-key))
- key2 tmp map)
- (when (integerp key)
- (setq key2 key
- tmp (ergoemacs-gethash key2
ergoemacs-map-properties--hook-map-hash)
- map (ergoemacs-gethash
- (setq key `(,(ergoemacs keymap :key-hash)
,@ergoemacs-map-properties--protect-local))
- ergoemacs-map-properties--hook-map-hash))
- (push key tmp)
- (puthash key2 tmp ergoemacs-map-properties--hook-map-hash)
- (unless map
- (puthash key (make-sparse-keymap)
ergoemacs-map-properties--hook-map-hash)
- (setq map (ergoemacs-gethash key
ergoemacs-map-properties--hook-map-hash))
- (ergoemacs map :label `(hook-map
,@ergoemacs-map-properties--protect-local)))
- (unwind-protect
- (progn
- (setq tmp ergoemacs-map-properties--protect-local
- ergoemacs-map-properties--protect-local nil)
- (ergoemacs :define-key map kbd def))
- (setq ergoemacs-map-properties--protect-local nil)))))
-
-(defun ergoemacs-map-properties--override-maps (keymap)
- "Return a list of overriding maps based on hooks run for KEYMAP."
- (ergoemacs keymap :label)
- (let* ((key (ergoemacs keymap :map-key))
- lst
- new-map
- standard
- ret command condition)
- (when (integerp key)
- (setq lst (ergoemacs-gethash key
ergoemacs-map-properties--hook-map-hash))
- (dolist (map-key lst)
- (when (ergoemacs map-key :override-map-p)
- (push (ergoemacs-gethash map-key
ergoemacs-map-properties--hook-map-hash) ret)))
- (when (and (boundp 'icicle-mode-map)
- (eq icicle-mode-map keymap))
- (setq new-map (make-sparse-keymap))
- (unless (equal icicle-search-key-prefix "\M-s\M-s")
- (ergoemacs :define-key new-map icicle-search-key-prefix
icicle-search-map))
- (when (and (boundp 'icicle-top-level-key-bindings) (custom-variable-p
'icicle-top-level-key-bindings))
- (setq standard (eval (car (get 'icicle-top-level-key-bindings
'standard-value))))
- ;; After determine if anything has changed...
- ;; Lifted partially from icicles
- (dolist (key-def icicle-top-level-key-bindings)
- (unless (member key-def standard)
- (setq key (car key-def)
- command (cadr key-def)
- condition (car (cddr key-def)))
- (when (eval condition)
- (if (symbolp key)
- (icicle-remap key command new-map (current-global-map))
- (ergoemacs :define-key new-map key command))))))
- (unless (ergoemacs new-map :empty-p)
- (push new-map ret))))
- ret))
-
-(defun ergoemacs-map-properties--deferred-maps (keymap)
- "Return a list of overriding maps based on hooks run based on KEYMAP."
- (let* ((key (ergoemacs keymap :map-key))
- lst
- ret)
- (when (integerp key)
- (setq lst (ergoemacs-gethash key
ergoemacs-map-properties--hook-map-hash))
- (dolist (map-key lst)
- (when (not (ergoemacs map-key :override-map-p))
- (push (ergoemacs-gethash map-key
ergoemacs-map-properties--hook-map-hash) ret))))
- ret))
-
-
-(defvar ergoemacs-map-properties--override-map-hash (make-hash-table)
- "Hash Table of defined/undefined keys.")
-
-(defvar ergoemacs-map-properties--deferred-hooks-directory-regexp
- (concat "\\`" (regexp-opt (append (list (file-name-directory (locate-library
"abbrev")))
-
ergoemacs-directories-where-keys-from-hook-are-deferred) t))
- "Regular experssion of libraries where maps are deferred.")
-
-(defun ergoemacs-map-properties--override-map-p (keymap)
- "Determine if KEYMAP should override `ergoemacs-mode' keys."
- (let ((key (or (and (ergoemacs-keymapp keymap) (ergoemacs keymap :map-key))
keymap))
- tmp)
- (and (consp key)
- (or (eq (car key) 'hook-map)
- (and (consp (car key)) (integerp (car (car key)))))
- (or (memq (nth 1 key)
ergoemacs-hooks-that-always-override-ergoemacs-mode)
- (memq (nth 2 key)
ergoemacs-functions-that-always-override-ergoemacs-mode)
- (progn
- (setq tmp (ergoemacs-gethash (nth 2 key)
ergoemacs-map-properties--override-map-hash))
- (if tmp
- (if (eq tmp :override-p) t nil)
- (if (not (functionp (nth 2 key))) nil
- (if (and (setq tmp (find-lisp-object-file-name (nth 2 key)
(symbol-function (nth 2 key))))
- (stringp tmp)
- (string-match-p
ergoemacs-map-properties--deferred-hooks-directory-regexp tmp))
- (progn
- (puthash (nth 2 key) :deferred-p
ergoemacs-map-properties--override-map-hash)
- nil)
- (puthash (nth 2 key) :override-p
ergoemacs-map-properties--override-map-hash)
- t))))))))
-(defun ergoemacs-map-properties--protect-global-map ()
- "Protect global map by adding a user-key layer to it."
- (when (and (or (not noninteractive) (file-readable-p
(ergoemacs-map-properties--default-global-file)))
- (integerp (ergoemacs global-map :map-key)))
- (let ((user-map (ergoemacs global-map :user)))
- (ergoemacs :user-before)
- (setq global-map (make-composed-keymap user-map global-map)))))
-
-(defvar ergoemacs-map-properties--known-maps nil
- "A list of known, but unlabeled maps.")
-
-(defun ergoemacs-map-properties--map-fixed-plist (keymap)
- "Determines if this is an `ergoemacs-mode' KEYMAP.
-Returns a plist of fixed keymap properties (not changed by
-composing or parent/child relationships)"
- (if (not (ergoemacs-keymapp keymap) ) nil
- (if (ignore-errors (symbol-function keymap))
- (progn (ergoemacs-gethash keymap
ergoemacs-map-properties--indirect-keymaps))
- (let ((ret (or
- (ignore-errors ;; (keymap #char-table "Label"
(ergoemacs-map-marker) (ergoemacs-map-list))
- (and (char-table-p (car (cdr keymap)))
- (stringp (car (cdr (cdr keymap))))
- (eq (car (car (cdr (cdr (cdr keymap)))))
'ergoemacs-labeled)
- (funcall (cdr (car (cdr (cdr (cdr keymap))))))))
- (ignore-errors ;; (keymap #char-table (ergoemacs-map-marker)
(ergoemacs-map-list))
- (and (char-table-p (car (cdr keymap)))
- (eq (car (car (cdr (cdr keymap)))) 'ergoemacs-labeled)
- (funcall (cdr (car (cdr (cdr keymap)))))))
- (ignore-errors ;; (keymap "label" (ergoemacs-map-marker)
(ergoemacs-map-list))
- (and (stringp (car (cdr keymap)))
- (eq (car (car (cdr (cdr keymap)))) 'ergoemacs-labeled)
- (funcall (cdr (car (cdr (cdr keymap)))))))
- (ignore-errors ;;(keymap (ergoemacs-map-marker)
(ergoemacs-map-list))
- (and (eq (car (car (cdr keymap))) 'ergoemacs-labeled)
- (funcall (cdr (car (cdr keymap))))))))
- (map keymap) parent)
- (unless ret
- (unwind-protect
- (progn
- (when (char-table-p (car (cdr map)))
- ;; Drop any full keymap labels
- (setq map `(keymap ,@(cdr (cdr map)))))
- (setq parent (keymap-parent map))
- (ignore-errors (set-keymap-parent map nil))
- (setq ret (lookup-key map [ergoemacs-labeled]))
- (when ret
- (setq ret (ignore-errors (funcall ret)))))
- (ignore-errors (set-keymap-parent map parent))))
- (if ret ret
- ;; Now get properties for constant/indirect keymaps
- (catch 'found-map
- (dolist (map ergoemacs-map-properties--const-keymaps)
- (when (eq (cdr map) (cdr keymap))
- (setq ret (car map))
- (throw 'found-map t))))
- ret)))))
-
-(defun ergoemacs-map-properties--get (keymap property)
- "Get ergoemacs-mode KEYMAP PROPERTY."
- (let ((ret (ergoemacs-map-properties--map-fixed-plist keymap)) tmp)
- (unless (and ergoemacs-map-properties--plist-hash (hash-table-p
ergoemacs-map-properties--plist-hash))
- (setq ergoemacs-map-properties--plist-hash (make-hash-table :test
'equal)))
- (setq tmp (ergoemacs-gethash (ergoemacs-map-properties--key-struct keymap)
ergoemacs-map-properties--plist-hash))
- (if (not (and tmp (hash-table-p tmp)))
- (setq ret nil)
- (setq ret (ergoemacs-gethash property tmp)))
- ret))
-
-(defun ergoemacs-map-properties--put (keymap property value)
- "Set ergoemacs-mode KEYMAP PROPERTY to VALUE."
- (prog1 value
- (if (eq property :label)
- (ergoemacs :label keymap value)
- (let ((keymap (ergoemacs-map-properties--keymap-value keymap)))
- (cond
- ((not (ergoemacs-keymapp keymap))
- (error "Trying to put keymap property on non-keymap %s" keymap))
- ((eq property :full)
- (ergoemacs-warn "Cannot set the keymap property :full"))
- (t (let ((ret (ergoemacs-map-properties--map-fixed-plist keymap)) tmp)
- (if (and ret (eq property :map-key))
- (progn
- (setq ret (plist-put ret property value))
- (ergoemacs :label keymap value))
- (unless (and ergoemacs-map-properties--plist-hash
(hash-table-p ergoemacs-map-properties--plist-hash))
- (setq ergoemacs-map-properties--plist-hash (make-hash-table
:test 'equal)))
- (setq tmp (ergoemacs-gethash
(ergoemacs-map-properties--key-struct keymap)
ergoemacs-map-properties--plist-hash))
- (unless (and tmp (hash-table-p tmp))
- (setq tmp (make-hash-table)))
- (puthash property value tmp)
- (puthash (ergoemacs-map-properties--key-struct keymap) tmp
ergoemacs-map-properties--plist-hash)))))))))
-
-(defun ergoemacs-map-properties--parent (keymap &optional force)
- "Return a `ergoemacs-mode' map-key for the parent of KEYMAP.
-
-When FORCE is non-nil make sure it has a map key."
- (if (not (ergoemacs-keymapp keymap)) nil
- (let ((parent (keymap-parent keymap)))
- (and parent (ergoemacs-map-properties--key-struct parent force)))))
-
-(defun ergoemacs-map-properties--map-list (keymap &optional add-map)
- "Get the list of maps bound to KEYMAP.
-KEYMAP can be a keymap or integer indicating the keympap id.
-The optional ADD-MAP argument adds maps to the map-list. It can be a symbol
or list of symbols to add."
- (let (tmp)
- (cond
- ((ergoemacs-keymapp keymap)
- (ergoemacs-map-properties--map-list (ergoemacs (ergoemacs keymap
:original) :key) add-map))
- ((and (integerp keymap) (not add-map))
- ;; (message "Key%s->%s" keymap (ergoemacs-gethash keymap
ergoemacs-map-properties--plist-hash))
- (ergoemacs-gethash keymap ergoemacs-map-properties--plist-hash))
- ((and (integerp keymap) (symbolp add-map))
- (setq tmp (ergoemacs-gethash keymap
ergoemacs-map-properties--plist-hash))
- (cl-pushnew add-map tmp)
- (cl-pushnew add-map ergoemacs-map-properties--label-atoms-maps)
- (puthash add-map keymap ergoemacs-breadcrumb-hash)
- (puthash keymap add-map ergoemacs-breadcrumb-hash)
- (puthash keymap tmp ergoemacs-map-properties--plist-hash)
- (ergoemacs-map-properties--map-list keymap))
- ((and (integerp keymap) (consp add-map))
- (setq tmp (ergoemacs-gethash keymap
ergoemacs-map-properties--plist-hash))
- (dolist (map add-map)
- (when (symbolp map)
- (cl-pushnew map ergoemacs-map-properties--label-atoms-maps)
- (cl-pushnew map tmp)
- (puthash map keymap ergoemacs-breadcrumb-hash)
- (puthash keymap map ergoemacs-breadcrumb-hash)
- ))
- (puthash keymap tmp ergoemacs-map-properties--plist-hash)
- (ergoemacs-map-properties--map-list keymap))
- (t nil))))
-
-(defvar ergoemacs-map-properties--get-or-generate-map-name nil)
-
-(defun ergoemacs-map-properties--label-map (map &optional label-empty-p)
- "Label MAP.
-When LABEL-EMPTY-P is non-nil, also label empty maps."
- (let* (sv)
- (cond
- ((get map :ergoemacs-labeled)
- t) ;; Already labeled
- ((not (setq sv (ergoemacs-sv map t)))
- nil) ;; Nil
- ((not (ergoemacs-keymapp sv)) ;; Not a keymap
- (put map :ergoemacs-labeled t)
- t)
- ((eq sv global-map)
- (put map :ergoemacs-labeled t))
- ((and (not label-empty-p)
- (or (equal sv (make-sparse-keymap)) ;; Empty
- (equal sv (make-keymap))))
- nil)
- ((ergoemacs sv :installed-p) ;; Already modified.
- (put map :ergoemacs-labeled t)
- (ergoemacs :map-list sv map))
- ;; ((ergoemacs sv :composed-p) ;; Already modified.
- ;; (ergoemacs-warn "Composed map %s not labeled." map))
- (t ;;Label
- (setq ergoemacs-map-properties--get-or-generate-map-name map)
- (ergoemacs :label sv)
- (ergoemacs :map-list sv map)
- (put map :ergoemacs-labeled t)
- t))))
-
-(defun ergoemacs-map-properties--label-atoms ()
- "Label all the bound keymaps."
- (mapatoms #'ergoemacs-map-properties--label-map))
-
-;; Startup and load functions
-
-(defun ergoemacs-map-properties--label-known ()
- "Label known maps."
- (dolist (map (let (tmp) (dolist (map ergoemacs-map-properties--known-maps)
(push map tmp)) tmp))
- (when (and (boundp map) (ergoemacs-keymapp map))
- (setq ergoemacs-map-properties--get-or-generate-map-name map)
- (ergoemacs :label map))))
-
-(defun ergoemacs-map-properties--linked-map (keymap &optional drop)
- "For KEYMAP get linked maps.
-When DROP is non-nil, drop any found maps from
`ergoemacs-map-properties--known-maps'."
- (let (map-list known)
- (when (and (ergoemacs-keymapp keymap)
- (not (ergoemacs :empty-p keymap)))
- (dolist (map ergoemacs-map-properties--known-maps)
- (if (and (boundp map)
- (eq (ergoemacs-sv map) keymap))
- (push map map-list)
- (when drop
- (push map known))))
- (when drop
- (setq ergoemacs-map-properties--known-maps known)))
- map-list))
-
-(defvar ergoemacs-map-properties--breadcrumb nil)
-
-(defun ergoemacs-map-properties--get-or-generate-map-key (keymap)
- "Gets the key for the KEYMAP."
- (let ((ret (ergoemacs-map-properties--map-fixed-plist
(ergoemacs-map-properties--keymap-value keymap)))
- map-list last-map tmp)
- (cond
- ((and ret (setq ret (plist-get ret :map-key))) ret)
- ;; Special Keymaps
- ((eq keymap global-map) most-negative-fixnum)
- ((eq keymap ergoemacs-translate--parent-map) (- most-positive-fixnum 1))
- ((eq keymap ergoemacs-translate--modal-parent-map) (-
most-positive-fixnum 2))
- ;; Other keymaps
- (t
- (setq map-list (ergoemacs-map-properties--linked-map keymap t)
- last-map (or ergoemacs-map-properties--get-or-generate-map-name
(car map-list)))
- (when ergoemacs-map-properties--get-or-generate-map-name
- (dolist (map ergoemacs-map-properties--known-maps)
- (unless (eq map ergoemacs-map-properties--get-or-generate-map-name)
- (push map tmp)))
- (setq ergoemacs-map-properties--known-maps tmp
- ergoemacs-map-properties--get-or-generate-map-name nil))
- (when (and ergoemacs-map-properties--breadcrumb (not (string= ""
ergoemacs-map-properties--breadcrumb))
- (or (not ergoemacs-map--breadcrumb) (string= ""
ergoemacs-map--breadcrumb)))
- (setq ergoemacs-map--breadcrumb ergoemacs-map-properties--breadcrumb))
- (cond
- ((and last-map (setq ret (ergoemacs-gethash last-map
ergoemacs-breadcrumb-hash)))
- ;; Found id from bound map.
- (ergoemacs :spinner '("🎫→%s (Restore)" "Label→%s (Restore)" "Label->%s
(Restore)") last-map)
- ret)
- (last-map
- ;; Generate and save.
- (setq ergoemacs-map-properties--get-or-generate-map-key
- (+ 1 ergoemacs-map-properties--get-or-generate-map-key))
- (ergoemacs :spinner :new '("🎫→%s (Save)" "Label→%s (Save)" "Label->%s
(Save)") last-map)
- (dolist (map map-list)
- (ergoemacs :map-list
ergoemacs-map-properties--get-or-generate-map-key map))
- ergoemacs-map-properties--get-or-generate-map-key)
- ((and ergoemacs-map--breadcrumb
- (not (string= "" ergoemacs-map--breadcrumb))
- (not (setq ret (ergoemacs-gethash (intern
ergoemacs-map--breadcrumb) ergoemacs-breadcrumb-hash))))
- ;; Not found in breadcrumb hash, but breadcrumb is specified.
- ;; Generate and save.
- (setq ergoemacs-map-properties--get-or-generate-map-key
- (+ 1 ergoemacs-map-properties--get-or-generate-map-key))
- (puthash (intern ergoemacs-map--breadcrumb)
ergoemacs-map-properties--get-or-generate-map-key ergoemacs-breadcrumb-hash)
- (puthash ergoemacs-map-properties--get-or-generate-map-key (intern
ergoemacs-map--breadcrumb) ergoemacs-breadcrumb-hash)
- (ergoemacs :spinner :new '("🎫→%s (Save)" "Label→%s (Save)" "Label->%s
(Save)") ergoemacs-map--breadcrumb)
- (setq ergoemacs-map--breadcrumb "")
- ergoemacs-map-properties--get-or-generate-map-key)
- (ret
- ;; Found in breadcrumb hash.
- (ergoemacs :spinner '("🎫→%s (Restore)" "Label→%s (Restore)" "Label->%s
(Restore)") ergoemacs-map--breadcrumb)
- (setq ergoemacs-map--breadcrumb "")
- ret)
- (t
- ;; (ergoemacs-warn "Labeling untraceable map...%s" keymap)
- (setq ergoemacs-map-properties--get-or-generate-map-key
- (+ 1 ergoemacs-map-properties--get-or-generate-map-key))
- ;; (setq map-list (format "New Map %s->%s"
ergoemacs-map-properties--get-or-generate-map-key keymap)
- ;; map-list (substring map-list 0 (min (length map-list) 80)))
- ;; (message "%s" map-list)
- ergoemacs-map-properties--get-or-generate-map-key))))))
-
-(defun ergoemacs-map-properties--label (keymap &optional map-key struct)
- "Label an `ergoemacs-mode' touched KEYMAP.
-MAP-KEY is the identifier of the map name.
-STRUCT is the keymap structure for the current map."
- (unless (not (ergoemacs-keymapp keymap))
- (cond
- ((ergoemacs-map-properties--composed-p keymap)
- (cond
- (map-key
- (error "Will not label a composed map's members to %s" map-key))
- (t
- (let ((breadcrumb-base ergoemacs-map--breadcrumb)
- (comp (plist-get struct :composed))
- (comp-list (ergoemacs-map-properties--composed-list keymap))
- from-prop-p
- (i 0))
- (unless (= (length comp) (length comp-list))
- (setq comp nil))
- (when (and ergoemacs-map-properties--breadcrumb
- (not (string= ergoemacs-map-properties--breadcrumb ""))
- (or (not breadcrumb-base) (string= "" breadcrumb-base)))
- (setq breadcrumb-base ergoemacs-map-properties--breadcrumb
- from-prop-p t
- ergoemacs-map-properties--breadcrumb nil))
- (dolist (map comp-list)
- (when (and breadcrumb-base (not (string= breadcrumb-base "")))
- (setq ergoemacs-map--breadcrumb (concat breadcrumb-base "-"
(number-to-string i))
- i (+ 1 i)))
- (if comp
- (ergoemacs :label map nil (pop comp))
- (ergoemacs :label map)))
- (if from-prop-p
- (setq ergoemacs-map-properties--breadcrumb breadcrumb-base)
- (setq ergoemacs-map--breadcrumb breadcrumb-base))))))
- (t
- (let* ((map keymap)
- (map-key (or map-key
- (plist-get struct :map-key)
- (ergoemacs-map-properties--get-or-generate-map-key
map)))
- char-table
- indirect-p
- old-plist
- (breadcrumb-base ergoemacs-map--breadcrumb)
- (parent (keymap-parent map))
- label tmp1 tmp2)
- (unwind-protect
- (progn
- (ignore-errors (set-keymap-parent map nil))
- (if (ergoemacs-keymapp (symbol-function keymap))
- (setq indirect-p t ; Indirect keymap
- old-plist (ergoemacs-gethash keymap
ergoemacs-map-properties--indirect-keymaps))
- (setq old-plist (lookup-key map [ergoemacs-labeled]))
- (if (eq (car map) 'keymap)
- (setq map (cdr map))
- (setq map (list map)))
- (when (ignore-errors (char-table-p (car map)))
- (setq char-table (pop map)))
- (when (stringp (car map))
- (setq label (pop map)))
- ;; Drop prior `ergoemacs-mode' labels
- (setq tmp1 '()
- tmp2 nil)
- (when old-plist
- (setq old-plist (ignore-errors (funcall old-plist)))
- (while (not (and (consp tmp2)
- (eq (car tmp2) 'ergoemacs-labeled)))
- (setq tmp2 (pop map))
- (unless (and (consp tmp2) (equal 'ergoemacs-labeled (car
tmp2)))
- (push tmp2 tmp1)))
- (while tmp1
- (push (pop tmp1) map))))
- (setq old-plist (list :map-key map-key))
- (unless indirect-p
- (push (cons 'ergoemacs-labeled
- `(lambda() (interactive) ',old-plist)) map))
- (unless indirect-p
- (when label
- (push label map))
- (when char-table
- (push char-table map))
- (push 'keymap map)))
- (when parent
- (set-keymap-parent map parent)
- (setq ergoemacs-map--breadcrumb breadcrumb-base)))
- (if indirect-p
- (puthash keymap old-plist
ergoemacs-map-properties--indirect-keymaps)
- (unless (ignore-errors (ergoemacs-setcdr keymap (cdr map)))
- (cl-pushnew (cons old-plist (cdr keymap))
ergoemacs-map-properties--const-keymaps)))
- map)))))
-
-(defun ergoemacs-map-properties--empty-p (keymap &optional labeled-is-keymap-p)
- "Determines if a KEYMAP is empty.
-
-When LABELED-IS-KEYMAP-P is non-nil, ergoemacs-mode labeled
-keymaps without any additional keys are not considered empty.
-Otherwise, erogemacs-mode labeled keymaps without any additional
-keys are considered empty."
- (catch 'found-key
- (ergoemacs-map-keymap
- (lambda (cur-key item)
- (unless (and (not labeled-is-keymap-p) (equal cur-key
[ergoemacs-labeled]))
- (if (consp cur-key)
- (throw 'found-key nil)
- (unless (eq item 'ergoemacs-prefix)
- (when item
- (throw 'found-key nil))))))
- keymap)
- t))
-
-;;ergoemacs-map-properties--label
-
-
-(defvar ergoemacs-map-properties--user-map-hash (make-hash-table :test 'equal)
- "Hash table of the user maps that `ergoemacs-mode' saves.")
-
-(defun ergoemacs-map-properties--user (keymap)
- "Gets the user KEYMAP with `ergoemacs-mode' identifiers installed.
-KEYMAP can be an `ergoemacs-map-properties--key-struct' of the keymap as well."
- (let ((key (ergoemacs keymap :map-key))
- original map)
- (cond
- ((not key)
- (ergoemacs :label keymap)
- (setq key (ergoemacs keymap :map-key))
- (puthash key (make-sparse-keymap)
ergoemacs-map-properties--user-map-hash)
- (setq map (ergoemacs-gethash key
ergoemacs-map-properties--user-map-hash))
- (ergoemacs map :label (list (ergoemacs keymap :key-hash) 'user)))
- ((not (integerp key))
- (setq original (ergoemacs keymap :original)
- key (ergoemacs original :map-key))
- (if (integerp key)
- (setq map (ergoemacs original :user))
- (setq map (ergoemacs-gethash key
ergoemacs-map-properties--user-map-hash))
- (unless map
- (puthash key (make-sparse-keymap)
ergoemacs-map-properties--user-map-hash)
- (setq map (ergoemacs-gethash key
ergoemacs-map-properties--user-map-hash))
- (ergoemacs map :label (list key 'user)))))
- (t
- (setq map (ergoemacs-gethash (setq key (ergoemacs keymap :key-hash))
ergoemacs-map-properties--user-map-hash))
- (unless map
- (puthash key (make-sparse-keymap)
ergoemacs-map-properties--user-map-hash)
- (setq map (ergoemacs-gethash key
ergoemacs-map-properties--user-map-hash))
- (ergoemacs map :label (list (ergoemacs keymap :key-hash) 'user)))))
- map))
-
-(defun ergoemacs-map-properties--calculate-keys-and-where-is-hash (keymap)
- "Calculates :where-is and :keys properties for KEYMAP."
- (let ((where-is-hash (make-hash-table))
- (lookup-hash (make-hash-table :test 'equal))
- keys tmp)
- (ergoemacs-map-keymap
- (lambda (key item)
- (unless (and (vectorp key) (eq (elt key (- (length key) 1))
'ergoemacs-labeled))
- (cond
- ((and (vectorp key)
- (commandp item t))
- (push key keys)
- (if (setq tmp (ergoemacs-gethash item where-is-hash))
- (push key tmp)
- (puthash item (list key) where-is-hash))
- (puthash key item lookup-hash)))))
- keymap)
- (ergoemacs keymap :extract-keys keys)
- (ergoemacs keymap :extract-where-is where-is-hash)
- (ergoemacs keymap :extract-lookup lookup-hash)))
-
-(defun ergoemacs-map-properties--keys (keymap)
- "Extract :keys property for KEYMAP."
- (let ((ret (ergoemacs keymap :extract-keys)))
- (unless ret
- (ergoemacs-map-properties--calculate-keys-and-where-is-hash keymap)
- (setq ret (ergoemacs keymap :extract-keys)))
- ret))
-
-(defun ergoemacs-map-properties--where-is (keymap)
- "Extract :where-is property for KEYMAP."
- (let ((ret (ergoemacs keymap :extract-where-is)))
- (unless ret
- (ergoemacs-map-properties--calculate-keys-and-where-is-hash keymap)
- (setq ret (ergoemacs keymap :extract-where-is)))
- ret))
-
-(defun ergoemacs-map-properties--lookup (keymap)
- "Extract :lookup property for KEYMAP."
- (let ((ret (ergoemacs keymap :extract-lookup)))
- (unless ret
- (ergoemacs-map-properties--calculate-keys-and-where-is-hash keymap)
- (setq ret (ergoemacs keymap :extract-lookup)))
- ret))
-
-(defun ergoemacs-map-properties--revert-original (keymap &rest type)
- "Revert KEYMAP.
-
-This is the same as calling `ergoemacs-map-properties--original'
-with the TYPE set to :setcdr.
-
-You may specify TYPE to be :flatten to return a flattend copy of
-the original instead."
- (ergoemacs-map-properties--original keymap (or type :setcdr)))
-(defun ergoemacs-map-properties--original (keymap &optional type)
- "Get original KEYMAP.
-
-When TYPE is :flatten, the return keymap is not composed and has
-no parents.
-
-When TYPE is :setcdr, the function modifies any submaps so they
-are original keymaps as well as modifying KEYMAP to be the
-original keymap.
-
-When TYPE is nil, return the original keymap, but any sub keymaps
-are not original, and the keymap may be composed or have a parent
-keymap."
- (if (not (ergoemacs-keymapp keymap)) nil
- (let ((ret keymap))
- (while (and (or (and (not (ergoemacs ret :map-key))
- ;; Apply label if needed.
- (ergoemacs ret :label)) t)
- (not (integerp (ergoemacs ret :map-key)))
- (setq ret (keymap-parent ret)))
- t)
- (cond
- ((eq type :flatten)
- (ergoemacs-map-keymap nil ret t))
- ((eq type :submaps)
- (ergoemacs-setcdr (cdr ret)
- (cdr (ergoemacs-map-keymap nil ret :setcdr)))
- ret)
- (t ret)))))
-
-(defun ergoemacs-map-properties--original-user (keymap)
- "Gets the original KEYMAP with the user protecting layer."
- (make-composed-keymap (ergoemacs keymap :user) (ergoemacs keymap :original)))
-
-(defun ergoemacs-map-properties--installed-p (keymap)
- "Is `ergoemacs-mode' installed in KEYMAP?
-Values returned are:
- :protected-p -- An ergoemacs user keymap is installed on top
- :cond-p -- This is a conditional map (usually found in
`minor-mode-map-alist')
- t -- `ergoemacs-mode' has been installed.
- nil -- `ergoemacs-mode' has not modified this map."
- (when (and keymap (ergoemacs-keymapp keymap))
- (let* ((parent (keymap-parent keymap))
- (key (and parent (ergoemacs keymap :map-key)))
- (ret (and (consp key)
- (or (and (eq (nth 1 key) 'user) :protected-p)
- (and (eq (nth 1 key) 'cond-map) :cond-p)))))
- (cond
- ((eq ret :cond-p) ret)
- ((not ret) nil)
- ((and (setq key (ergoemacs parent :map-key)) (not (consp key))) ret)
- ((eq (nth 1 key) 'ergoemacs-unbound) t)
- ((and (ergoemacs parent :composed-p) (consp key)) t)
- (t ret)))))
-
-
-(defun ergoemacs-map-properties--sequence (key)
- "Return key sequence list from KEY.
-This sequence is compatible with `listify-key-sequence'."
- (let (input)
- (cond
- ((not key)) ;; Not specified.
- ((vectorp key) ;; Actual key sequence
- (setq input (listify-key-sequence key)))
- ((consp key) ;; Listified key sequence
- (setq input key))
- ((stringp key) ;; Kbd code
- (setq input (listify-key-sequence (read-kbd-macro key t)))))
- input))
-
(defun ergoemacs-map-properties--movement-p (command)
"Determines if COMMAND is a movement command.
This is done by checking if this is a command that supports shift
@@ -1099,7 +47,6 @@ selection or cua-mode's movement."
;; Put 'CUA movement command if it wasn't there.
(when (and tmp (symbolp command))
(put command 'CUA 'move)))))
-
(defun ergoemacs-map-properties--key-lessp (key1 key2)
"Compares KEY1 and KEY2, and determines if KEY1 is \"less than\" key2.
Used for sorting keys in displays."
@@ -1172,77 +119,6 @@ Used for sorting keys in displays."
(< e1 e2))
(t t))))))
-
-(defvar ergoemacs-map-properties--use-local-unbind-list '(isearch-mode-map)
- "List of maps that will unbind ergoemacs-mode keys instead of using them
directly.")
-
-(defun ergoemacs-map-properties--use-local-unbind-list-p (keymap)
- "Determine if ergoemacs-mode keys should be unbound in KEYMAP.
-Looks in `ergoemacs-use-local-unbind-list' to determine what maps
-will unbind ergoemacs keys.
-
- This is useful in supporting isearch in Emacs 24.4+."
- (when (ergoemacs-keymapp keymap)
-
- (let ((local-unbind-list-p (ergoemacs keymap :use-local-unbind-list-key)))
- (cond
- ((eq local-unbind-list-p 'no) nil)
- (local-unbind-list-p local-unbind-list-p)
- (ergoemacs-map-properties--use-local-unbind-list
- (let ((map-list (ergoemacs keymap :map-list)))
- (prog1 (catch 'found-use-local
- (dolist (map map-list)
- (when (memq map
ergoemacs-map-properties--use-local-unbind-list)
- (setq local-unbind-list-p t)
- (throw 'found-use-local t)))
- (setq local-unbind-list-p 'no)
- nil)
- (ergoemacs keymap :use-local-unbind-list-key
local-unbind-list-p))))
- (t nil)))))
-
-(defvar ergoemacs-map-properties--set-map-list '(isearch-mode-map)
- "`ergoemacs-mode' modified maps.
-
-This is a list of maps that `ergoemacs-mode' modifies directly.")
-
-(defun ergoemacs-map-properties--set-map-p (keymap)
- "Determines if `ergoemacs-mode' should assign the original KEYMAP.
-
-Tyically `ergoemacs-mode' dosen't modify maps, but if this
-function returns non-nil, `ergoemacs-mode' does modify the
-keymaps and sets them to the original symbol in the object array.
-
- This is useful in supporting isearch in Emacs 24.4+."
- (when (ergoemacs-keymapp keymap)
-
- (let ((set-map-p (ergoemacs keymap :use-set-map-key)))
- (cond
- ((eq set-map-p 'no) nil)
- (set-map-p set-map-p)
- (ergoemacs-map-properties--set-map-list
- (let ((map-list (ergoemacs keymap :map-list)))
- (prog1 (catch 'found-use-local
- (dolist (map map-list)
- (when (memq map ergoemacs-map-properties--set-map-list)
- (setq set-map-p t)
- (throw 'found-use-local t)))
- (setq set-map-p 'no)
- nil)
- (ergoemacs keymap :use-set-map-key set-map-p))))
- (t nil)))))
-
-(defvar ergoemacs-map-properties--major-modes-that-modify-global-keymap
- '(calc-mode calc-trail-mode calc-edit-mode)
- "List of major modes that modify the global map.")
-
-(defvar ergoemacs-map-properties--ignore-global-changes-p nil
- "When set, `ergoemacs-mode' may ignore changes in the `global-map'.")
-
-(defun ergoemacs-map-properties--ignore-global-changes-p ()
- "Determines if `ergoemacs-mode' can ignore any change in the `global-map'."
- (or ergoemacs-map-properties--ignore-global-changes-p
- (memq major-mode
ergoemacs-map-properties--major-modes-that-modify-global-keymap)))
-
(provide 'ergoemacs-map-properties)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; ergoemacs-map-properties.el ends here
diff --git a/ergoemacs-mode.el b/ergoemacs-mode.el
index e232577..1ca0c5b 100644
--- a/ergoemacs-mode.el
+++ b/ergoemacs-mode.el
@@ -184,7 +184,7 @@ The TEXT will be what the mode-line is set to be."
minor-mode-alist)))))
(defconst ergoemacs-font-lock-keywords
-
'(("(\\(ergoemacs\\(?:-theme-component\\|-theme\\|-component\\|-require\\|-remove\\|-advice\\|-translation\\|-cache\\|-timing\\|-package\\|-autoload\\)\\)\\_>[
\t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
+ '(("(\\(ergoemacs\\(?:-translation\\)\\)\\_>[
\t']*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
(1 font-lock-keyword-face)
(2 font-lock-constant-face nil t))))
diff --git a/ergoemacs-translate.el b/ergoemacs-translate.el
index 86ed830..eef41eb 100644
--- a/ergoemacs-translate.el
+++ b/ergoemacs-translate.el
@@ -97,13 +97,13 @@
"Gets the translation hash."
(let* ((to (ergoemacs :layout (or layout-to ergoemacs-keyboard-layout)))
(from (ergoemacs :layout (or layout-from "us")))
- (hash-f (ergoemacs-gethash from ergoemacs-translate--hash
(make-hash-table)))
- (hash-f-t (ergoemacs-gethash to hash-f))
+ (hash-f (gethash from ergoemacs-translate--hash (make-hash-table)))
+ (hash-f-t (gethash to hash-f))
(i 0)
hash-t hash-t-f lay-t lay-f r-t r-f)
(if hash-f-t hash-f-t
(setq hash-f-t (make-hash-table)
- hash-t (ergoemacs-gethash to ergoemacs-translate--hash
(make-hash-table))
+ hash-t (gethash to ergoemacs-translate--hash (make-hash-table))
hash-t-f (make-hash-table)
lay-t (symbol-value to)
lay-f (symbol-value from))
@@ -332,7 +332,7 @@ This uses `ergoemacs-translate--apply-key'"
(defun ergoemacs-translate--event-modifier-hash (&optional layout)
"Gets the event modifier hash for LAYOUT."
(let* ((layout-symbol (ergoemacs :layout layout))
- (hash (ergoemacs-gethash layout-symbol
ergoemacs-translate--event-hash)))
+ (hash (gethash layout-symbol ergoemacs-translate--event-hash)))
(if hash hash
;; Not present setup modifier hash
(setq hash (make-hash-table))
@@ -364,7 +364,7 @@ LAYOUT is the keyboard layout."
(unless (memq 'shift modifiers)
;; Add 'shift for # type events.
(setq basic (event-basic-type event))
- (when (ergoemacs-gethash basic (ergoemacs-translate--event-modifier-hash
layout))
+ (when (gethash basic (ergoemacs-translate--event-modifier-hash layout))
(push 'ergoemacs-shift modifiers)))
;; Add 'ergoemacs-gui to the modifiers
(when (and (symbolp event)
@@ -427,8 +427,8 @@ MODIFIERS is the precalculated modifiers from
(if (not (memq m '(shift ergoemacs-shift)))
(push m new-modifiers)
(setq new-event (ergoemacs-translate--event-convert-list (list
m basic) layout-from))
- (setq new-event (or (ergoemacs-gethash new-event
translation-hash) new-event))))
- (setq new-event (or (ergoemacs-gethash basic translation-hash) basic)
+ (setq new-event (or (gethash new-event translation-hash)
new-event))))
+ (setq new-event (or (gethash basic translation-hash) basic)
new-modifiers modifiers)))
(ergoemacs-translate--event-convert-list (append new-modifiers (list
new-event)) layout-to))))
@@ -440,7 +440,7 @@ This is different than `event-basic-type' because ?# would
return
This also translates <C-i> to ?i, <C-m> to ?m <C-[> to ?[
"
(let* ((basic (event-basic-type event))
- (new-basic (and basic (ergoemacs-gethash basic
(ergoemacs-translate--event-modifier-hash layout)))))
+ (new-basic (and basic (gethash basic
(ergoemacs-translate--event-modifier-hash layout)))))
(or new-basic basic
(and (symbolp event)
(setq basic (symbol-name event))
@@ -481,7 +481,7 @@ This is different than `event-convert-list' because:
((and cur-list (memq elt '(shift ergoemacs-shift))))
((and (not cur-list)
- (setq tmp (ergoemacs-gethash (intern (format "s%s" elt))
+ (setq tmp (gethash (intern (format "s%s" elt))
(ergoemacs-translate--event-modifier-hash
layout))))
;; Special case.
(setq new-list (append new-list (list tmp))))
@@ -755,8 +755,6 @@ When NAME is a symbol, setup the translation function for
the symbol."
',(intern (concat "ergoemacs-translate--" name-str "-map"))
"Ergoemacs-v5.16")))
t)
- (ergoemacs-map-properties--label-map (intern (concat
"ergoemacs-translate--" name-str "-map")) t)
- (ergoemacs (symbol-value (intern (concat "ergoemacs-translate--"
name-str "-map"))) :only-local-modifications-p t)
;;
(dolist (type '("-universal-argument" "-negative-argument"
"-digit-argument" "-modal"))
@@ -781,11 +779,6 @@ When NAME is a symbol, setup the translation function for
the symbol."
translation
(local-keymap (or (plist-get plist :keymap) (make-sparse-keymap)))
(trans-keymap (intern (concat "ergoemacs-translate--" (plist-get plist
:name) "-map"))))
- (when (ergoemacs-keymapp trans-keymap)
- (set-keymap-parent (setq trans-keymap (symbol-value trans-keymap))
local-keymap)
- (ergoemacs trans-keymap :only-local-modifications-p t))
- ;; (ergoemacs :label local-keymap)
- ;; (ergoemacs local-keymap :only-local-modifications-p t)
(let (tmp
cur-trans
ret)
@@ -836,7 +829,7 @@ When NAME is a symbol, setup the translation function for
the symbol."
(defun ergoemacs-translate--get (type)
"Get translation object TYPE."
- (let ((ret (ergoemacs-gethash type ergoemacs-translation-hash)))
+ (let ((ret (gethash type ergoemacs-translation-hash)))
(cond
((and ret (ergoemacs-translation-struct-p ret))
ret)
@@ -910,31 +903,9 @@ If there are no gui elements, return nil."
(defvar ergoemacs-translate--parent-map (make-sparse-keymap)
"Parent map for keymaps when completing a key sequence.")
-(defun ergoemacs-translate--parent-map ()
- (or ergoemacs-translate--parent-map
- (let ((map (make-sparse-keymap)))
- (setq ergoemacs-translate--parent-map map)
- (ergoemacs map :label)
- (ergoemacs map :only-local-modifications-p t)
- (ergoemacs map :map-list-hash '(ergoemacs-translate--parent-map))
- map)))
-
-(add-hook 'ergoemacs-mode-intialize-hook #'ergoemacs-translate--parent-map)
-
-
-(defvar ergoemacs-translate--modal-parent-map nil
+(defvar ergoemacs-translate--modal-parent-map (make-sparse-keymap)
"Parent map for modal `ergoemacs-mode'")
-(defun ergoemacs-translate--modal-parent-map ()
- (or ergoemacs-translate--modal-parent-map
- (let ((map (make-sparse-keymap)))
- (setq ergoemacs-translate--modal-parent-map map)
- (ergoemacs map :label)
- (ergoemacs map :only-local-modifications-p t)
- (ergoemacs map :map-list-hash '(ergoemacs-translate--modal-parent-map))
- map)))
-(add-hook 'ergoemacs-mode-intialize-hook
#'ergoemacs-translate--modal-parent-map)
-
(defvar ergoemacs-translate--keymap-hash (make-hash-table)
"Translation keymaps")
@@ -956,7 +927,7 @@ This takes into consideration the modal state of
`ergoemacs-mode'."
(ergoemacs-translate--get (or translation :normal))))
(key (or (and modal (intern (concat ":"
(ergoemacs-translation-struct-name translation) "-modal")))
(ergoemacs-translation-struct-key translation)))
- (ret (ergoemacs-gethash key ergoemacs-translate--keymap-hash))
+ (ret (gethash key ergoemacs-translate--keymap-hash))
keymap)
(unless ret
(if modal
- [elpa] externals/ergoemacs-mode 37fc1c8 233/325: Remove ergoemacs-theme-component--parse, (continued)
- [elpa] externals/ergoemacs-mode 37fc1c8 233/325: Remove ergoemacs-theme-component--parse, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 6f703fe 235/325: Remove ergoemacs-advice, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode d0004ec 241/325: Remove more -map functions, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode ea88aad 247/325: Add back the command loop, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode d43bb0a 248/325: Fix command loop, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 87b722e 251/325: Make calculate ergoemacs bindings an interactive function, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 4c1fe49 252/325: Fix some issues, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode b7f909a 254/325: Some fixes, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode f28dc66 255/325: Add some active keymaps to ergoemacs-mode (like before), Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode ecb9ac7 256/325: Align some more of the keys with what was there before. Add redo, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 9e58dd5 261/325: Simplify,
Stefan Monnier <=
- [elpa] externals/ergoemacs-mode b4b14f2 260/325: Remove ergoemacs-component, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode bde293e 263/325: Drop cache and hashkey, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 4250fae 267/325: Remove more outdated keys, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode b815b1d 273/325: Merge branch 'master' of https://github.com/mattfidler/ergoemacs-mode into mattfidler-master, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode f46ac1c 276/325: Fix typo, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode e81daf4 283/325: Require comit-mode See #505, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode d7b86f6 279/325: Add urgoemacs-redo that requires undo-fu or emacs 28, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 2fcad48 282/325: Allow toggling of ergoemacs-mode-term-raw-mode, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 59c8ab0 285/325: Remove ergoemacs substitute command keys, Stefan Monnier, 2021/10/23
- [elpa] externals/ergoemacs-mode 1ef93b5 277/325: Add major modes menu again, Stefan Monnier, 2021/10/23