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

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

[elpa] externals/exwm d78c562 4/4: Make `exwm-manage-configurations' mor


From: Chris Feng
Subject: [elpa] externals/exwm d78c562 4/4: Make `exwm-manage-configurations' more user friendly
Date: Sun, 11 Aug 2019 12:25:00 -0400 (EDT)

branch: externals/exwm
commit d78c562f9a90055b595cb783928af43597b5ca6c
Author: Chris Feng <address@hidden>
Commit: Chris Feng <address@hidden>

    Make `exwm-manage-configurations' more user friendly
    
    * exwm-manage.el (exwm-manage-configurations): Specify type for each
    configuration option.
---
 exwm-manage.el | 78 ++++++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 57 insertions(+), 21 deletions(-)

diff --git a/exwm-manage.el b/exwm-manage.el
index 6f89fff..797fc15 100644
--- a/exwm-manage.el
+++ b/exwm-manage.el
@@ -74,28 +74,64 @@ criterion would be applied."
   :type '(alist :key-type (sexp :tag "Matching criterion" nil)
                 :value-type
                 (plist :tag "Configurations"
-                       :key-type
-                       (choice
-                        (const :tag "Floating" floating)
-                        (const :tag "X" x)
-                        (const :tag "Y" y)
-                        (const :tag "Width" width)
-                        (const :tag "Height" height)
-                        (const :tag "Border width" border-width)
-                        (const :tag "Fullscreen" fullscreen)
-                        (const :tag "Floating mode-line" floating-mode-line)
-                        (const :tag "Tiling mode-line" tiling-mode-line)
-                        (const :tag "Floating header-line"
-                               floating-header-line)
-                        (const :tag "Tiling header-line" tiling-header-line)
-                        (const :tag "Char-mode" char-mode)
-                        (const :tag "Prefix keys" prefix-keys)
-                        (const :tag "Simulation keys" simulation-keys)
-                        (const :tag "Workspace" workspace)
-                        (const :tag "Managed" managed)
+                       :options
+                       (((const :tag "Floating" floating) boolean)
+                        ((const :tag "X" x) number)
+                        ((const :tag "Y" y) number)
+                        ((const :tag "Width" width) number)
+                        ((const :tag "Height" height) number)
+                        ((const :tag "Border width" border-width) integer)
+                        ((const :tag "Fullscreen" fullscreen) boolean)
+                        ((const :tag "Floating mode-line" floating-mode-line)
+                         sexp)
+                        ((const :tag "Tiling mode-line" tiling-mode-line) sexp)
+                        ((const :tag "Floating header-line"
+                                floating-header-line)
+                         sexp)
+                        ((const :tag "Tiling header-line" tiling-header-line)
+                         sexp)
+                        ((const :tag "Char-mode" char-mode) boolean)
+                        ((const :tag "Prefix keys" prefix-keys)
+                         (repeat key-sequence))
+                        ((const :tag "Simulation keys" simulation-keys)
+                         (alist :key-type (key-sequence :tag "From")
+                                :value-type (key-sequence :tag "To")))
+                        ((const :tag "Workspace" workspace) integer)
+                        ((const :tag "Managed" managed) boolean)
                         ;; For forward compatibility.
-                        (other))
-                       :value-type (sexp :tag "Value" nil))))
+                        ((other) sexp))))
+  ;; TODO: This is admittedly ugly.  We'd be better off with an event type.
+  :get (lambda (symbol)
+         (mapcar (lambda (pair)
+                   (let* ((match (car pair))
+                          (config (cdr pair))
+                          (prefix-keys (plist-get config 'prefix-keys)))
+                     (when prefix-keys
+                       (setq config (copy-tree config)
+                             config (plist-put config 'prefix-keys
+                                               (mapcar (lambda (i)
+                                                         (if (sequencep i)
+                                                             i
+                                                           (vector i)))
+                                                       prefix-keys))))
+                     (cons match config)))
+                 (default-value symbol)))
+  :set (lambda (symbol value)
+         (set symbol
+              (mapcar (lambda (pair)
+                        (let* ((match (car pair))
+                               (config (cdr pair))
+                               (prefix-keys (plist-get config 'prefix-keys)))
+                          (when prefix-keys
+                            (setq config (copy-tree config)
+                                  config (plist-put config 'prefix-keys
+                                                    (mapcar (lambda (i)
+                                                              (if (sequencep i)
+                                                                  (aref i 0)
+                                                                i))
+                                                            prefix-keys))))
+                          (cons match config)))
+                      value))))
 
 ;; FIXME: Make the following values as small as possible.
 (defconst exwm-manage--height-delta-min 5)



reply via email to

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