One of the most valuable packages I rely on everyday is counsel-projectile. Combining the power of counsel and Projectile, this great work from Eric Danan has been governing my project management in Emacs for quite a while.

One nifty feature of counsel-projectile is counsel-projectile-switch-to-buffer, bound to C-c p b, which lets you pick the buffer to switch to from the current project’s open buffers.

However, old habits never die. Years and years of Ctrl+TAB and Ctrl+Shift+TAB in my web browser window are hard to forget. And so enters Joost Kremers’ nswbuff.

(use-package nswbuff                    ; Quick switching between buffers
:ensure t
:bind* (("<C-tab>"           . nswbuff-switch-to-next-buffer)
("<C-S-iso-lefttab>" . nswbuff-switch-to-previous-buffer))
:config (setq nswbuff-buffer-list-function #'nswbuff-projectile-buffer-list
nswbuff-display-intermediate-buffers t
nswbuff-exclude-buffer-regexps '("^ .*" "^\\*.*\\*")))


I am loading it from a specific path, because at the time of this writing the package is not on MELPA.

The key setting here is the value of nswbuff-buffer-list-function. Using nswbuff-projectile-buffer-list activates nswbuff integration with Projectile, and so I can quickly move between my project buffers hitting the good ol’ Ctrl+TAB.