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

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

[elpa] externals/logos 05cf789a08 1/5: REVISE fallback of logos-outline-


From: ELPA Syncer
Subject: [elpa] externals/logos 05cf789a08 1/5: REVISE fallback of logos-outline-regexp-alist
Date: Tue, 18 Oct 2022 21:58:00 -0400 (EDT)

branch: externals/logos
commit 05cf789a08e71ba0fd36d08e5852b900b42f7d58
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    REVISE fallback of logos-outline-regexp-alist
    
    The previous value did not account for the buffer-local values of
    'outline-regexp' or 'page-delimiter', nor did it adapt to any changes
    in those values.  Instead, it would capture whatever the value was at
    the time of declaration.
    
    We remove the 't' condition altogether and instead handle the fallback
    value internally.  Logos will either return the current buffer-local
    value of 'outline-regexp' or 'page-delimiter', in this order.
    
    Put simply, this has the same intent as before, but works properly.
---
 README.org | 19 ++++++++-----------
 logos.el   | 25 +++++++++++++++++--------
 2 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/README.org b/README.org
index 72797c6930..5e8e5cce7e 100644
--- a/README.org
+++ b/README.org
@@ -233,8 +233,7 @@ changes out-of-the-box 
([[#h:2bb57369-352a-43bf-afe3-0bed2fcc7359][Extra tweaks]
 (setq logos-outline-regexp-alist
       `((emacs-lisp-mode . "^;;;+ ")
         (org-mode . "^\\*+ +")
-        (markdown-mode . "^\\#+ +")
-        (t . ,(if (boundp 'outline-regexp) outline-regexp 
logos--page-delimiter))))
+        (markdown-mode . "^\\#+ +")))
 
 ;; These apply when `logos-focus-mode' is enabled.  Their value is
 ;; buffer-local.
@@ -418,7 +417,9 @@ Or simply exclude all programming modes:
 By default, the page motions only move between the =^L= delimiters.
 While the option ~logos-outlines-are-pages~ changes the behaviour to
 move between outline headings instead.  What constitutes an "outline
-heading" is determined by the ~logos-outline-regexp-alist~.
+heading" is determined by the ~logos-outline-regexp-alist~ with an
+automatic fallback to either ~outline-regexp~ or ~page-delimiter~
+(Logos handles this fallback condition internally).
 
 Provided this:
 
@@ -435,8 +436,7 @@ as an outline, else the standard =^L=.
 #+begin_src emacs-lisp
 (setq logos-outline-regexp-alist
       `((emacs-lisp-mode . "^;;;+ ")
-        (org-mode . "^\\*+ +")
-        (t . ,(if (boundp 'outline-regexp) outline-regexp 
logos--page-delimiter))))
+        (org-mode . "^\\*+ +")))
 #+end_src
 
 It is possible to tweak those regular expressions to target both the
@@ -445,8 +445,7 @@ outline and the page delimiters:
 #+begin_src emacs-lisp
 (setq logos-outline-regexp-alist
       `((emacs-lisp-mode . ,(format "\\(^;;;+ \\|%s\\)" (default-value 
'page-delimiter)))
-        (org-mode . ,(format "\\(^\\*+ +\\|%s\\)" (default-value 
'page-delimiter)))
-        (t . ,(if (boundp 'outline-regexp) outline-regexp 
logos--page-delimiter))))
+        (org-mode . ,(format "\\(^\\*+ +\\|%s\\)" (default-value 
'page-delimiter)))))
 #+end_src
 
 The form =,(format "\\(^;;;+ \\|%s\\)" logos--page-delimiter)= expands
@@ -459,8 +458,7 @@ pattern).  Putting it all together:
 #+begin_src emacs-lisp
 (setq logos-outline-regexp-alist
       `((emacs-lisp-mode . ,(format "\\(^;;;+ \\|%s\\)" logos--page-delimiter))
-        (org-mode . ,(format "\\(^\\*+ +\\|^-\\{5\\}$\\|%s\\)" 
logos--page-delimiter))
-        (t . ,(if (boundp 'outline-regexp) outline-regexp 
logos--page-delimiter))))
+        (org-mode . ,(format "\\(^\\*+ +\\|^-\\{5\\}$\\|%s\\)" 
logos--page-delimiter))))
 #+end_src
 
 Another Org-specific tweak is to use heading levels up to a specific
@@ -473,8 +471,7 @@ end result can look like this:
 #+begin_src emacs-lisp
 (setq logos-outline-regexp-alist
       `((emacs-lisp-mode . ,(format "\\(^;;;+ \\|%s\\)" logos--page-delimiter))
-        (org-mode . ,(format "\\(^\\*\\{1,3\\} +\\|^-\\{5\\}$\\|%s\\)" 
logos--page-delimiter))
-        (t . ,(if (boundp 'outline-regexp) outline-regexp 
logos--page-delimiter))))
+        (org-mode . ,(format "\\(^\\*\\{1,3\\} +\\|^-\\{5\\}$\\|%s\\)" 
logos--page-delimiter))))
 #+end_src
 
 ** Leverage logos-focus-mode-extra-functions
diff --git a/logos.el b/logos.el
index 233199c6a0..1c8b92d0b0 100644
--- a/logos.el
+++ b/logos.el
@@ -107,23 +107,23 @@ When this variable is nil, pages are demarcated by the
   :package-version '(logos . "0.1.0")
   :group 'logos)
 
-(defconst logos--page-delimiter (default-value 'page-delimiter)
-  "The default value of `page-delimiter'.")
-
 (defcustom logos-outline-regexp-alist
   `((emacs-lisp-mode . "^;;;+ ")
     (org-mode . "^\\*+ +")
-    (markdown-mode . "^\\#+ +")
-    (t . ,(if (boundp 'outline-regexp) outline-regexp logos--page-delimiter)))
+    (markdown-mode . "^\\#+ +"))
   "Alist of major mode and regular expression of the outline.
 Only used when `logos-outlines-are-pages' is non-nil.
 
 The major mode also targets any of its derivatives.  For example,
 `lisp-interaction-mode' (the standard scratch buffer) is based on
 `emacs-lisp-mode' so one only needs to set the outline regexp of
-the latter."
+the latter.
+
+If the current buffer's major mode is not specified herein, Logos
+will try to use the `outline-regexp', else fall back to the
+generic `page-delimiter'."
   :type `(alist :key-type symbol :value-type string) ; TODO 2022-03-02: ensure 
symbol is mode?
-  :package-version '(logos . "0.1.0")
+  :package-version '(logos . "0.6.0")
   :group 'logos)
 
 (defcustom logos-hide-cursor nil
@@ -226,13 +226,22 @@ and disabled, then use the `logos-focus-mode-hook' 
instead."
 
 ;;;; Page motions
 
+(defconst logos--page-delimiter (default-value 'page-delimiter)
+  "The default value of `page-delimiter'.")
+
+(defun logos--outline-or-delimiter ()
+  "Return the current `outline-regexp' or page delimiter."
+  (if (bound-and-true-p outline-regexp)
+      outline-regexp
+    logos--page-delimiter))
+
 (defun logos--outline-regexp ()
   "Return page delimiter from `logos-outline-regexp-alist'."
   (let ((outline logos-outline-regexp-alist)
         (mode major-mode))
     (or (alist-get mode outline)
         (alist-get (get mode 'derived-mode-parent) outline)
-        (alist-get t outline))))
+        (logos--outline-or-delimiter))))
 
 (defun logos--page-delimiter ()
   "Determine the `page-delimiter'."



reply via email to

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