branch: externals/bufferlo
commit 18fd250ae33f29c19ccdda7db51401a7301cbc5d
Author: Florian Rommel <m...@florommel.de>
Commit: Florian Rommel <m...@florommel.de>

    Refine README
---
 README.org | 162 ++++++++++++++++++++++++-------------------------------------
 1 file changed, 64 insertions(+), 98 deletions(-)

diff --git a/README.org b/README.org
index 9463f0eb31..e00c0c46f9 100644
--- a/README.org
+++ b/README.org
@@ -2,7 +2,6 @@
 #+author: Florian Rommel, Stephane Marks
 #+email: m...@florommel.de, shipmi...@gmail.com
 #+language: en
-#+startup: indent
 #+options: num:nil
 #+options: toc:nil
 
@@ -15,49 +14,47 @@
 # +html_head: <script type="text/javascript" 
src="https://fniessen.github.io/org-html-themes/src/lib/js/jquery.stickytableheaders.min.js";></script>
 # +html_head: <script type="text/javascript" 
src="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/js/readtheorg.js";></script>
 
-* bufferlo
-
 Easy-to-use buffer management and workspace persistence tools for
 Emacs workflow management. Headbutt your way to productivity and moove
 ahead with bufferlo.
 
-** Introduction
+* Introduction
 
-Bufferlo maintains separate buffer lists per frame and/or
-~tab-bar-mode~ tab by curating what buffers are used in each context
-vs. using the default global buffer-list. This helps ease the burden
-associated with a long-lived Emacs session with potentially hundreds
-of buffers, many unrelated to the current frame or tab.
+With bufferlo, every frame and tab (i.e., ~tab-bar-mode~ tab) has an
+additional manageable local buffer list. A buffer is added to the
+local buffer list when displayed in the frame/tab (e.g., by opening a
+new file in the tab or by switching to the buffer from the global
+buffer list).
 
 Using Emacs's built-in buffer-list frame parameter, bufferlo
-integrates seamlessly with standard frame and tab management
+integrates seamlessly with all standard frame and tab management
 facilities, including undeletion of frames and tabs, tab duplication
-and moving, frame cloning, and, if you use it, persisting sessions via
-desktop.el, though bufferlo offers a more efficient persistence
-method.
+and moving, frame cloning, and session persistence with desktop.el
+(though bufferlo frame and tab bookmarks offer an alternative
+persistence method).
 
 Bufferlo provides extensive management functions for its local lists
 and offers features on top of switch-buffer functions, buffer menu,
 and ~ibuffer~. You can configure any command that selects a buffer to
 use the local buffer list via ~bufferlo-anywhere-mode~.
 
