Emacs: beframe version 1.6.0

beframe enables a frame-oriented Emacs workflow where each frame has access only to the list of buffers visited therein. In the interest of brevity, we call buffers that belong to frames “beframed”.

Below are the release notes


Version 1.6.0 on 2026-09-17

I rewrote large parts of beframe.el to make them more clear and/or to align them with the Elisp style I have developed over time. Those changes do not affect existing functionality.

That granted, I have made user-facing changes that refine this otherwise stable package.

beframe-rename-frame also renames the frame’s scratch buffer

beframe-mode makes a scratch buffer for each new frame that is created if the user option beframe-create-frame-scratch-buffer is set to t. Those buffers are named like:

*scratch for frame 'beframe'*

The commands beframe-rename-frame and beframe-rename-current-frame will now update the name of that buffer to reflect the new name of the frame.

Read the docstring of beframe-rename-frame for the technicalities.

Commands to kill beframed buffers

The command beframe-kill-frame-buffers deletes all buffers that belong to the given frame.

The command beframe-kill-frame-buffers-matching-regexp deletes all of a frame’s buffers that match the given regular expression.

Both commands are subject to the user option beframe-kill-buffers-no-confirm. When it is set to nil, the above commands ask for confirmation while also displaying a menu with the buffers to be deleted. When the user option is set to t, they kill the buffers outright.

Note though that Emacs may still prompt on a case-by-case basis, such as if the buffer is running a process.

Reorganised the beframe-transient

With the optional (require 'beframe-transient) the command beframe-transient becomes available. I have tweaked its layout to have one group of commands below the other. This makes it easier to read everything, regardless of font size. Plus, I do not need to make the code any more complex.

beframe-mode integrates with the undelete-frame command

The undelete-frame command restores a frame that was deleted. In the past, this would not restore the frame’s original beframed buffer list. Now beframe-mode takes care to store the buffer list of each frame in case undelete-frame is invoked.

Note that deleted buffers cannot be restored. This is merely a matter of associating live buffers with a frame (thus “beframing” them again exactly where they were).

beframe-read-buffer no longer ignores the predicate function

This concerns cases where read-buffer is using a predicate function. beframe-read-buffer takes over read-buffer when beframe-mode is enabled.

Thanks to Daniel Russo for the modification. This was done in pull request 18: https://github.com/protesilaos/beframe/pull/18. The change is small, meaning that Daniel does not need to assign copyright to the Free Software Foundation.