Moving to Doom Emacs!

This commit is contained in:
Derek Taylor
2019-12-16 20:21:19 -06:00
parent d9f2f456f1
commit d4b4c33550
683 changed files with 51877 additions and 100 deletions

View File

@@ -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]]

View File

@@ -0,0 +1,77 @@
;;; ui/tabs/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +tabs-buffer-predicate (buffer)
"TODO"
(or (memq buffer (window-parameter nil 'tab-buffers))
(eq buffer (doom-fallback-buffer))))
;;
;;; Commands
;;;###autoload
(defun +tabs/close-tab-or-window ()
"TODO"
(interactive)
(call-interactively
(cond ((cdr (window-parameter nil 'tab-buffers))
#'kill-current-buffer)
((fboundp '+workspace/close-window-or-workspace)
#'+workspace/close-window-or-workspace)
(#'delete-window))))
;;
;;; Advice
;;;###autoload
(defun +tabs-kill-current-buffer-a (&rest _)
(+tabs-remove-buffer-h))
;;;###autoload
(defun +tabs-bury-buffer-a (orig-fn &rest args)
(if centaur-tabs-mode
(let ((b (current-buffer)))
(apply orig-fn args)
(unless (eq b (current-buffer))
(with-current-buffer b
(+tabs-remove-buffer-h))))
(apply orig-fn args)))
;;;###autoload
(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
;; window, so it behaves better than `kill-buffer'.
(kill-current-buffer))
(centaur-tabs-display-update)))
;;
;;; Hooks
;;;###autoload
(defun +tabs-add-buffer-h ()
(when (and centaur-tabs-mode
(doom-real-buffer-p (current-buffer)))
(let* ((this-buf (current-buffer))
(buffers (window-parameter nil 'tab-buffers)))
(cl-pushnew this-buf buffers)
(add-hook 'kill-buffer-hook #'+tabs-remove-buffer-h nil t)
(set-window-parameter nil 'tab-buffers buffers))))
;;;###autoload
(defun +tabs-remove-buffer-h ()
(when centaur-tabs-mode
(set-window-parameter
nil
'tab-buffers (delete (current-buffer)
(window-parameter nil 'tab-buffers)))))
;;;###autoload
(defun +tabs-new-window-h ()
(when centaur-tabs-mode
(unless (window-parameter nil 'tab-buffers)
(+tabs-add-buffer-h))))

View File

@@ -0,0 +1,71 @@
;;; 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 '(tab-buffers . t))
(defun +tabs-window-buffer-list-fn ()
(centaur-tabs-filter-out
'centaur-tabs-hide-tab-cached
(delq nil
(cl-mapcar #'(lambda (b)
(cond
;; Always include the current buffer.
((eq (current-buffer) b) b)
((buffer-file-name b) b)
((char-equal ?\ (aref (buffer-name b) 0)) nil)
((buffer-live-p b) b)))
(window-parameter nil 'tab-buffers)))))
(defun +tabs-buffer-groups-fn ()
(list
(cond ((or (string-equal "*" (substring (buffer-name) 0 1))
(memq major-mode '(magit-process-mode
magit-status-mode
magit-diff-mode
magit-log-mode
magit-file-mode
magit-blob-mode
magit-blame-mode
)))
"Emacs")
((derived-mode-p 'eshell-mode)
"EShell")
((derived-mode-p 'dired-mode)
"Dired")
((centaur-tabs-get-group-name (current-buffer))))))
(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))

View File

@@ -0,0 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; ui/tabs/packages.el
(package! centaur-tabs)