LINUX.ORG.RU

История изменений

Исправление 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))