Claude-skill-registry emacs-buffer
Use when manipulating Emacs buffers - provides elisp patterns for listing, switching, creating, killing, and working with buffer contents
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/emacs-buffer" ~/.claude/skills/majiayu000-claude-skill-registry-emacs-buffer && rm -rf "$T"
manifest:
skills/data/emacs-buffer/SKILL.mdsource content
Emacs Buffer Skill
Display Guidelines
E-ink Monitor Compatibility: User uses an e-ink monitor that only supports black, white, and grey.
- NEVER use colors (
,:foreground "red"
, etc.):foreground "cyan" - Use
,:weight bold
,:weight light
,:slant italic
for differentiation:underline t - Standard Emacs faces (font-lock-*-face) are acceptable as they adapt to themes
Buffer Basics
Get current buffer
(current-buffer) ; returns buffer object (buffer-name) ; returns buffer name string (buffer-file-name) ; returns file path or nil
Switch to buffer
(switch-to-buffer "buffer-name") (set-buffer "buffer-name") ; doesn't change window display (pop-to-buffer "buffer-name") ; shows in new window
Create buffer
(get-buffer-create "*my-buffer*") (with-current-buffer (get-buffer-create "*my-buffer*") ;; work in buffer )
Kill buffer
(kill-buffer "buffer-name") (kill-buffer (current-buffer))
Buffer Contents
Read buffer text
(buffer-string) ; entire buffer (buffer-substring start end) ; region (buffer-substring-no-properties start end) ; without text properties
Insert text
(insert "text") (insert-buffer-substring other-buffer start end)
Erase buffer
(erase-buffer) (delete-region start end)
Buffer Properties
Check buffer state
(buffer-modified-p) ; unsaved changes? (buffer-live-p buf) ; buffer exists? (get-buffer "name") ; returns buffer or nil
Set buffer properties
(set-buffer-modified-p nil) ; mark as saved (rename-buffer "new-name")
Buffer Lists
List all buffers
(buffer-list) ; all buffers (mapcar #'buffer-name (buffer-list)) ; just names
Filter buffers
;; Get file-visiting buffers (seq-filter #'buffer-file-name (buffer-list)) ;; Get buffers matching pattern (seq-filter (lambda (b) (string-match-p "\\*claude" (buffer-name b))) (buffer-list))
Working with Buffer Positions
Point operations
(point) ; current position (point-min) ; buffer start (point-max) ; buffer end (goto-char pos) ; move to position
Save and restore position
(save-excursion ;; point and buffer restored after body (goto-char (point-min)) (search-forward "text"))
Temporary Buffers
with-temp-buffer
(with-temp-buffer (insert "temporary content") (buffer-string)) ; returns content, buffer killed after
Generate new buffer
(generate-new-buffer "*unique-name*")
Buffer-Local Variables
Set buffer-local
(setq-local my-var "value") (make-local-variable 'my-var)
Check if buffer-local
(local-variable-p 'my-var) (buffer-local-value 'my-var some-buffer)
Common Patterns
Process buffer safely
(when-let ((buf (get-buffer "*my-buffer*"))) (with-current-buffer buf ;; work with buffer ))
Create output buffer
(let ((buf (get-buffer-create "*output*"))) (with-current-buffer buf (erase-buffer) (insert "Output:\n") (insert result)) (display-buffer buf))
Find buffer by mode
(seq-find (lambda (b) (with-current-buffer b (derived-mode-p 'org-mode))) (buffer-list))