emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 02f2907 33/36: hydra.el (hydra--sort-heads): change orderi


From: Oleh Krehel
Subject: [elpa] master 02f2907 33/36: hydra.el (hydra--sort-heads): change ordering method of columns
Date: Sat, 22 Jul 2017 11:22:26 -0400 (EDT)

branch: master
commit 02f29073e0074ffc124c3545f87f21f73f3c057e
Author: David AMAR <address@hidden>
Commit: David AMAR <address@hidden>

    hydra.el (hydra--sort-heads): change ordering method of columns
    
    The order was based upon the alphabetical order of the column name.
    It is now done upon the order in which column name first appear in defhydra.
---
 hydra-test.el | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 hydra.el      | 13 +++++++++----
 2 files changed, 58 insertions(+), 5 deletions(-)

diff --git a/hydra-test.el b/hydra-test.el
index 94a19a4..ffbfa24 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -1442,7 +1442,7 @@ t: info-to"
 ;; column compatibility with ruby style and no colum specified
 ;; column declared several time
 ;; nil column
-(ert-deftest hydra-column-1 ()
+(ert-deftest hydra-column-basic ()
   (should (equal (eval
                   (cadr
                    (nth 2
@@ -1507,6 +1507,54 @@ o: ok       | s: string
                    270 272 (face hydra-face-pink)
                    296 298 (face hydra-face-pink)))))
 
+;; check column order is the same as they appear in defhydra
+(ert-deftest hydra-column-order ()
+  (should (equal (eval
+                  (cadr
+                   (nth 2
+                        (nth 3
+                             (macroexpand
+                              '(defhydra hydra-window-order
+                                 (:color red :hint nil :timeout 4)
+                                 ("z" ace-window "ace" :color blue :column 
"Switch")
+                                 ("h" windmove-left "← window")
+                                 ("j" windmove-down "↓ window")
+                                 ("l" windmove-right "→ window")
+                                 ("s" split-window-below "split window" :color 
blue :column "Split Management")
+                                 ("v" split-window-right "split window 
vertically" :color blue)
+                                 ("d" delete-window "delete current window")
+                                 ("f" follow-mode "toogle follow mode")
+                                 ("u" winner-undo "undo window conf" :column 
"Undo/Redo")
+                                 ("r" winner-redo "redo window conf")
+                                 ("b" balance-windows "balance window height" 
:column "1-Sizing")
+                                 ("m" maximize-window "maximize current 
window")
+                                 ("k" windmove-up "↑ window" :column "Switch")
+                                 ("M" minimize-window "maximize current 
window" :column "1-Sizing")
+                                 ("q" nil "quit menu" :color blue :column 
nil)))))))
+                 #("hydra:
+Switch      | Split Management           | Undo/Redo           | 1-Sizing
+----------- | -------------------------- | ------------------- | 
--------------------------
+z: ace      | s: split window            | u: undo window conf | b: balance 
window height
+h: ← window | v: split window vertically | r: redo window conf | m: maximize 
current window
+j: ↓ window | d: delete current window   |                     | M: maximize 
current window
+l: → window | f: toogle follow mode      |                     |
+k: ↑ window |                            |                     |
+[q]: quit menu."
+                   173 174 (face hydra-face-blue)
+                   187 188 (face hydra-face-blue)
+                   216 217 (face hydra-face-red)
+                   238 239 (face hydra-face-red)
+                   263 264 (face hydra-face-red)
+                   277 278 (face hydra-face-blue)
+                   306 307 (face hydra-face-red)
+                   328 329 (face hydra-face-red)
+                   355 356 (face hydra-face-red)
+                   369 370 (face hydra-face-red)
+                   420 421 (face hydra-face-red)
+                   447 448 (face hydra-face-red)
+                   461 462 (face hydra-face-red)
+                   512 513 (face hydra-face-red)
+                   578 579 (face hydra-face-blue)))))
 
 (provide 'hydra-test)
 
diff --git a/hydra.el b/hydra.el
index 79ee6f1..1e28239 100644
--- a/hydra.el
+++ b/hydra.el
@@ -1002,12 +1002,17 @@ was defined."
             heads)))
 
 (defun hydra--sort-heads (normalized-heads)
-  "Return a list of heads with non-nil doc sorted by ascending column property
-each head of NORMALIZED-HEADS must have a column property"
+  "Return a list of heads with non-nil doc grouped by column property.
+Each head of NORMALIZED-HEADS must have a column property."
   (let* ((heads-wo-nil-doc (cl-remove-if-not (lambda (head) (nth 2 head)) 
normalized-heads))
+         (columns-list (delete-dups (mapcar (lambda (head) 
(hydra--head-property head :column))
+                                            normalized-heads)))
+         (get-col-index-fun (lambda (head) (cl-position (hydra--head-property 
head :column)
+                                                        columns-list
+                                                        :test 'equal)))
          (heads-sorted (cl-sort heads-wo-nil-doc (lambda (it other)
-                                                   (string< 
(hydra--head-property it :column)
-                                                            
(hydra--head-property other :column))))))
+                                                   (< (funcall 
get-col-index-fun it)
+                                                      (funcall 
get-col-index-fun other))))))
     ;; this operation partition the sorted head list into lists of heads with 
same column property
     (cl-loop for head in heads-sorted
        for column-name = (hydra--head-property head :column)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]