-Bufferlo has lightweight Emacs bookmarks-based persistence for frames
-and tabs to help you manage your transient workflows. Bufferlo
-bookmarks are compatible with built-in features such as
-bookmark-bmenu-list and third-party packages such as 
[[https://github.com/minad/consult][consult]] which
-offers consult-bookmark for interactive bookmark selection.
+In addition, bufferlo offers lightweight Emacs bookmarks-based
+persistence for frames and tabs to help you manage your transient
+workflows. Bufferlo bookmarks are compatible with built-in features
+such as bookmark-bmenu-list and third-party packages such as 
[[https://github.com/minad/consult][consult]]
+which offers consult-bookmark for interactive bookmark selection.
 
 Bufferlo's mode-line indicator shows the currently active frame and/or
 tab bookmark name.
 
 Note: Code examples use ~setq~ to customize options. You may also use
-~M-x customize-group bufferlo~. Emacs 29 introduced ~setopt~ which is
-works correctly in the presence of ~defcustom~ setters. Currently the
-only bufferlo option with a setter is
+~M-x customize-group bufferlo~. Emacs 29 introduced ~setopt~ which works
+correctly in the presence of ~defcustom~ setters. Currently the only
+bufferlo option with a setter is
 ~bufferlo-bookmarks-auto-save-idle-interval~ so be sure to set that
 interval timer in advance of enabling ~bufferlo-mode~.
 
-** Installation
+* Installation
 
 Bufferlo is available in [[https://elpa.gnu.org/packages/bufferlo.html][GNU 
ELPA]].
 Install it via ~package-install~ and enable ~bufferlo-mode~
@@ -91,15 +88,9 @@ frame-only workflow. If you use ~tab-line-mode~ without
 ~tab-bar-mode~, your bufferlo experience will be the same as a
 frame-only user.
 
-If you're not a tab-bar user, you likely have this set:
-#+begin_src emacs-lisp
-  (setq tab-bar-show nil) ; or use the following method
-  (setopt tab-bar-show nil) ; this has a defcusto setter
-#+end_src
-
-** Usage
+* Usage
 
-*** Buffer selection
+** Buffer selection
 
 Use bufferlo buffer-list commands as local-buffer alternatives to
 built-in global-buffer commands:
@@ -122,7 +113,7 @@ built-in global-buffer commands:
   a ~buffer-menu~ buffer. Orphan buffers are buffers that are not in any
   frame/tab's local buffer list.
 
-*** Manage local buffer lists
+** Manage local buffer lists
 
 - ~bufferlo-clear~: Clear the frame/tab's local buffer list, retaining
   the current buffer. This is non-destructive to the buffers
@@ -143,23 +134,10 @@ built-in global-buffer commands:
 
 - ~bufferlo-kill-orphan-buffers~: Kill all buffers that are *not* on
   any frame/tab local list.
-  #+begin_src emacs-lisp
-    (setq bufferlo-kill-buffers-prompt t) ; confirm before killing buffers or 
orphans
-  #+end_src
 
 - ~bufferlo-delete-frame-kill-buffers~: Delete the frame and kill all its 
local buffers.
-  #+begin_src emacs-lisp
-    (setq bufferlo-delete-frame-kill-buffers-save-bookmark-prompt t) ; if 
bookmarked, offer to save before killing
-
-    (setq bufferlo-delete-frame-kill-buffers-prompt t) ; confirm before 
killing the frame
-  #+end_src
 
 - ~bufferlo-tab-close-kill-buffers~: Close the tab and kill its local buffers.
-    #+begin_src emacs-lisp
-      (setq bufferlo-close-tab-kill-buffers-save-bookmark-prompt t) ; if 
bookmarked, offer to save before killing
-
-      (setq bufferlo-close-tab-kill-buffers-prompt t) ; confirm before killing 
the tab
-    #+end_src
 
 - ~bufferlo-isolate-project~: Isolate a project.el project in the
   frame or tab. This removes non-project buffers from the local buffer
@@ -172,7 +150,7 @@ built-in global-buffer commands:
 - ~bufferlo-find-buffer-switch~: Switch to a frame/tab that contains
   the buffer in its local list, and select the buffer.
 
-*** Bookmark management for frames and tabs
+** Bookmark management for frames and tabs
 
 Bufferlo can bookmark the buffers and windows belonging to individual
 frames and tabs for later recall between Emacs sessions or within a
@@ -183,12 +161,12 @@ A tab bookmark includes the tab's window configuration, 
the state (not
 the contents) of all bookmarkable local buffers, and the bufferlo
 local buffer list. Tabs can be restored into any frame.
 
-A frame bookmark saves the every tab on a frame, each with the tab
+A frame bookmark saves every tab on a frame, each with the tab
 contents stated above. Frames can be restored into the current frame,
 replacing all tabs, into a new frame, or merged with the current
 frame's tabs.
 
-**** General bookmark commands
+*** General bookmark commands
 
 The first three of these commands accept multiple selected bookmarks.
 This can be made easier by leveraging Emacs completion packages such
@@ -262,7 +240,7 @@ in combination with a package like 
[[https://github.com/minad/vertico][vertico]]
   clear it and then delete). This function is also available via
   ~bookmark-bmenu-list~.
 
-**** Frame bookmark commands
+*** Frame bookmark commands
 
 - ~bufferlo-bookmark-frame-save~ (alias ~bufferlo-bm-frame-save~):
   Save a bookmark for the current frame under a new name or pick an
@@ -287,7 +265,7 @@ in combination with a package like 
[[https://github.com/minad/vertico][vertico]]
   of creating a new frame or overwriting the current frame content,
   this adds the loaded tabs into the current frame.
 
-**** Tab bookmark commands
+*** Tab bookmark commands
 
 - ~bufferlo-bookmark-tab-save~ (alias ~bufferlo-bm-tab-save~): Save a
   bookmark for the current tab under a new name or pick an existing
@@ -307,7 +285,7 @@ in combination with a package like 
[[https://github.com/minad/vertico][vertico]]
   current tab. This will overwrite your current tab content (no
   buffers are killed).
 
-**** Automatic bookmark saving
+*** Automatic bookmark saving
 
 You can configure bufferlo to automatically save some or all bookmarks
 based on an interval timer and/or at Emacs exit. Similarly, you can
@@ -338,6 +316,7 @@ Example auto-save predicate:
 #+end_src
 
 You can control messages produced when bufferlo saves bookmarks:
+
 #+begin_src emacs-lisp
   (setq bufferlo-bookmarks-auto-save-messages nil) ; inhibit messages (default)
   (setq bufferlo-bookmarks-auto-save-messages t) ; messages when saving and 
when there are no bookmarks to save
@@ -345,8 +324,17 @@ You can control messages produced when bufferlo saves 
bookmarks:
   (setq bufferlo-bookmarks-auto-save-messages 'notsaved) ; message only when 
there are no bookmarks to save
 #+end_src
 
+To save your bufferlo bookmarks when frames and tabs are closed:
+
+#+BEGIN_SRC emacs-lisp
+  (setq bufferlo-bookmark-frame-save-on-delete 'if-current)
+  (setq bufferlo-bookmark-tab-save-on-close 'if-current)
+  ;; See the variables' documentation for more options
+#+END_SRC
+
 To save your bufferlo bookmarks at Emacs exit (set in advance of
 enabling ~bufferlo-mode~):
+
 #+begin_src emacs-lisp
   (setq bufferlo-bookmarks-save-at-emacs-exit-policy 'nosave) ; inhibit saving 
at exit (default)
   (setq bufferlo-bookmarks-save-at-emacs-exit-policy 'pred) ; save active 
bookmark names that match your predicates
@@ -361,11 +349,10 @@ the first, called; e.g., "bufferlo=as". You can restore 
"bufferlo" and
 get back to your original any time while the "=as" bookmark will save
 your context as you work. Switch between them as you see fit.
 
-**** Automatic bookmark loading
+*** Automatic bookmark loading
 
 To automatically load some or all bufferlo bookmarks at Emacs startup
 time:
-
 #+begin_src emacs-lisp
   (setq bufferlo-bookmarks-load-at-emacs-startup 'noload) ; inhibit loading at 
startup (default)
   (setq bufferlo-bookmarks-load-at-emacs-startup 'pred) ; load bookmark names 
that match your predicates
@@ -373,14 +360,12 @@ time:
 #+end_src
 
 To make a new frame to hold restored tabs at startup, or reuse the initial 
frame:
-
 #+begin_src emacs-lisp
   (setq bufferlo-bookmarks-load-at-emacs-startup-tabs-make-frame nil) ; reuse 
the initial frame (default)
   (setq bufferlo-bookmarks-load-at-emacs-startup-tabs-make-frame t) ; make a 
new frame
 #+end_src
 
 Example auto-load predicate:
-
 #+begin_src emacs-lisp
   (setq 'bufferlo-bookmarks-load-predicate-functions 
#'bufferlo-bookmarks-load-all-p) ; loads all bookmarks
 
@@ -393,13 +378,12 @@ Example auto-load predicate:
 You can inhibit bufferlo bookmarks from loading at Emacs startup
 without changing your configuration by either using the command line
 or a semaphore file in your ~user-emacs-directory~:
-
 #+begin_src shell
 $ emacs --bufferlo-noload
 $ touch ~/.emacs.d/bufferlo-noload # remove it to reenable automatic loading
 #+end_src
 
-**** Filter saved bookmark buffers
+*** Filter saved bookmark buffers
 
 By default, bufferlo will save all buffers in the local frame/tab
 buffer list, using Emacs facilities to bookmark what's bookmarkable
@@ -426,7 +410,7 @@ filter are added back. For example:
          ))
 #+end_src
 
-**** Bookmark duplicates
+*** Bookmark duplicates
 
 Bufferlo can discourage you from using multiple duplicate active
 bookmarks, but does not prevent them. Having duplicates is confusing
@@ -444,7 +428,7 @@ but they are likely to be enabled by default in the future.
   (setq bufferlo-bookmarks-save-duplicates-policy 'disallow) ; even better
 #+end_src
 
-**** Save current, other, or all frame bookmarks
+*** Save current, other, or all frame bookmarks
 
 If you use batch or automatic saving, this option lets you control
 which frames' bookmarks are saved. For example, some prefer not to
@@ -456,7 +440,7 @@ have their current working set be saved unless and until 
they choose.
   (setq bufferlo-bookmarks-save-frame-policy 'current) ; saves only the 
current frame bookmarks
 #+end_src
 
-**** Frame bookmark options
+*** Frame bookmark options
 
 What follows is a good, basic set of frame bookmark policies. Refine
 them to suit your workflow as you gain experience with bufferlo. Refer
@@ -485,7 +469,7 @@ to each option's documentation for additional settings.
   (setq bufferlo-bookmark-frame-clone-policy 'allow) ; old default behavior
 #+end_src
 
-**** Tab bookmark options
+*** Tab bookmark options
 
 What follows is a good, basic set of tab bookmark policies. Refine
 them to suit your workflow as you gain experience with bufferlo. Refer
@@ -517,7 +501,7 @@ to each option's documentation for additional settings.
   (setq bufferlo-bookmark-tab-load-into-bookmarked-frame-policy 'clear-warn) ; 
clear the loaded tab bookmark with a message
 #+end_src
 
-**** Bookmark addenda
+*** Bookmark addenda
 
 Emacs bookmarks do not store your file or buffer contents, only
 references to your files and buffers. Many Emacs modes support Emacs
@@ -558,7 +542,7 @@ among colleagues. Bookmarks can be made more "portable" 
with the following assum
   (setq bufferlo-mode-line-lighter #'my/bufferlo-mode-line-lighter) ; use your 
own
 #+end_src
 
-*** Initial buffer
+** Initial buffer
 
 By default, the currently-active buffer is shown in a newly created
 tab so this buffer inevitably ends up in the new tab's local buffer
@@ -595,7 +579,7 @@ You can also set an arbitrary buffer as the initial frame 
buffer:
   (add-hook 'after-make-frame-functions #'my/set-initial-frame-buffer)
 #+end_src
 
-*** Bufferlo anywhere
+** Bufferlo anywhere
 
 "Bufferlo anywhere" lets you have bufferlo's frame/tab-local buffer
 list anywhere you like, i.e. in any command with interactive buffer
@@ -615,9 +599,9 @@ Instead of the minor mode, you can use the command prefix
 ~bufferlo-anywhere-enable-prefix~, which only temporarily enables
 bufferlo's local buffer list for the next command.
 
-** Package integration
+* Package integration
 
-*** Consult
+** Consult
 
 You can integrate bufferlo with ~consult-buffer~.
 
@@ -705,7 +689,7 @@ A good alternative is to bind space to "All Buffers" (via 
~:narrow
 list, you can make a new source for it, for example, with period as
 the narrowing key (~:narrow ?.~).
 
-*** Ivy
+** Ivy
 
 You can also integrate bufferlo with ~ivy~.
 
@@ -725,12 +709,22 @@ You can also integrate bufferlo with ~ivy~.
                   :caller 'ivy-switch-buffer)))
 #+end_src
 
-*** shell-mode bookmarks
+** shell-mode bookmarks
 
 We may post some code on the bufferlo wiki illustrate how to enable
 bookmarks for ~shell-mode~ buffers. We will help contribute this
 feature to Emacs 31.
 
+** save-place-mode
+
+If you use ~save-place-mode~, and prefer to *always* use its
+buffer-position history, overriding bufferlo's saved bookmark
+positions, add this to your configuration:
+
+#+begin_src emacs-lisp
+  (setq bufferlo-bookmark-prefer-saveplace-point t)
+#+end_src
+
 ** Complete configuration sample
 
 #+begin_src emacs-lisp
@@ -779,9 +773,7 @@ feature to Emacs 31.
                   "\\'"))
     (setq bufferlo-kill-buffers-prompt t)
     (setq bufferlo-bookmark-prefer-saveplace-point t)
-    (setq bufferlo-delete-frame-kill-buffers-save-bookmark-prompt t)
     (setq bufferlo-delete-frame-kill-buffers-prompt t)
-    (setq bufferlo-close-tab-kill-buffers-save-bookmark-prompt t)
     (setq bufferlo-close-tab-kill-buffers-prompt t)
     (setq bufferlo-bookmark-frame-load-make-frame t)
     (setq bufferlo-bookmark-frame-load-policy 'prompt)
@@ -871,35 +863,9 @@ feature to Emacs 31.
     )
 #+end_src
 
-** Recommended packages
-
-In general, we recommend using these additional Emacs features which
-help remember state between Emacs sessions: ~recentf~, ~savehist~,
-~saveplace~, and ~uniquify~ which helps with buffer naming conflicts.
-
-If you use ~saveplace~, and prefer to use its buffer-position history
-and want to ignore bookmark positions, put this in your bufferlo
-configuration:
-#+begin_src emacs-lisp
-  (setq bufferlo-bookmark-prefer-saveplace-point t)
-#+end_src
-
-There are several mature packages that enhance Emacs completion
-functions in the ~minibuffer~ and "in-region." Working with Emacs
-under enhanced completion is almost a must-have over the defaults.
-
-Some people prefer [[https://company-mode.github.io/][company]], some 
[[https://github.com/abo-abo/swiper][ivy]], and some 
[[https://emacs-helm.github.io/helm/][helm]]. One bufferlo
-author uses the following combination of completion packages which are
-built using native shared Emacs completion APIs for more universal
-operation: [[https://github.com/oantolin/orderless][orderless]] which provides 
regexp among other completion
-styles, [[https://github.com/minad/vertico][vertico]] which enhances 
~minibuffer~ completion candidate
-selection into vertical or tabular lists, 
[[https://github.com/minad/corfu][corfu]] which offers rich
-"in-region" completion for GUI or tty, and 
[[https://github.com/minad/consult][consult]] which, along with
-[[https://github.com/minad/marginalia/][marginalia]] make ~minibuffer~ 
completions even richer.
-
-** Alternatives
+* Alternatives
 
-*** desktop.el
+** desktop.el
 
 In contrast to ~desktop.el~, Emacs's built-in persistence feature,
 bufferlo's persistence is lightweight. ~desktop.el~ is an
@@ -918,7 +884,7 @@ This can be more convenient than ~desktop.el~ when you use 
multiple
 Emacs sessions; e.g., GUI and tty sessions where your frames and tabs
 will have different geometries.
 
-*** Other Emacs packages
+** Other Emacs packages
 
 The packages [[https://github.com/alpaker/frame-bufs][frame-bufs]] 
(unmaintained) and [[https://protesilaos.com/emacs/beframe][beframe]] provide 
similar
 functionality, but only at the frame level, and without support for

Reply via email to