[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] 36/287: Use pushnew for get-hooks.
From: |
Matthew Fidler |
Subject: |
[elpa] 36/287: Use pushnew for get-hooks. |
Date: |
Wed, 02 Jul 2014 14:44:24 +0000 |
mlf176f2 pushed a commit to branch externals/ergoemacs-mode
in repository elpa.
commit 296a13b46f4b9e3e6801e73a03fee26b60af8cb1
Author: Matthew L. Fidler <address@hidden>
Date: Tue Jun 3 07:14:37 2014 -0500
Use pushnew for get-hooks.
---
ergoemacs-theme-engine.el | 201 +++++++++++++++++++++++++++++++++------------
1 files changed, 147 insertions(+), 54 deletions(-)
diff --git a/ergoemacs-theme-engine.el b/ergoemacs-theme-engine.el
index 5c7c824..2469f47 100644
--- a/ergoemacs-theme-engine.el
+++ b/ergoemacs-theme-engine.el
@@ -735,8 +735,9 @@ Assumes maps are orthogonal."
:always ergoemacs-theme-component-maps--always
:full-map ergoemacs-theme-component-maps--full-map
:modify-map ergoemacs-theme-component-maps--modify-map))
- (when ergoemacs-theme-component-maps--hook
- (oset ret hook ergoemacs-theme-component-maps--hook))
+ (if ergoemacs-theme-component-maps--hook
+ (oset ret hook ergoemacs-theme-component-maps--hook)
+ (oset ret hook (intern (save-match-data (replace-regexp-in-string
"-map.*\\'" "-hook" (symbol-name keymap))))))
(push ret maps)
(oset obj maps maps))
ret)))
@@ -763,6 +764,17 @@ Assumes maps are orthogonal."
(t (ergoemacs-get-fixed-map
(ergoemacs-theme-component-maps--keymap obj keymap) layout)))))
+(defmethod ergoemacs-get-hooks ((obj ergoemacs-theme-component-maps) &optional
match ret)
+ (ergoemacs-theme-component-maps--ini obj)
+ (let ((ret (or ret '()))
+ (match (or match "-hook\\'")))
+ (with-slots (maps) obj
+ (dolist (map-obj maps)
+ (when (and (slot-boundp map-obj 'hook)
+ (string-match-p match (symbol-name (oref map-obj hook))))
+ (pushnew (oref map-obj hook) ret))))
+ ret))
+
(defclass ergoemacs-theme-component-map-list (eieio-named)
((map-list :initarg :map-list
@@ -770,6 +782,14 @@ Assumes maps are orthogonal."
:type list))
"`ergoemacs-mode' theme-component maps")
+(defmethod ergoemacs-get-hooks ((obj ergoemacs-theme-component-map-list)
&optional match ret)
+ (with-slots (map-list) obj
+ (let ((ret (or ret '())))
+ (dolist (map map-list)
+ (when (ergoemacs-theme-component-maps-p map)
+ (setq ret (ergoemacs-get-hooks map match ret))))
+ ret)))
+
(defmethod ergoemacs-get-fixed-map ((obj ergoemacs-theme-component-map-list)
&optional keymap layout)
(with-slots (map-list) obj
(let ((fixed-maps (mapcar (lambda(map) (and map (ergoemacs-get-fixed-map
map keymap layout))) map-list))
@@ -1101,7 +1121,89 @@ additional parsing routines defined by PARSE-FUNCTION."
',(nth 0 kb)
'(lambda () ,@(nth 1 kb)))) ergoemacs-theme-comp-hash)))
+(defmacro ergoemacs-t (&rest body-and-plist)
+ "Define an ergoemacs-theme.
+:components -- list of components that this theme uses. These can't be seen or
toggled
+:optional-on -- list of components that are optional and are on by default
+:optional-off -- list of components that are optional and off by default
+:options-menu -- Menu options list
+:silent -- If this theme is \"silent\", i.e. doesn't show up in the Themes
menu.
+The rest of the body is an `ergoemacs-theme-component' named THEME-NAME-theme
+"
+ (declare (doc-string 2)
+ (indent 2))
+ (let ((kb (make-symbol "body-and-plist"))
+ (tmp (make-symbol "tmp")))
+ (setq kb (ergoemacs--parse-keys-and-body body-and-plist))
+ (setq tmp (eval (plist-get (nth 0 kb) ':components)))
+ (push (intern (concat (plist-get (nth 0 kb) ':name) "-theme")) tmp)
+ (setq tmp (plist-put (nth 0 kb) ':components tmp))
+ (mapc
+ (lambda(comp)
+ (setq tmp (plist-put (nth 0 kb) comp
+ (eval (plist-get (nth 0 kb) comp)))))
+ '(:optional-on :optional-off :options-menu))
+
+ `(let (themes silent)
+ (setq themes (gethash "defined-themes" ergoemacs-theme-hash)
+ silent (gethash "silent-themes" ergoemacs-theme-hash))
+ (push ,(plist-get (nth 0 kb) ':name) themes)
+ (push ,(plist-get (nth 0 kb) ':name) silent)
+ (puthash ,(plist-get (nth 0 kb) ':name) ',tmp ergoemacs-theme-hash)
+ (if ,(plist-get (nth 0 kb) ':silent)
+ (puthash "silent-themes" silent ergoemacs-theme-hash)
+ (puthash "defined-themes" themes ergoemacs-theme-hash))
+ (ergoemacs-theme-comp ,(intern (concat (plist-get (nth 0 kb) ':name)
"-theme")) ()
+ ,(format "Generated theme component for %s theme" (concat (plist-get
(nth 0 kb) ':name) "-theme"))
+ ,@(nth 1 kb)))))
+
+(defun ergoemacs-theme-component-get-closest-version (version version-list)
+ "Return the closest version to VERSION in VERSION-LIST.
+Formatted for use with `ergoemacs-theme-component-hash' it will return
::version or an empty string"
+ (if (or (not version) (string= "nil" version)) ""
+ (if version-list
+ (let ((use-version (version-to-list version))
+ biggest-version
+ biggest-version-list
+ smallest-version
+ smallest-version-list
+ best-version
+ best-version-list
+ test-version-list
+ ret)
+ (mapc
+ (lambda (v)
+ (setq test-version-list (version-to-list v))
+ (if (not biggest-version)
+ (setq biggest-version v
+ biggest-version-list test-version-list)
+ (when (version-list-< biggest-version-list test-version-list)
+ (setq biggest-version v
+ biggest-version-list test-version-list)))
+ (if (not smallest-version)
+ (setq smallest-version v
+ smallest-version-list test-version-list)
+ (when (version-list-< test-version-list smallest-version-list)
+ (setq smallest-version v
+ smallest-version-list test-version-list)))
+ (cond
+ ((and (not best-version)
+ (version-list-<= test-version-list use-version))
+ (setq best-version v
+ best-version-list test-version-list))
+ ((and (version-list-<= best-version-list test-version-list) ;;
Better than best
+ (version-list-<= test-version-list use-version))
+ (setq best-version v
+ best-version-list test-version-list))))
+ version-list)
+ (if (version-list-< biggest-version-list use-version)
+ (setq ret "")
+ (if best-version
+ (setq ret (concat "::" best-version))
+ (setq ret (concat "::" smallest-version))))
+ ret)
+ "")))
(defun ergoemacs-theme-get-component (component &optional version)
"Gets the VERSION of COMPONENT from `ergoemacs-theme-comp-hash'.
@@ -1135,6 +1237,43 @@ COMPONENT can be defined as component::version"
ergoemacs-theme-comp-hash))))
comp)))
+(defun ergoemacs-theme-get-obj (&optional theme version)
+ "Get the VERSION of THEME from `ergoemacs-theme-get-component' and
`ergoemacs-theme-components'"
+ (ergoemacs-theme-get-component (ergoemacs-theme-components theme) version))
+
+(defun ergoemacs-theme-i (&optional theme version)
+ "Gets the keymaps for THEME for VERSION."
+ (let* ((theme-obj (ergoemacs-theme-get-obj theme version))
+ (fixed-obj (ergoemacs-get-fixed-map theme-obj))
+ (menu-keymap (make-sparse-keymap))
+ (ergoemacs-emulation-mode-map-alist '()))
+ (with-slots (read-map
+ shortcut-map
+ map
+ shortcut-list) fixed-obj
+ ;; Add menu.
+ (define-key menu-keymap [menu-bar ergoemacs-mode]
+ `("ErgoEmacs" . ,(ergoemacs-keymap-menu theme)))
+ (setq new-map (copy-keymap map))
+ (pop new-map)
+ (push menu-keymap new-map)
+ (push 'keymap new-map)
+ ;; (setq ergoemacs-read-input-keymap read-map
+ ;; ergoemacs-shortcut-keymap shortcut-map
+ ;; ergoemacs-keymap new-map
+ ;; ergoemacs-theme-shortcut-reset-list shortcut-list
+ ;; ergoemacs-unbind-keymap unbind-map
+ ;; ergoemacs-theme (or (and (stringp theme) theme)
+ ;; (symbol-name theme)))
+ ;; (dolist (remap (ergoemacs-get-hooks theme-obj "-mode\\'"))
+ ;; (message "%s" remap)
+ ;; (setq ergoemacs-emulation-mode-map-alist
+ ;; (append ergoemacs-emulation-mode-map-alist
+ ;; (list (cons remap
+ ;; (oref (ergoemacs-get-fixed-map
+ ;; theme-obj remap) map))))))
+ (message "%s" ergoemacs-emulation-mode-map-alist))))
+
;; (message "%s"
;; (macroexpand `))
@@ -1704,53 +1843,6 @@ Will attempt to restore the mode state when turning off
the component/theme."
:type 'boolean
:group 'ergoemacs-mode)
-(defun ergoemacs-theme-component-get-closest-version (version version-list)
- "Return the closest version to VERSION in VERSION-LIST.
-Formatted for use with `ergoemacs-theme-component-hash' it will return
::version or an empty string"
- (if (or (not version) (string= "nil" version)) ""
- (if version-list
- (let ((use-version (version-to-list version))
- biggest-version
- biggest-version-list
- smallest-version
- smallest-version-list
- best-version
- best-version-list
- test-version-list
- ret)
- (mapc
- (lambda (v)
- (setq test-version-list (version-to-list v))
- (if (not biggest-version)
- (setq biggest-version v
- biggest-version-list test-version-list)
- (when (version-list-< biggest-version-list test-version-list)
- (setq biggest-version v
- biggest-version-list test-version-list)))
- (if (not smallest-version)
- (setq smallest-version v
- smallest-version-list test-version-list)
- (when (version-list-< test-version-list smallest-version-list)
- (setq smallest-version v
- smallest-version-list test-version-list)))
- (cond
- ((and (not best-version)
- (version-list-<= test-version-list use-version))
- (setq best-version v
- best-version-list test-version-list))
- ((and (version-list-<= best-version-list test-version-list) ;;
Better than best
- (version-list-<= test-version-list use-version))
- (setq best-version v
- best-version-list test-version-list))))
- version-list)
- (if (version-list-< biggest-version-list use-version)
- (setq ret "")
- (if best-version
- (setq ret (concat "::" best-version))
- (setq ret (concat "::" smallest-version))))
- ret)
- "")))
-
(defun ergoemacs-theme--install-shortcut-item (key args keymap lookup-keymap
full-shortcut-map-p)
(let (fn-lst)
@@ -2580,13 +2672,14 @@ added to the appropriate startup hooks.
(setq versions (sort versions 'string<))
versions))
-(defun ergoemacs-theme-components (theme)
+(defun ergoemacs-theme-components (&optional theme)
"Get a list of components used for the current theme.
This respects `ergoemacs-theme-options'."
- (let ((theme-plist (gethash (if (stringp theme) theme
- (symbol-name theme))
- ergoemacs-theme-hash))
- components)
+ (let* ((theme (or theme ergoemacs-theme))
+ (theme-plist (gethash (if (stringp theme) theme
+ (symbol-name theme))
+ ergoemacs-theme-hash))
+ components)
(setq components (reverse (plist-get theme-plist ':components)))
(mapc
(lambda(x)
- [elpa] 30/287: Started adding modes and setq assignments., (continued)
- [elpa] 30/287: Started adding modes and setq assignments., Matthew Fidler, 2014/07/02
- [elpa] 32/287: Fix Issue #226, Matthew Fidler, 2014/07/02
- [elpa] 33/287: Merge branch 'master' into eieio, Matthew Fidler, 2014/07/02
- [elpa] 04/287: Revert "Stefan Monnier's Patch", Matthew Fidler, 2014/07/02
- [elpa] 35/287: Remove debug-on-error, Matthew Fidler, 2014/07/02
- [elpa] 41/287: Take out hook to change bindings., Matthew Fidler, 2014/07/02
- [elpa] 38/287: Remove global-override, Matthew Fidler, 2014/07/02
- [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 <=
- [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, 2014/07/02
- [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