【Emacs】centaur-tabs の設定

こんな感じ.

;; 'tab タブ切り替えの単位をグループ内の「バッファ」に限定
;; 'groups タブ切り替えの単位を「グループ」に限定
(setq centaur-tabs-cycle-scope 'tabs)

;; アイコン表示
(setq centaur-tabs-set-icons t)
(setq centaur-tabs-icon-type 'all-the-icons)

;; バッファ名の代わりにグループ表示する場合
;; (setq centaur-tabs--buffer-show-groups nil)
;; (centaur-tabs-toggle-groups)

;; t: 変更され未保存のバッファにマーカーを表示する
(setq centaur-tabs-set-modified-marker t)
(setq centaur-tabs-modified-marker "●")

;; 'over: 現在選択中のタブに上線を引く
(setq centaur-tabs-set-bar 'over)

;; キーバインド
(global-set-key (kbd "C-<tab>") 'centaur-tabs-forward)
(global-set-key (kbd "C-S-<iso-lefttab>") 'centaur-tabs-backward)
(global-set-key (kbd "C-z C-s") #'centaur-tabs-switch-group)

;; 特有の関数は centaur-tabs-mode を有効にしたあとで定義する
(centaur-tabs-mode t)

;; タブを非表示にしたいバッファ
(defun centaur-tabs-hide-tab (x)
  "Do no to show buffer X in tabs."
  (let ((name (format "%s" x)))
    (or
     ;; Current window is not dedicated window.
     (window-dedicated-p (selected-window))

     ;; Buffer name not match below blacklist.
     (string-prefix-p "*epc" name)
     (string-prefix-p "*lsp" name)
     (string-prefix-p "*Flycheck" name)
     (string-prefix-p "*tramp" name)
     (string-prefix-p " *Mini" name)
     (string-prefix-p "*help" name)
     (string-prefix-p " *temp" name)
     (string-prefix-p "*Help" name)
     (string-prefix-p "*Compile-Log*" name)
     ;; (string-prefix-p "*scratch*" name)
     (string-prefix-p "*Messages*" name)
     (string-prefix-p "*Async-native-compile-log*" name)
     (string-prefix-p "*Native-compile-Log" name))))

(defun which-active-modes ()
  "Return which minor modes are enabled in the current buffer."
  (interactive)
  (let ((active-modes))
    (mapc (lambda (mode) (condition-case nil
                             (if (and (symbolp mode) (symbol-value mode))
                                 (add-to-list 'active-modes mode))
                           (error nil) ))
          minor-mode-list)
    active-modes))

;; バッファのメジャーモードに沿ってグループ化
(defun centaur-tabs-buffer-groups ()
  "`centaur-tabs-buffer-groups' control buffers' group rules."
  (list
   (cond
    ((derived-mode-p 'shell-mode) "Shell")
    ((derived-mode-p 'eshell-mode) "EShell")
    ((derived-mode-p 'emacs-lisp-mode) "Elisp")
    ((derived-mode-p 'dired-mode) "Dired")
    ((derived-mode-p 'python-ts-mode) "Python")
    ((derived-mode-p 'c-mode) "C-lang")
    ((derived-mode-p 'LaTeX-mode 'TeX-mode) "LaTeX")
    ((or (derived-mode-p 'howm-menu-mode)
         (memq 'howm-mode (which-active-modes))) "HOMW")
    ((derived-mode-p 'yaml-ts-mode 'conf-toml-mode) "Config")
    ((derived-mode-p 'org-mode 'org-agenda-mode 'diary-mode) "OrgMode")
    ((string-equal "*" (substring (buffer-name) 0 1)) "Emacs")
    (t
     (centaur-tabs-get-group-name (current-buffer))))))

;; タブを閉じるためのユーティリティ
(defun centaur-close-ace-jump (&optional arg)
  (interactive)
  (centaur-tabs-ace-action 'close-tab))