Add buffer name autocomplete to cape
I use cape.el to manage specific completion-at-point functions. The most used ones for me are {C-c t f} - complete file name and {C-c t s} - complete Elisp symbol.
After starting using ghostel with Claude Code being able to complete the buffer name became more desirable than ever, so I can quickly drop into notes things like this:
- (vux-ghostel-buffer "cape-buffer")
Asked Claude, it wrote "cape-buffer-name" function, bound to {C-c t b}. Works!
(defun cape-buffer-name ()
"Completion-at-point function for open buffer names."
(let ((bounds (or (bounds-of-thing-at-point 'symbol)
(cons (point) (point)))))
(list (car bounds) (cdr bounds)
(completion-table-dynamic
(lambda (_) (mapcar #'buffer-name (buffer-list))))
:exclusive 'no
:annotation-function (lambda (_) " Buffer"))))
(use-package cape
:after (tempo)
:config
(setq cape-elisp-symbol-wrapper '())
(setq cape-keymap (make-sparse-keymap))
(let ((map cape-keymap))
(keymap-set map "<tab>" #'completion-at-point)
(keymap-set map "b" (lambda () (interactive)
(cape-interactive #'cape-buffer-name)))
;; (keymap-set map "t" #'complete-tag)
(keymap-set map "t" #'tempo-complete-tag)
(keymap-set map "d" #'cape-dabbrev)
(keymap-set map "f" #'cape-file) ;; using often
(keymap-set map "k" #'cape-keyword)
(keymap-set map "s" #'cape-elisp-symbol) ;; using often
(keymap-set map "a" #'cape-abbrev)
(keymap-set map "l" #'cape-line)
(keymap-set map "w" #'cape-dict)
(keymap-set map "_" #'cape-tex)
;; (keymap-set map "&" #'cape-sgml)
;; (keymap-set map "r" #'cape-rfc1345)
t)
(keymap-global-set "C-c t" cape-keymap))
Screenshot: