 
 ;; built-in eldoc mode
 (use-package eldoc
-  :ensure nil
   :general
   ("<f6> h"  #'eldoc-doc-buffer)
+  ("<f10> e" #'eldoc-mode)
   :custom
   (eldoc-echo-area-prefer-doc-buffer t)             ; show in *eldoc* buffer if showing & fits
   (eldoc-echo-area-use-multiline-p 1)               ; one line at most in minibuffer
   :config
   (global-eldoc-mode t)
-  :general
-  ("<f10> e" #'eldoc-mode))
+  :ensure nil)
+
+;; built-in tab-line mode
+(use-package tab-line
+  :ensure nil
+  :general
+  ("<f10> a" #'tab-line-mode)
+  :config
+  (defun me:tab-name(tab tabs)
+    (let ((ind (seq-position tabs tab)))
+      (if (window-system)
+          (format "%c %s" (+ ind ?\u2460) (buffer-name tab))
+        (format "%d) %s" (1+ ind) (buffer-name tab)))))
+  ;; show first 9 buffers only, and show most recent first
+  (defun me:filter-tab-line-buffers ( bufs )
+    (seq-take (seq-reverse bufs) 9))
+  (advice-add #'tab-line-tabs-window-buffers :filter-return #'me:filter-tab-line-buffers)
+  (setq tab-line-tab-name-function #'me:tab-name)
+  (global-tab-line-mode t)
+  :demand)
 
 ;; highlight keywords
 (use-package fic-mode

  (define-key magit-section-mode-map (kbd "M-3") nil)
  (define-key magit-section-mode-map (kbd "M-4") nil)
  (define-key magit-section-mode-map (kbd "M-5") nil)
  (define-key magit-mode-map (kbd "M-w") nil)
  (define-key magit-mode-map (kbd "C-w") nil)
  (define-key magit-mode-map (kbd "C-c C-m") #'magit-toggle-margin)

  ("M-`"        #'previous-buffer)           ; window
  ("M-~"        #'next-buffer)               ; window
  ("M-w"        #'other-window)              ; window
  :init
  (add-function :after after-focus-change-function
                (lambda () (unless (frame-focus-state)
