2019-08-10 14:14:51 -04:00
|
|
|
;;; ui/tabs/autoload.el -*- lexical-binding: t; -*-
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-buffer-predicate (buffer)
|
2019-07-12 17:40:35 +02:00
|
|
|
"TODO"
|
2019-08-15 15:53:47 -04:00
|
|
|
(or (memq buffer (window-parameter nil 'tab-buffers))
|
2019-07-12 17:40:35 +02:00
|
|
|
(eq buffer (doom-fallback-buffer))))
|
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-window-tab-list ()
|
|
|
|
(+tabs-window-buffer-list-fn))
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-window-buffer-list-fn ()
|
2019-08-15 15:53:47 -04:00
|
|
|
(cl-delete-if-not #'buffer-live-p (window-parameter nil 'tab-buffers)))
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-buffer-groups-fn ()
|
2019-07-12 17:40:35 +02:00
|
|
|
(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))))))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Commands
|
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-15 15:53:47 -04:00
|
|
|
(defun +tabs/close-tab-or-window ()
|
2019-07-12 17:40:35 +02:00
|
|
|
"TODO"
|
|
|
|
(interactive)
|
|
|
|
(call-interactively
|
2019-08-15 15:53:47 -04:00
|
|
|
(cond ((cdr (window-parameter nil 'tab-buffers))
|
2019-07-12 17:40:35 +02:00
|
|
|
#'kill-current-buffer)
|
|
|
|
((fboundp '+workspace/close-window-or-workspace)
|
|
|
|
#'+workspace/close-window-or-workspace)
|
|
|
|
(#'delete-window))))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Advice
|
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-kill-current-buffer-a (&rest _)
|
2019-08-15 15:53:47 -04:00
|
|
|
(+tabs|remove-buffer))
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-bury-buffer-a (orig-fn &rest args)
|
2019-07-12 17:40:35 +02:00
|
|
|
(if centaur-tabs-mode
|
|
|
|
(let ((b (current-buffer)))
|
|
|
|
(apply orig-fn args)
|
|
|
|
(unless (eq b (current-buffer))
|
|
|
|
(with-current-buffer b
|
2019-08-15 15:53:47 -04:00
|
|
|
(+tabs|remove-buffer))))
|
2019-07-12 17:40:35 +02:00
|
|
|
(apply orig-fn args)))
|
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-kill-tab-maybe-a (tab)
|
2019-07-12 17:40:35 +02:00
|
|
|
(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
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-add-buffer-h ()
|
2019-07-12 17:40:35 +02:00
|
|
|
(when (and centaur-tabs-mode
|
|
|
|
(doom-real-buffer-p (current-buffer)))
|
|
|
|
(let* ((this-buf (current-buffer))
|
2019-08-15 15:53:47 -04:00
|
|
|
(buffers (window-parameter nil 'tab-buffers)))
|
2019-07-12 17:40:35 +02:00
|
|
|
(cl-pushnew this-buf buffers)
|
2019-08-15 15:53:47 -04:00
|
|
|
(add-hook 'kill-buffer-hook #'+tabs|remove-buffer nil t)
|
|
|
|
(set-window-parameter nil 'tab-buffers buffers))))
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-15 15:53:47 -04:00
|
|
|
(defun +tabs|remove-buffer ()
|
2019-07-12 17:40:35 +02:00
|
|
|
(when centaur-tabs-mode
|
|
|
|
(set-window-parameter
|
|
|
|
nil
|
2019-08-15 15:53:47 -04:00
|
|
|
'tab-buffers (delete (current-buffer)
|
|
|
|
(window-parameter nil 'tab-buffers)))))
|
2019-07-12 17:40:35 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-08-10 14:14:51 -04:00
|
|
|
(defun +tabs-new-window-h ()
|
2019-07-12 17:40:35 +02:00
|
|
|
(when centaur-tabs-mode
|
2019-08-15 15:53:47 -04:00
|
|
|
(unless (window-parameter nil 'tab-buffers)
|
2019-08-10 14:14:51 -04:00
|
|
|
(+tabs-add-buffer-h))))
|