История изменений
Исправление Kostafey, (текущая версия) :
В паблике это лежит давно: https://github.com/kostafey/kostafeys-emacs-confik.
Но там искать нужно будет что к чему, лучше приведу тут с комментариями:
(require 'tabbar)
(tabbar-mode t)
; Их отключение сильно место экономит
;; Hide forward and back buttons
(customize-set-variable 'tabbar-scroll-right-button '(("") ""))
(customize-set-variable 'tabbar-scroll-left-button '(("") ""))
(customize-set-variable 'tabbar-buffer-home-button '(("") ""))
; Я думаю, тут комментарии излишни, единственное, что можно
; упомянуть, что порядок буферов в списке может не совпадать
; с порядком табов, а это очень удобно визуально переключаться
; между ближайшими видимыми буферами/табами
(if (require 'tabbar nil 'noerror)
(progn
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab))
(progn
(global-set-key (kbd "C-<next>") 'next-buffer)
(global-set-key (kbd "C-<prior>") 'previous-buffer)))
; Всякие спецбуферы типа *lsp-log* выводятся в отдельной
; группе табов (чтобы было меньше шума).
; Единственное исключение - буферы типа *temp-1*, *temp-2* и.д.,
; которые я использую для заметок.
(setq tabbar-buffer-groups-function
'(lambda ()
(list
(cond
((and (find (aref (buffer-name (current-buffer)) 0) " *")
(not (string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
"*")
(t "All Buffers")))))
; Фильтрация буферов для отображения в табах
(setq tabbar-buffer-list-function
'(lambda ()
(delq nil
(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)))
(-filter
(lambda (b) (or (eq (current-buffer) b)
(buffer-file-name b)
(string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
(buffer-list))))))
; Отключить табы для спецбуферов, если мы делим окно вертикально,
; сохранив при этом ключи для навигации по буферам
(defun k/select-window-fix-tabbar ()
"Hide `tabbar' for buffers displayed in windows located
not in the top of the frame."
(when tabbar-mode
(-map
(lambda (window)
(let ((buffer (window-buffer window)))
(with-current-buffer buffer
(condition-case nil
;; Keep `tabbar' if
(if (or
;; buffer is displayed in window located
;; in the top of the frame
(not (> (cadr (window-edges window)) 0))
(and
;; or this buffer displayed in other window too
(> (length (get-buffer-window-list buffer)) 1)
;; but not only in the bottom windows.
(not (-all?
(lambda (w) (> (cadr (window-edges w)) 0))
(get-buffer-window-list buffer)))))
(tabbar-local-mode -1)
;; Hide `tabbar' otherwise.
(tabbar-local-mode 1))
(error nil)))))
(window-list))
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab)))
; Используется, например, так:
(when (require 'ejc-sql nil 'noerror)
(add-hook 'ejc-sql-complete-query-hook 'k/select-window-fix-tabbar))
Исправление Kostafey, :
В паблике это лежит давно: https://github.com/kostafey/kostafeys-emacs-confik.
Но там искать нужно будет что к чему, лучше приведу тут с комментариями:
(require 'tabbar)
(tabbar-mode t)
; Их отключение сильно место экономит
;; Hide forward and back buttons
(customize-set-variable 'tabbar-scroll-right-button '(("") ""))
(customize-set-variable 'tabbar-scroll-left-button '(("") ""))
(customize-set-variable 'tabbar-buffer-home-button '(("") ""))
; Я думаю, тут комментарии излишни, единственное, что можно
; упомянуть, что порядок буферов в списке может не совпадать
; с порядком табов, а это очень удобно визуально переключаться
; между ближайшими видимыми буферами/табами
(if (require 'tabbar nil 'noerror)
(progn
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab))
(progn
(global-set-key (kbd "C-<next>") 'next-buffer)
(global-set-key (kbd "C-<prior>") 'previous-buffer)))
; Всякие спецбуферы типа *lsp-log* выводятся в отдельной
; группе табов (чтобы было меньше шума).
; Единственное исключение - буферы типа *temp-1*, *temp-2* и.д.,
; которые я использую для заметок.
(setq tabbar-buffer-groups-function
'(lambda ()
(list
(cond
((and (find (aref (buffer-name (current-buffer)) 0) " *")
(not (string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
"*")
(t "All Buffers")))))
; Фильтрация буферов для отображения в табах
(setq tabbar-buffer-list-function
'(lambda ()
(delq nil
(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)))
(-filter
(lambda (b) (or (eq (current-buffer) b)
(buffer-file-name b)
(string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
(buffer-list))))))
; Отключить табы для спецбуферов, если мы делим окно вертикально
; сохранив при этом ключи для навигации по буферам
(defun k/select-window-fix-tabbar ()
"Hide `tabbar' for buffers displayed in windows located
not in the top of the frame."
(when tabbar-mode
(-map
(lambda (window)
(let ((buffer (window-buffer window)))
(with-current-buffer buffer
(condition-case nil
;; Keep `tabbar' if
(if (or
;; buffer is displayed in window located
;; in the top of the frame
(not (> (cadr (window-edges window)) 0))
(and
;; or this buffer displayed in other window too
(> (length (get-buffer-window-list buffer)) 1)
;; but not only in the bottom windows.
(not (-all?
(lambda (w) (> (cadr (window-edges w)) 0))
(get-buffer-window-list buffer)))))
(tabbar-local-mode -1)
;; Hide `tabbar' otherwise.
(tabbar-local-mode 1))
(error nil)))))
(window-list))
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab)))
; Используется, например, так:
(when (require 'ejc-sql nil 'noerror)
(add-hook 'ejc-sql-complete-query-hook 'k/select-window-fix-tabbar))
Исправление Kostafey, :
В паблике это лежит давно: https://github.com/kostafey/kostafeys-emacs-confik.
Но там искать нужно будет что к чему, лучше приведу тут с комментариями:
(require 'tabbar)
(tabbar-mode t)
; Их отключение сильно место экономит
;; Hide forward and back buttons
(customize-set-variable 'tabbar-scroll-right-button '(("") ""))
(customize-set-variable 'tabbar-scroll-left-button '(("") ""))
(customize-set-variable 'tabbar-buffer-home-button '(("") ""))
; Я думаю, тут комментарии излишни, единственное, что можно
; упомянуть, что порядок буферов в списке может не совпадать
; с порядком табов, а это очень удобно визуально переключаться
; между ближайшими видимыми буферами/табами
(if (require 'tabbar nil 'noerror)
(progn
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab))
(progn
(global-set-key (kbd "C-<next>") 'next-buffer)
(global-set-key (kbd "C-<prior>") 'previous-buffer)))
; Всякие спецбуферы типа *lsp-log* выводятся в отдельной
; группе табов (чтобы было меньше шума).
; Единственное исключение - буфера типа *temp-1*, *temp-2* и.д.,
; которые я использую для заметок.
(setq tabbar-buffer-groups-function
'(lambda ()
(list
(cond
((and (find (aref (buffer-name (current-buffer)) 0) " *")
(not (string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
"*")
(t "All Buffers")))))
; Фильтрация буферов для отображения в табах
(setq tabbar-buffer-list-function
'(lambda ()
(delq nil
(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)))
(-filter
(lambda (b) (or (eq (current-buffer) b)
(buffer-file-name b)
(string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
(buffer-list))))))
; Отключить табы для спецбуферов, если мы делим окно вертикально
; сохранив при этом ключи для навигации по буферам
(defun k/select-window-fix-tabbar ()
"Hide `tabbar' for buffers displayed in windows located
not in the top of the frame."
(when tabbar-mode
(-map
(lambda (window)
(let ((buffer (window-buffer window)))
(with-current-buffer buffer
(condition-case nil
;; Keep `tabbar' if
(if (or
;; buffer is displayed in window located
;; in the top of the frame
(not (> (cadr (window-edges window)) 0))
(and
;; or this buffer displayed in other window too
(> (length (get-buffer-window-list buffer)) 1)
;; but not only in the bottom windows.
(not (-all?
(lambda (w) (> (cadr (window-edges w)) 0))
(get-buffer-window-list buffer)))))
(tabbar-local-mode -1)
;; Hide `tabbar' otherwise.
(tabbar-local-mode 1))
(error nil)))))
(window-list))
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab)))
; Используется, например, так:
(when (require 'ejc-sql nil 'noerror)
(add-hook 'ejc-sql-complete-query-hook 'k/select-window-fix-tabbar))
Исходная версия Kostafey, :
В паблике это лежит давно: https://github.com/kostafey/kostafeys-emacs-confik.
Но там искать нужно будет что к чему, лучше приведу тут с комментариями:
(require 'tabbar)
(tabbar-mode t)
; Их отключение сильно место экономит
;; Hide forward and back buttons
(customize-set-variable 'tabbar-scroll-right-button '(("") ""))
(customize-set-variable 'tabbar-scroll-left-button '(("") ""))
(customize-set-variable 'tabbar-buffer-home-button '(("") ""))
; Я думаю, тут комментарии излишни, единственное, что можно
; упомянуть, что порядок буферов в списке может не совпадать
; с порядком табов, а это очень удобно визуально переключаться
; между ближайшими видимыми буферами/табами
(if (require 'tabbar nil 'noerror)
(progn
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab))
(progn
(global-set-key (kbd "C-<next>") 'next-buffer)
(global-set-key (kbd "C-<prior>") 'previous-buffer)))
; Всякие спецбуферы типа *lsp-log* выводятся в отдельной
; группе табов (чтобы было меньше шума).
; Единственное исключение - буфера типа *temp-1*, *temp-2* и.д.
; которые я использую для заметок.
(setq tabbar-buffer-groups-function
'(lambda ()
(list
(cond
((and (find (aref (buffer-name (current-buffer)) 0) " *")
(not (string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
"*")
(t "All Buffers")))))
; Фильтрация буферов для отображения в табах
(setq tabbar-buffer-list-function
'(lambda ()
(delq nil
(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)))
(-filter
(lambda (b) (or (eq (current-buffer) b)
(buffer-file-name b)
(string-match
"^\\*temp\\(-[0-9]+\\)?\\*$"
(buffer-name b))))
(buffer-list))))))
; Отключить табы для спецбуферов, если мы делим окно вертикально
; сохранив при этом ключи для навигации по буферам
(defun k/select-window-fix-tabbar ()
"Hide `tabbar' for buffers displayed in windows located
not in the top of the frame."
(when tabbar-mode
(-map
(lambda (window)
(let ((buffer (window-buffer window)))
(with-current-buffer buffer
(condition-case nil
;; Keep `tabbar' if
(if (or
;; buffer is displayed in window located
;; in the top of the frame
(not (> (cadr (window-edges window)) 0))
(and
;; or this buffer displayed in other window too
(> (length (get-buffer-window-list buffer)) 1)
;; but not only in the bottom windows.
(not (-all?
(lambda (w) (> (cadr (window-edges w)) 0))
(get-buffer-window-list buffer)))))
(tabbar-local-mode -1)
;; Hide `tabbar' otherwise.
(tabbar-local-mode 1))
(error nil)))))
(window-list))
(global-set-key (kbd "C-<next>") 'tabbar-forward-tab)
(global-set-key (kbd "C-<prior>") 'tabbar-backward-tab)))
; Используется, например, так:
(when (require 'ejc-sql nil 'noerror)
(add-hook 'ejc-sql-complete-query-hook 'k/select-window-fix-tabbar))