branch: externals/bufferlo commit 8e3694bef8db0d99c17264e3d2af9b12a2a531a7 Author: Florian Rommel <m...@florommel.de> Commit: Florian Rommel <m...@florommel.de>
Update README --- README.org | 183 +++++++++++++++++++++++++------------------------------------ 1 file changed, 74 insertions(+), 109 deletions(-) diff --git a/README.org b/README.org index 195905dcba..8ef97d287e 100644 --- a/README.org +++ b/README.org @@ -5,15 +5,6 @@ #+options: num:nil #+options: toc:nil -# Uncomment below for decent local preview (would be nicer to have local GitHub rendering). -# +options: html-style:nil -# +html_head: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/htmlize.css"/> -# +html_head: <link rel="stylesheet" type="text/css" href="https://fniessen.github.io/org-html-themes/src/readtheorg_theme/css/readtheorg.css"/> -# +html_head: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> -# +html_head: <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> -# +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> - Easy-to-use buffer management and workspace persistence tools for Emacs workflow management. Headbutt your way to productivity and moove ahead with bufferlo. @@ -45,26 +36,6 @@ 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 default mode-line indicator shows the currently active -frame- and/or tab-bookmark name and also indicates if at least one -bookmark set is active. - -A bufferlo menu bar is enabled by default to encourage discovery of -bufferlo features. - -Note: Code examples use ~setq~ to customize options. You may also use -~M-x customize-group bufferlo~. Emacs 29 introduced ~setopt~ which -works correctly in the presence of ~defcustom~ setters. Currently the -only bufferlo option with such a setter is -~bufferlo-bookmarks-auto-save-interval~ so be sure to set that -interval timer in advance of enabling ~bufferlo-mode~. - -Note: Many bufferlo commands have short-hand aliases to accommodate -the helpful ~which-key~ display (now a built-in for Emacs 30+). -Bufferlo's menu references these aliases and not the main commands. We -recommend that you use the short-hand aliases when binding your -preferred keys to ensure the bufferlo menu reflects your key bindings. - * Installation Bufferlo is available in [[https://elpa.gnu.org/packages/bufferlo.html][GNU ELPA]]. @@ -73,24 +44,11 @@ Install it via ~package-install~ and enable ~bufferlo-mode~ (bufferlo-mode) #+end_src -Or via ~use-package~ (see below for a more comprehensive configuration example) +Or via ~use-package~ (see below for a comprehensive configuration example) #+begin_src emacs-lisp (use-package bufferlo :ensure t :init - ;; To install ibuffer filters, set the below in advance of enabling - ;; bufferlo-mode - (setq bufferlo-ibuffer-bind-local-buffer-filter t) - ;; To narrow previous-buffer and next-buffer candidates to local - ;; frame or tab buffer lists, pick one of: - (setq bufferlo-prefer-local-buffers t) ; frame locals - (setq bufferlo-prefer-local-buffers 'tabs) ; frame + tab locals - :config - (setq switch-to-prev-buffer-skip-regexp ; set this to filter out buffers in previous/next-buffer - (concat "\\` *" ; ignore hidden buffers - "\\(\\*\\(Messages\\|Ibuffer\\|scratch\\|Completions\\|Help\\|Warnings\\|Apropos\\|vc-diff\\)\\*\\)" - "\\|" (rx "*helpful " (1+ anything) "*") - "\\'")) (bufferlo-mode)) #+end_src @@ -101,6 +59,19 @@ frame-only workflow. If you use ~tab-line-mode~ without frame-only user. Tab-oriented functions are active even if the tab-bar is hidden. +The following code examples use ~setq~ to customize options. You may +also use ~M-x customize-group bufferlo~. Emacs 29 introduced ~setopt~ +which works correctly in the presence of ~defcustom~ setters. Currently +the only bufferlo option with such a setter is +~bufferlo-bookmarks-auto-save-interval~ so be sure to set that +interval timer in advance of enabling ~bufferlo-mode~. + +Many bufferlo commands have short-hand aliases to accommodate the +helpful ~which-key~ display (now a built-in for Emacs 30+). Bufferlo's +menu references these aliases and not the main commands. We recommend +that you use the short-hand aliases when binding your preferred keys +to ensure the bufferlo menu reflects your key bindings. + * Usage ** Buffer selection @@ -659,8 +630,7 @@ be available when those functions are called. Bufferlo provides wrappers around Emacs frame functions to provide more precision. This is due to issues that affect ~make-frame~ and hence ~frameset-restore~. One bug preventing pixel-level precision was -reported and fixed for Emacs 31 (it was too late for the Emacs 30 -release cycle). +reported and fixed for Emacs 31. Frames stored in bufferlo frame bookmarks have their geometries stored individually and are recreated on demand. Bookmark sets frame @@ -757,7 +727,7 @@ If files are deleted between Emacs sessions and a bookmarked buffer cannot be restored, after loading a bookmark with a missing file, a message similar to this can be found in your ~*Messages*~ buffer: -~Bufferlo tab: Could not restore emacs-todo.md (error (bookmark-error-no-filename stringp ~/.emacs/emacs-todo.md))~ +~Bufferlo bookmark: Could not restore file.txt (error (bookmark-error-no-filename stringp /etc/file.txt))~ Please note: Emacs ~bookmark-jump-other-frame~ and ~bookmark-jump-other-window~ commands are not compatible with bufferlo @@ -775,7 +745,11 @@ following assumptions: - You share a directory hierarchy for files in common such as programming or writing projects on which you collaborate. -*** mode-line +** Mode line + +Bufferlo's default mode-line indicator shows the currently active +frame- and/or tab-bookmark name and also indicates if at least one +bookmark set is active. - If you prefer iconic mode-line prefixes, set one like this: #+begin_src emacs-lisp @@ -810,7 +784,7 @@ following assumptions: :foreground "#000fff") #+end_src -*** Menu bar +** Menu bar Bufferlo enables its menu bar entry by default to encourage feature discovery and menu-item entries are adorned with key mappings from @@ -1213,9 +1187,9 @@ bookmarks at once using ~bufferlo-bookmarks-load-interactive~. Emacs 31 will be getting a proper CRM prompt that displays the CRM separator character as a reminder hint. Note: The default separator is a comma. -Per https://github.com/minad/vertico#completing-read-multiple from the -author of the Emacs CRM patch, we recommend adding the following -snippet to your Emacs configuration. +Per [[https://github.com/minad/vertico#completing-read-multiple][vertico#completing-read-multiple]] from the author of the Emacs CRM +patch, we recommend adding the following snippet to your Emacs +configuration. #+begin_src emacs-lisp ;; Prompt indicator for `completing-read-multiple'. @@ -1228,24 +1202,21 @@ snippet to your Emacs configuration. (cdr args)))))) #+end_src -* Alternatives +* Related Packages ** desktop.el -In contrast to ~desktop.el~, Emacs's built-in persistence feature, -bufferlo's persistence is lightweight. ~desktop.el~ is an -all-or-nothing solution saving your entire Emacs environment for -future recall. When you have a long-lived Emacs session that may -include hundreds of buffers that may not relate to one another or are -not relevant to your current tasks, ~desktop.el~ is cumbersome and -slow restoring an entire session when you may need only a subset. -Bufferlo gives you finer-grained control over what collections of -frames and tabs to save and load. - -Similar to ~desktop.el~, bufferlo supports storing "framesets" using -bufferlo bookmark sets. When a bookmark set is restored, bufferlo -attempts to recreate your frames with their geometries, and their -frame and tab bookmarks. +The built-in ~desktop.el~ package provides the possibility to persist +the state of the current Emacs session for future recall. Bufferlo is +fully compatible with ~desktop.el~. Bufferlo's local buffer lists for +frames/tabs are saved and restored by ~desktop.el~. + +With its bookmark feature, bufferlo offers an alternative session +persistence solution. In contrast to ~desktop.el~'s all-or-nothing +solution, bufferlo's ability to bookmark tabs, frames, and sets are +more fine-grained and lightweight. They are particularly suited for +long-lived Emacs sessions with a large number of buffers that belong +to different contexts. Unlike ~desktop.el~, bufferlo does not persist each buffer's enabled major or minor modes, instead relying on your Emacs configuration to @@ -1258,48 +1229,42 @@ treesitter behaviors. This minor mode will not be reenabled by bufferlo. If you want this behavior automatically, add ~treesit-explore-mode~ to your major-mode hook. -** 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 -tabs. - -You may also have a look at workspace-oriented solutions like [[https://github.com/alphapapa/bufler.el][bufler]] -(rule-based workspace management and buffer grouping) and its related -package [[https://github.com/alphapapa/activities.el][activities.el]] (purpose-based session management on frame/tab -level), [[https://github.com/minad/bookmark-view][bookmark-view]], or [[https://github.com/nex3/perspective-el][perspective]] (comprehensive workspace -isolation and persistence). - -- https://github.com/iqbalansari/restart-emacs/blob/master/restart-emacs.el -- https://github.com/alphapapa/bufler.el -- https://github.com/alphapapa/activities.el -- https://github.com/alphapapa/burly.el -- https://github.com/alphapapa/frame-purpose.el -- https://github.com/overideal/perject -- https://github.com/nex3/perspective-el -- https://github.com/Bad-ptr/persp-mode.el -- https://github.com/protesilaos/beframe -- https://github.com/jamescherti/easysession.el -- https://github.com/minad/bookmark-view -- https://github.com/minad/tab-bookmark -- https://github.com/ajrosen/tab-bar-buffers -- https://github.com/localauthor/tab-sets -- https://github.com/mclear-tools/tabspaces -- https://github.com/chumpage/chumpy-windows -- https://github.com/thisirs/state -- https://emacs-session.sourceforge.net -- https://github.com/vspinu/sesman -- https://codeberg.org/akib/emacs-workroom -- https://github.com/thierryvolpiatto/psession -- https://github.com/noctuid/framegroups.el -- https://github.com/petergardfjall/emacs-wsp -- https://github.com/vijumathew/windwow -- https://github.com/alpaker/frame-bufs -- https://github.com/jdtsmith/mac-tab-desktop/blob/main/mac-tab-desktop.el -- https://github.com/ffevotte/desktop-plus/blob/master/desktop%2B.el -- https://www.emacswiki.org/emacs/BookmarkPlus -- https://github.com/emacsmirror/bookmark-plus -- https://github.com/tlh/workgroups.el -- https://github.com/emacsmirror/winring +Bufferlo bookmarks are still compatible with ~desktop.el~. It is even +possible to use both features together. + +** Similar packages + +There are other Emacs packages that provide functionality with varying +degrees of similarity to bufferlo. These packages offer some form of +frame or tab-based buffer-list isolation and/or session management. + +- [[https://github.com/protesilaos/beframe][Beframe]]: frame-based buffer isolation +- [[https://github.com/mclear-tools/tabspaces][Tabspaces]]: project-based buffer isolation for tabs and frames +- [[https://github.com/alphapapa/activities.el][activities.el]]: purpose-based sessions on frame/tab level +- [[https://github.com/alphapapa/bufler.el][Bufler]]: rule-based workspace management and buffer grouping +- [[https://github.com/alphapapa/burly.el][Burly]]: save and restore window configurations for single or multiple frames +- [[https://github.com/alphapapa/frame-purpose.el][frame-purpose]]: specialize frames to only display certain buffers +- [[https://github.com/overideal/perject][perject]]: purpose/project-based buffer isolation and session management based + on ~desktop.el~ +- [[https://github.com/nex3/perspective-el][Perspective]]: frame-based workspace isolation and persistence +- [[https://github.com/Bad-ptr/persp-mode.el][persp-mode]]: based on perspective; allows multiple frames per workspace +- [[https://github.com/jamescherti/easysession.el][easysession.el]]: session management +- [[https://github.com/minad/bookmark-view][bookmark-view.el]]: save and restore window configurations +- [[https://github.com/minad/tab-bookmark][tab-bookmark.el]]: save and restore window configurations for tabs +- [[https://github.com/ajrosen/tab-bar-buffers][tab-bar-buffers]]: isolate selected buffers and show them in the tab bar +- [[https://github.com/localauthor/tab-sets][tab-sets.el]]: save and restore tabs +- [[https://codeberg.org/akib/emacs-workroom][Workroom]]: buffer isolation +- [[https://github.com/thierryvolpiatto/psession][psession]]: session management +- [[https://github.com/chumpage/chumpy-windows][Chumpy-windows (Spaces)]]: switch between named window configurations +- [[https://github.com/thisirs/state][state]]: switch between window configurations +- [[https://emacs-session.sourceforge.net][Emacs-session]]: session management +- [[https://github.com/vspinu/sesman][Sesman]]: session management +- [[https://github.com/petergardfjall/emacs-wsp][wsp]]: session management +- [[https://github.com/vijumathew/windwow][Windwow]]: session management +- [[https://github.com/alpaker/frame-bufs][frame-bufs]]: frame-based buffer isolation +- [[https://github.com/ffevotte/desktop-plus/blob/master/desktop%2B.el][desktop+.el]]: extended ~desktop.el~ session management +- [[https://github.com/tlh/workgroups.el][Workgroups]]: session management +- [[https://github.com/iqbalansari/restart-emacs][restart-emacs]]: reatart Emacs; can restore session via ~desktop.el~ +- [[https://github.com/noctuid/framegroups.el][framegroups.el]]: session management via ~desktop.el~ # END