From 6511ef9860b86536b3c19daa94799130bd51f5f9 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Sat, 9 May 2026 18:00:12 +0700 Subject: [PATCH] emacs: centaur-tabs, fix some gptel stuff --- .config/emacs/init.org | 92 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 2 deletions(-) diff --git a/.config/emacs/init.org b/.config/emacs/init.org index 6f921ff..fad5cb4 100644 --- a/.config/emacs/init.org +++ b/.config/emacs/init.org @@ -1071,6 +1071,78 @@ Harpoon lets you quickly switch between bookmarked buffers #+end_src +*** Centaur Tabs +#+begin_src emacs-lisp +;; (require 'centaur-tabs) +(setq centaur-tabs-set-bar 'under) +(setq x-underline-at-descent-line t) +(setq centaur-tabs-set-close-button nil) +(setq centaur-tabs-set-icons t) +(setq centaur-tabs-show-navigation-buttons nil) +(setq centaur-tabs-set-modified-marker nil) +(setq centaur-tabs-show-new-tab-button nil) +(setq centaur-tabs-label-fixed-length 0) + +(setq centaur-tabs-label-rename-function + (lambda (buf) (if (> (length (buffer-name buf)) 20) + (concat (substring (buffer-name buf) 0 17) "...") + (buffer-name buf)))) + +(global-set-key (kbd "s-n") #'centaur-tabs-forward-tab) +(global-set-key (kbd "s-p") #'centaur-tabs-backward-tab) +(global-set-key (kbd "C-s-p") #'centaur-tabs-forward-group) +(global-set-key (kbd "C-s-n") #'centaur-tabs-backward-group) +(global-set-key (kbd "s-P") #'centaur-tabs-move-current-tab-to-left) +(global-set-key (kbd "s-N") #'centaur-tabs-move-current-tab-to-right) + +(let ((modes '(magit-status-mode + dired-mode + mu4e-main-mode + mu4e-headers-mode + mu4e-view-mode))) + (dolist (mode modes) + (add-hook (intern (concat (symbol-name mode) "-hook")) + (lambda () (centaur-tabs-local-mode -1))))) + +(with-eval-after-load 'centaur-tabs + (defun joe/fix-centaur-tabs (THEME) + (centaur-tabs-mode -1) + (centaur-tabs-mode)) + + (advice-add 'consult-theme :after #'joe/fix-centaur-tabs) + (defun centaur-tabs-buffer-groups () + (list + (cond + ;; Work buffers: REPLs, Claude, Chat, eww, cider-repl + ((or (derived-mode-p 'comint-mode) + (derived-mode-p 'sql-interactive-mode) + (derived-mode-p 'compilation-mode) + (derived-mode-p 'compilation-mode) + (string-match "^\\*HTTP" (buffer-name)) + (string-match "^\\*cider-repl" (buffer-name)) + (bound-and-true-p gptel-mode) + (derived-mode-p 'eww-mode)) + "Work") + ;; Special *buffers* (scratch, Messages, etc.) + ((and (string-equal "*" (substring (buffer-name) 0 1)) + (not (string-match "^\\*Org Src" (buffer-name)))) + "*Buffers*") + ;; Everything else in one group + (t + "Emacs"))))) + +(global-set-key (kbd "M-1") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-2") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-3") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-4") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-5") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-6") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-7") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-8") 'centaur-tabs-select-visible-tab) +(global-set-key (kbd "M-9") 'centaur-tabs-select-visible-tab) + +(centaur-tabs-mode +1) +#+end_src *** Window Management #+begin_src emacs-lisp @@ -2114,6 +2186,9 @@ start it, so go through all existing buffers that match the mode and belong to t (gptel-make-anthropic "Claude" :stream t :key (with-temp-buffer (insert-file-contents (expand-file-name "gptel-key" user-emacs-directory)) (buffer-string))) +(gptel-make-openai "ChatGPT" :stream t :key (with-temp-buffer + (insert-file-contents (expand-file-name "gptel-gpt-key" user-emacs-directory)) + (buffer-string))) (setq gptel-model 'claude-sonnet-4-6) (setq gptel-backend (gptel-get-backend "Claude")) @@ -2121,17 +2196,30 @@ start it, so go through all existing buffers that match the mode and belong to t (setq gptel-prompt-prefix-alist '((markdown-mode . "### ") (org-mode . "* ") (text-mode . "### "))) +(setq gptel-cache '(system message)) +;; (setq gptel-log-level 'debug) (define-prefix-command 'joe/gptel-map) (global-set-key (kbd "C-c a") 'joe/gptel-map) (define-key joe/gptel-map (kbd "a") #'gptel) -(define-key joe/gptel-map (kbd "RET") #'gptel-ask) +;; (define-key joe/gptel-map (kbd "RET") #'gptel-ask) (define-key joe/gptel-map (kbd "m") #'gptel-mode) -(define-key joe/gptel-map (kbd "c") #'gptel-add) +(define-key joe/gptel-map (kbd "RET") #'gptel-add) (define-key joe/gptel-map (kbd "q") #'gptel-abort) (define-key joe/gptel-map (kbd "") #'joe/gptel-context-remove-all) (define-key joe/gptel-map (kbd "r") #'gptel-rewrite) + +(defun gptel-mark-region-role (start end role) + "Mark region from START to END with the llm or user role." + (interactive (list (region-beginning) (region-end) + (completing-read "Mark region role as: " '(response prompt)))) + (if (or (not transient-mark-mode) + (use-region-p)) + (with-silent-modifications + (put-text-property start end 'gptel (and (equal role "response") 'response)) + (message "Region marked as %s" role)) + (message "No region specified, action canceled"))) #+end_src gptel-context-remove-all without confirmation