M-x package-install rings
The problem with C-x b is that most buffers don’t matter and you need to spend some attention to filter them out.
Keeping things in different tabs isn’t also an ergonomic solution, because you’ll need a different set of tabs for each activity you do inside Emacs, like editing code, editing server stuff, chatting on IRC, etc.
I used to solve this problem by having different virtual desktops for different activities, but this doesn’t work so smoothly on MacOS, so I created this package to provide a similar workflow.
Here’s what I have in my init.el:
(global-set-key (kbd "<f2>") (rings-generate-cycler 2))
(global-set-key (kbd "C-<f2>") (rings-generate-setter 2))
(global-set-key (kbd "<f3>") (rings-generate-cycler 3))
(global-set-key (kbd "C-<f3>") (rings-generate-setter 3))
(global-set-key (kbd "<f4>") (rings-generate-cycler 4))
(global-set-key (kbd "C-<f4>") (rings-generate-setter 4))
Suppose you want to chat at Freenode’s awesome ##latin channel and at the same time not be too far from the latin dictionary provided by SaaXy. With the keybindings above, you can add both buffers to a ring by pressing C-<f2> inside each of them. Now, to cycle between them, just press <F2>
More common is having to edit multiple objects, each of which has a model and a view. You could add Object A’s buffers to a ring, Object B’s to another ring, all views to a third ring and all models to a fourth. Your imagination is the only limit!
You can also ignore this ring thing and use the package just for bookmarks. This is useful when you are editing many files from a directory, and need a way to quickly return to it. I often use it with dired, adding a key directory to the <f4> ring, to make it available in a single keystroke.