{"id":19031485,"url":"https://github.com/plandes/buffer-manage","last_synced_at":"2025-04-23T16:40:23.369Z","repository":{"id":80107457,"uuid":"77469619","full_name":"plandes/buffer-manage","owner":"plandes","description":"Provides support to manage Emacs buffers of any kind.","archived":false,"fork":false,"pushed_at":"2025-01-24T00:13:20.000Z","size":280,"stargazers_count":10,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-18T01:47:59.223Z","etag":null,"topics":["buffer","emacs","multiplexing"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/plandes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-12-27T16:46:36.000Z","updated_at":"2025-01-24T00:13:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"999c1c48-3164-4780-a8c7-4636980019df","html_url":"https://github.com/plandes/buffer-manage","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plandes%2Fbuffer-manage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plandes%2Fbuffer-manage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plandes%2Fbuffer-manage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/plandes%2Fbuffer-manage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/plandes","download_url":"https://codeload.github.com/plandes/buffer-manage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250471794,"owners_count":21436024,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buffer","emacs","multiplexing"],"created_at":"2024-11-08T21:23:47.779Z","updated_at":"2025-04-23T16:40:23.332Z","avatar_url":"https://github.com/plandes.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Manager Emacs Buffers\n\n[![MELPA badge][melpa-badge]][melpa-link]\n[![MELPA stable badge][melpa-stable-badge]][melpa-stable-link]\n[![Build Status][build-badge]][build-link]\n\nProvides support to multiple managed buffers of any kind.  This is helpful for\nusing multiple inferior shells, multiple SQL session buffers or any other piped\nprocess that requires multiple buffers.\n\nThe library includes support for:\n* A major mode and buffer for listing, switching, and organizing multiple Emacs\n  buffers.\n* Fast switching with customized key bindings through the customize framework.\n* Switch between managers providing the same key bindings for buffer entries\n  with the same key bindings for creation, switching and managing.\n* Create your own trivial implementations in minimal set of Emacs Lisp code.\n* Interact with buffer entries and manager as objects with a straight forward\n  API.\n\n\u003c!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc --\u003e\n## Table of Contents\n\n- [Usage](#usage)\n- [Extending Packages](#extending-packages)\n- [Entries Mode](#entries-mode)\n    - [Key Bindings](#key-bindings)\n- [Fast Switching](#fast-switching)\n- [Key Bindings](#key-bindings-1)\n- [Extending Libraries](#extending-libraries)\n- [Implementations](#implementations)\n- [Changelog](#changelog)\n- [License](#license)\n\n\u003c!-- markdown-toc end --\u003e\n\n\n## Usage\n\nThis isn't useful by itself, you need to extend but subclassing eieio (Emacs\nLisp) objects.  See the [buffer shell] project for an example.  This is done by\nextending Emacs `eieio` objects and can be done in ~90 lines of code (example:\n[buffer shell]).\n\nTo create your own managed buffer set you must extend `buffer-entry` that\ndefines behavior for each created managed buffer.  You must also extend the\nmanager itself `buffer-manager`.\n\n\n## Extending Packages\n\nThis library on its own isn't useful.  It provides a lot of behavior for\npackages that extend it (called *extensions*).  An example of an extension is\nthe [buffer shell] library and the iSQL library (to be made public soon).\n\nWhen extending a package the `buffer-manage` library generates several\nfunctions and creates keybindings to those functions as described in the\n[entries mode] and [key bindings] sections.  For this documentation\ncommands/functions that are created are notated as `\u003cpackage name\u003e-\u003crest of\nfunction name\u003e`.  For example, to create a new shell with the `bshell` package,\nyou'd use `M-x bshell-new`.\n\n\n## Entries Mode\n\nAny package that extends `buffer-manage` and registered is put in a list and\ncan be switched with `C-x C-;` (see [key bindings]) or `M-x\nbuffer-manager-bind-functions`.  After you've chosen a buffer manage extension\nyou can then manage those buffers by with `C-tab` or `M-x \u003cpackage name\u003e-list`.\nThis mode provides a list of live buffers and (optionally) their working\ndirectory.\n\n\n### Key Bindings\n\nThe [entries mode] buffer allows for mouse editing and also the following keys:\n\n|              Key | Function                           | Description                                                         |\n|-----------------:|------------------------------------|---------------------------------------------------------------------|\n|              `d` | config-manage-mode-mark-delete     | Delete a buffer (terminate).                                        |\n|              `G` | config-manage-mode-refresh         | Refresh the buffer entry listing buffer.                            |\n|              `i` | config-manage-mode-new             | Create a new entry.                                                 |\n|              `n` | config-manage-mode-next            | Called by pressing the `tab` key in `config-manage-mode`.           |\n|              `p` | config-manage-mode-previous        | Called by pressing the `tab` key in `config-manage-mode`.           |\n|              `q` | config-manage-mode-quit            | Quit from within the `config-manage-mode`.                          |\n|              `r` | config-manage-mode-rename          | Rename a buffer to NEW-NAME.                                        |\n|              `s` | config-manage-mode-mark-show       | Display (show) a buffer.                                            |\n|              `u` | config-manage-mode-mark-undelete   | Unmark a buffer for deletion.                                       |\n|              `v` | config-manage-mode-view            | Activates the buffer entry with name NAME.                          |\n|              `x` | config-manage-mode-delete-selected | Delete all entries that are selected for delete.                    |\n|              `e` | config-manage-mode-edit            | Edit (configure) the entry (meaningful to [flexible configuration]) |\n|              `?` | config-manage-mode-info            | Get information on the configuration entry.                         |\n|       `\u003cC-down\u003e` | config-manage-mode-next            | Called by pressing the `tab` key in `config-manage-mode`.           |\n|         `\u003cC-up\u003e` | config-manage-mode-previous        | Called by pressing the `tab` key in `config-manage-mode`.           |\n| `\u003cdown-mouse-2\u003e` | config-manage-mode-mouse-down      | Call back for mouse down events.                                    |\n|      `\u003cmouse-2\u003e` | config-manage-mode-mouse-up        | Call back for mouse down events.                                    |\n|       `\u003creturn\u003e` | config-manage-mode-activate-buffer | Activates the buffer entry with name NAME.                          |\n\n\n## Fast Switching\n\nTo easily and quickly switch between modes, you can use `C-x C-h` or `M-x\n\u003cpackage name\u003e-switch`.  Using this command when there are no buffer entries\ncreates one.  Switching by buffer entry name completion is invoked by adding\nthe universal command (`C-u C-x C-h`) on invocation.  Currently, there are two\nways to cycle through buffers:\n* *last-visit*: go to the last visited buffer entry\n* *next*: go to the next highest priority buffer entry\n\nTo alternate between these cycling modes use `C-x C-'` or `M-x \u003cpackage\nname\u003e-toggle-cycle-method`.\n\n**Important:** To get the fast switching or any keybinding support (not\nincluding the the [entries mode] buffer).\n\n\n## Key Bindings\n\nThe customize system persists the key bindings for all buffer managers.  You\ncan view or modify the buffer management functions with: `M-x\ncustomize-variable buffer-manage-key-bindings`.  You'll see other registered\nbuffer manager extensions in for this customized variable.\n\n\n## Extending Libraries\n\nExtend `buffer-manage.el` if you need to manage many separate buffers.\nHowever, if you need just a simple persistence or configuration management\n(without buffer management support) you can `require` the `config-manage.el`\nlibrary instead.  See for [frame customize] project as an example of how to\nextend the *configuration manager*.\n\n\n## Implementations\n\nImplementations that use this library include (please let me know of your own):\n\n* The [flexible configuration] library config-manage-mode-info.\n* Multiple [buffer shell] library.\n* The Emacs SQL [ciSQL](https://github.com/plandes/cisql) library.\n\n\n## Changelog\n\nAn extensive changelog is available [here](CHANGELOG.md).\n\n\n## License\n\nCopyright © 2017 - 2020 Paul Landes\n\nGNU Lesser General Public License, Version 2.0\n\n\n\u003c!-- links --\u003e\n\n[entries mode]: #entries-mode\n[buffer shell]: https://github.com/plandes/bshell\n[key bindings]: #key-bindings\n[frame customize]: https://github.com/plandes/frame-customize\n[flexible configuration]: https://github.com/plandes/flex-compile\n\n[melpa-link]: https://melpa.org/#/buffer-manage\n[melpa-stable-link]: https://stable.melpa.org/#/buffer-manage\n[melpa-badge]: https://melpa.org/packages/buffer-manage-badge.svg\n[melpa-stable-badge]: https://stable.melpa.org/packages/buffer-manage-badge.svg\n[build-badge]: https://github.com/plandes/buffer-manage/workflows/CI/badge.svg\n[build-link]: https://github.com/plandes/buffer-manage/actions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplandes%2Fbuffer-manage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplandes%2Fbuffer-manage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplandes%2Fbuffer-manage/lists"}