@@ 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
@@ 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'."