diff --git a/core/core-modules.el b/core/core-modules.el index 13b747d26..22196b693 100644 --- a/core/core-modules.el +++ b/core/core-modules.el @@ -31,7 +31,8 @@ (term (:term term))) (:ui (doom-modeline (:ui modeline)) (fci (:ui fill-column)) - (evil-goggles (:ui ophints))) + (evil-goggles (:ui ophints)) + (tabbar (:ui tabs))) (:app (email (:email mu4e)) (notmuch (:email notmuch)))) "A tree alist that maps deprecated modules to their replacement(s). diff --git a/init.example.el b/init.example.el index be9846e62..ed527734f 100644 --- a/init.example.el +++ b/init.example.el @@ -35,7 +35,7 @@ +all ; catch all popups that start with an asterix +defaults) ; default popup rules ;;pretty-code ; replace bits of code with pretty symbols - ;;tabbar ; FIXME an (incomplete) tab bar for Emacs + ;;tabs ; an tab bar for Emacs ;;treemacs ; a project drawer, like neotree but cooler ;;unicode ; extended unicode support for various languages vc-gutter ; vcs diff in the fringe diff --git a/modules/README.org b/modules/README.org index 9734afbf5..808637261 100644 --- a/modules/README.org +++ b/modules/README.org @@ -38,7 +38,7 @@ Aesthetic modules that affect the Emacs interface or user experience. + [[file:ui/ophints/README.org][ophints]]: + [[file:ui/popup/README.org][popup]] =+all +defaults=: Makes temporary/disposable windows less intrusive + pretty-code: -+ [[file:ui/tabbar/README.org][tabbar]]: ++ [[file:ui/tabs/README.org][tabs]]: + treemacs: + [[file:ui/unicode/README.org][unicode]]: + vc-gutter: diff --git a/modules/ui/tabbar/README.org b/modules/ui/tabbar/README.org deleted file mode 100644 index 05e631886..000000000 --- a/modules/ui/tabbar/README.org +++ /dev/null @@ -1,7 +0,0 @@ -#+TITLE: :ui tabbar - -This module adds an Atom-esque tab bar to the Emacs UI. - -I don't recommend you use this module. It is here for reference, is unstable and -may be removed some day. I find ivy, helm or even ~buffer-menu~ to be better -suited for buffer management. diff --git a/modules/ui/tabbar/config.el b/modules/ui/tabbar/config.el deleted file mode 100644 index addcac3e5..000000000 --- a/modules/ui/tabbar/config.el +++ /dev/null @@ -1,40 +0,0 @@ -;;; ui/tabbar/config.el -*- lexical-binding: t; -*- - -(use-package! centaur-tabs - :after-call (after-find-file dired-initial-position-hook) - :init - (setq centaur-tabs-height 28 - centaur-tabs-set-bar 'left - centaur-tabs-set-modified-marker t) - - :config - (add-hook! 'centaur-tabs-mode-hook - (defun +tabbar-init-frames-h () - (dolist (frame (frame-list)) - (if (not centaur-tabs-mode) - (set-frame-parameter frame 'buffer-predicate (frame-parameter frame 'old-buffer-predicate)) - (set-frame-parameter frame 'old-buffer-predicate (frame-parameter frame 'buffer-predicate)) - (set-frame-parameter frame 'buffer-predicate #'+tabbar-buffer-predicate))))) - - (add-to-list 'window-persistent-parameters '(tabbar-buffers . writable)) - - (setq centaur-tabs-buffer-list-function #'+tabbar-window-buffer-list-fn - centaur-tabs-buffer-groups-function #'+tabbar-buffer-groups-fn) - - (advice-add #'centaur-tabs-buffer-close-tab :override #'+tabbar-kill-tab-maybe-a) - (advice-add #'bury-buffer :around #'+tabbar-bury-buffer-a) - (advice-add #'kill-current-buffer :before #'+tabbar-kill-current-buffer-a) - (add-hook 'doom-switch-buffer-hook #'+tabbar-add-buffer-h) - (add-hook 'doom-switch-window-hook #'+tabbar-new-window-h) - - (add-hook '+doom-dashboard-mode-hook #'centaur-tabs-local-mode) - - (map! (:map centaur-tabs-mode-map - [remap delete-window] #'+tabbar/close-tab-or-window - [remap +workspace/close-window-or-workspace] #'+tabbar/close-tab-or-window) - (:after persp-mode - :map persp-mode-map - [remap delete-window] #'+tabbar/close-tab-or-window - [remap +workspace/close-window-or-workspace] #'+tabbar/close-tab-or-window)) - - (centaur-tabs-mode +1)) diff --git a/modules/ui/tabs/README.org b/modules/ui/tabs/README.org new file mode 100644 index 000000000..7d4cb95f6 --- /dev/null +++ b/modules/ui/tabs/README.org @@ -0,0 +1,18 @@ +#+TITLE: ui/tabs +#+DATE: July 12, 2019 +#+SINCE: v2.1 +#+STARTUP: inlineimages + +* Table of Contents :TOC_3:noexport: +- [[#description][Description]] + - [[#module-flags][Module Flags]] + - [[#plugins][Plugins]] + +* Description +This module adds an Atom-esque tab bar to the Emacs UI. + +** Module Flags +This module provides no flags. + +** Plugins ++ [[https://github.com/ema2159/centaur-tabs][centaur-tabs]] diff --git a/modules/ui/tabbar/autoload.el b/modules/ui/tabs/autoload.el similarity index 84% rename from modules/ui/tabbar/autoload.el rename to modules/ui/tabs/autoload.el index 5d4e01e1b..3ad002a91 100644 --- a/modules/ui/tabbar/autoload.el +++ b/modules/ui/tabs/autoload.el @@ -1,21 +1,21 @@ -;;; ui/tabbar/autoload.el -*- lexical-binding: t; -*- +;;; ui/tabs/autoload.el -*- lexical-binding: t; -*- ;;;###autoload -(defun +tabbar-buffer-predicate (buffer) +(defun +tabs-buffer-predicate (buffer) "TODO" (or (memq buffer (window-parameter nil 'tabbar-buffers)) (eq buffer (doom-fallback-buffer)))) ;;;###autoload -(defun +tabbar-window-tab-list () - (+tabbar-window-buffer-list-fn)) +(defun +tabs-window-tab-list () + (+tabs-window-buffer-list-fn)) ;;;###autoload -(defun +tabbar-window-buffer-list-fn () +(defun +tabs-window-buffer-list-fn () (cl-delete-if-not #'buffer-live-p (window-parameter nil 'tabbar-buffers))) ;;;###autoload -(defun +tabbar-buffer-groups-fn () +(defun +tabs-buffer-groups-fn () (list (cond ((or (string-equal "*" (substring (buffer-name) 0 1)) (memq major-mode '(magit-process-mode @@ -53,11 +53,11 @@ ;;; Advice ;;;###autoload -(defun +tabbar-kill-current-buffer-a (&rest _) +(defun +tabs-kill-current-buffer-a (&rest _) (+tabbar|remove-buffer)) ;;;###autoload -(defun +tabbar-bury-buffer-a (orig-fn &rest args) +(defun +tabs-bury-buffer-a (orig-fn &rest args) (if centaur-tabs-mode (let ((b (current-buffer))) (apply orig-fn args) @@ -67,7 +67,7 @@ (apply orig-fn args))) ;;;###autoload -(defun +tabbar-kill-tab-maybe-a (tab) +(defun +tabs-kill-tab-maybe-a (tab) (let ((buffer (centaur-tabs-tab-value tab))) (with-current-buffer buffer ;; `kill-current-buffer' is advised not to kill buffers visible in another @@ -80,7 +80,7 @@ ;;; Hooks ;;;###autoload -(defun +tabbar-add-buffer-h () +(defun +tabs-add-buffer-h () (when (and centaur-tabs-mode (doom-real-buffer-p (current-buffer))) (let* ((this-buf (current-buffer)) @@ -97,7 +97,7 @@ 'tabbar-buffers (delete (current-buffer) (window-parameter nil 'tabbar-buffers))))) ;;;###autoload -(defun +tabbar-new-window-h () +(defun +tabs-new-window-h () (when centaur-tabs-mode (unless (window-parameter nil 'tabbar-buffers) - (+tabbar-add-buffer-h)))) + (+tabs-add-buffer-h)))) diff --git a/modules/ui/tabs/config.el b/modules/ui/tabs/config.el new file mode 100644 index 000000000..2e160cf30 --- /dev/null +++ b/modules/ui/tabs/config.el @@ -0,0 +1,40 @@ +;;; ui/tabs/config.el -*- lexical-binding: t; -*- + +(use-package! centaur-tabs + :after-call (after-find-file dired-initial-position-hook) + :init + (setq centaur-tabs-height 28 + centaur-tabs-set-bar 'left + centaur-tabs-set-modified-marker t) + + :config + (add-hook! 'centaur-tabs-mode-hook + (defun +tabs-init-frames-h () + (dolist (frame (frame-list)) + (if (not centaur-tabs-mode) + (set-frame-parameter frame 'buffer-predicate (frame-parameter frame 'old-buffer-predicate)) + (set-frame-parameter frame 'old-buffer-predicate (frame-parameter frame 'buffer-predicate)) + (set-frame-parameter frame 'buffer-predicate #'+tabs-buffer-predicate))))) + + (add-to-list 'window-persistent-parameters '(tabbar-buffers . writable)) + + (setq centaur-tabs-buffer-list-function #'+tabs-window-buffer-list-fn + centaur-tabs-buffer-groups-function #'+tabs-buffer-groups-fn) + + (advice-add #'centaur-tabs-buffer-close-tab :override #'+tabs-kill-tab-maybe-a) + (advice-add #'bury-buffer :around #'+tabs-bury-buffer-a) + (advice-add #'kill-current-buffer :before #'+tabs-kill-current-buffer-a) + (add-hook 'doom-switch-buffer-hook #'+tabs-add-buffer-h) + (add-hook 'doom-switch-window-hook #'+tabs-new-window-h) + + (add-hook '+doom-dashboard-mode-hook #'centaur-tabs-local-mode) + + (map! (:map centaur-tabs-mode-map + [remap delete-window] #'+tabs/close-tab-or-window + [remap +workspace/close-window-or-workspace] #'+tabs/close-tab-or-window) + (:after persp-mode + :map persp-mode-map + [remap delete-window] #'+tabs/close-tab-or-window + [remap +workspace/close-window-or-workspace] #'+tabs/close-tab-or-window)) + + (centaur-tabs-mode +1)) diff --git a/modules/ui/tabbar/packages.el b/modules/ui/tabs/packages.el similarity index 68% rename from modules/ui/tabbar/packages.el rename to modules/ui/tabs/packages.el index 294f434f3..1bec6d791 100644 --- a/modules/ui/tabbar/packages.el +++ b/modules/ui/tabs/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- -;;; ui/tabbar/packages.el +;;; ui/tabs/packages.el (package! centaur-tabs)