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

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

[elpa] externals/cursory 1b2d6416ac 2/5: Implement fallback value for cu


From: ELPA Syncer
Subject: [elpa] externals/cursory 1b2d6416ac 2/5: Implement fallback value for cursory-presets
Date: Sun, 4 Sep 2022 04:57:39 -0400 (EDT)

branch: externals/cursory
commit 1b2d6416ac937cde7a22d43d8eac3d5b6c2efa18
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    Implement fallback value for cursory-presets
---
 README.org | 49 ++++++++++++++++++++++++++++++-------------------
 cursory.el | 48 +++++++++++++++++++++++++++++++++---------------
 2 files changed, 63 insertions(+), 34 deletions(-)

diff --git a/README.org b/README.org
index 08a5094bec..ec82fc733e 100644
--- a/README.org
+++ b/README.org
@@ -95,6 +95,35 @@ built-in variables: ~cursor-type~, 
~cursor-in-non-selected-windows~,
 The value each property accepts is the same as the variable it
 references.
 
+[ The fallback =t= value for ~cursory-presets~ is part of 
{{{development-version}}} ]
+
+A preset whose car is =t= is treated as the default option.  This makes
+it possible to specify multiple presets without duplicating their
+properties.  The other presets beside =t= act as overrides of the
+defaults and, as such, need only consist of the properties that change
+from the default.  See the original value of this variable for how that
+is done:
+
+#+begin_src emacs-lisp
+(defcustom cursory-presets
+  '((box
+     :blink-cursor-interval 0.8)
+    (bar
+     :cursor-type (bar . 2)
+     :blink-cursor-interval 0.5)
+    (underscore
+     :cursor-type (hbar . 3)
+     :blink-cursor-blinks 50)
+    (t ; the default values
+     :cursor-type box
+     :cursor-in-non-selected-windows hollow
+     :blink-cursor-blinks 10
+     :blink-cursor-interval 0.2
+     :blink-cursor-delay 0.2))
+  ;; Omitting the doc string for demo purposes
+  )
+#+end_src
+
 When called from Lisp, the ~cursory-set-preset~ command requires a
 PRESET argument, such as:
 
@@ -179,25 +208,7 @@ Remember to read the doc string of each of these variables 
or functions.
 #+begin_src emacs-lisp
 (require 'cursory)
 
-(setq cursory-presets
-      '((bar
-         :cursor-type (bar . 2)
-         :cursor-in-non-selected-windows hollow
-         :blink-cursor-blinks 10
-         :blink-cursor-interval 0.5
-         :blink-cursor-delay 0.2)
-        (box
-         :cursor-type box
-         :cursor-in-non-selected-windows hollow
-         :blink-cursor-blinks 10
-         :blink-cursor-interval 0.5
-         :blink-cursor-delay 0.2)
-        (underscore
-         :cursor-type (hbar . 3)
-         :cursor-in-non-selected-windows hollow
-         :blink-cursor-blinks 50
-         :blink-cursor-interval 0.2
-         :blink-cursor-delay 0.2)))
+;; Check the `cursory-presets' for how to set your own preset styles.
 
 (setq cursory-latest-state-file (locate-user-emacs-file 
"cursory-latest-state"))
 
diff --git a/cursory.el b/cursory.el
index d61a8ec2b3..38c66a89aa 100644
--- a/cursory.el
+++ b/cursory.el
@@ -77,28 +77,32 @@
   :group 'cursor)
 
 (defcustom cursory-presets
-  '((bar
+  '((box
+     :blink-cursor-interval 0.8)
+    (bar
      :cursor-type (bar . 2)
-     :cursor-in-non-selected-windows hollow
-     :blink-cursor-blinks 10
-     :blink-cursor-interval 0.5
-     :blink-cursor-delay 0.2)
-    (box
-     :cursor-type box
-     :cursor-in-non-selected-windows hollow
-     :blink-cursor-blinks 10
-     :blink-cursor-interval 0.5
-     :blink-cursor-delay 0.2)
+     :blink-cursor-interval 0.5)
     (underscore
      :cursor-type (hbar . 3)
+     :blink-cursor-blinks 50)
+    (t ; the default values
+     :cursor-type box
      :cursor-in-non-selected-windows hollow
-     :blink-cursor-blinks 50
+     :blink-cursor-blinks 10
      :blink-cursor-interval 0.2
      :blink-cursor-delay 0.2))
   "Alist of preset configurations for `blink-cursor-mode'.
 
 The car of each cons cell is an arbitrary, user-specified key
-that broadly describes the set.
+that broadly describes the set (e.g. slow-blinking-box or
+fast-blinking-bar).
+
+A preset whose car is t is treated as the default option.  This
+makes it possible to specify multiple presets without duplicating
+their properties.  The other presets beside t act as overrides of
+the defaults and, as such, need only consist of the properties
+that change from the default.  See the original value of this
+variable for how that is done.
 
 The cdr is a plist which specifies the cursor type and blink
 properties.  In particular, it accepts the following properties:
@@ -144,6 +148,20 @@ Saving is done by the `cursory-store-latest-preset' 
function."
 (defvar cursory--style-hist '()
   "Minibuffer history of `cursory--set-cursor-prompt'.")
 
+(defun cursory--preset-values (preset)
+  "Get properties of PRESET with relevant fallbacks."
+  (append (alist-get preset cursory-presets)
+          (alist-get t cursory-presets)))
+
+(defun cursory--presets-no-fallback ()
+  "Return list of `cursory-presets', minus the fallback value."
+  (delete
+   nil
+   (mapcar (lambda (symbol)
+             (unless (eq (car symbol) t)
+               symbol))
+           cursory-presets)))
+
 (defun cursory--set-cursor-prompt ()
   "Promp for `cursory-presets' (used by `cursory-set-preset')."
   (let* ((def (nth 1 cursory--style-hist))
@@ -151,8 +169,8 @@ Saving is done by the `cursory-store-latest-preset' 
function."
                      (format "Apply cursor configurations from PRESET [%s]: " 
def)
                    "Apply cursor configurations from PRESET: ")))
     (completing-read
-     (mapcar #'car cursory-presets)
      prompt
+     (cursory--presets-no-fallback)
      nil t nil 'cursory--style-hist def)))
 
 ;;;###autoload
@@ -171,7 +189,7 @@ With optional LOCAL as a prefix argument, set the
       (cursory--set-cursor-prompt))
     current-prefix-arg))
   (when-let* ((styles (if (stringp style) (intern style) style))
-              (properties (alist-get styles cursory-presets))
+              (properties (cursory--preset-values styles))
               (type (plist-get properties :cursor-type))
               (type-no-select (plist-get properties 
:cursor-in-non-selected-windows))
               (blinks (plist-get properties :blink-cursor-blinks))



reply via email to

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