Change mode-line and tab-bar

This commit is contained in:
Case Duckworth 2022-01-10 23:44:45 -06:00
parent eb40045abd
commit 3379638199
3 changed files with 136 additions and 43 deletions

52
init.el
View File

@ -1278,27 +1278,32 @@ See also `crux-reopen-as-root-mode'."
(setup (:straight (simple-modeline
:fork (:host github :repo "duckwork/simple-modeline")))
(:require +modeline)
(:option simple-modeline-segments `((;; left
+modeline-ace-window-display
+modeline-modified
,(+modeline-concat
'(+modeline-god-mode
+modeline-reading-mode
+modeline-narrowed)
",")
+modeline-buffer-name
+modeline-position
+modeline-anzu
)
(;; right
+modeline-track
+modeline-vc
simple-modeline-segment-misc-info
simple-modeline-segment-process
+modeline-text-scale
+modeline-minions
+modeline-major-mode
)))
(:option simple-modeline-segments
`(( ; left
+modeline-ace-window-display
+modeline-modified
+modeline-buffer-name
(lambda () (+modeline-vc ": "))
,(+modeline-concat
'(+modeline-minions
+modeline-major-mode))
+modeline-anzu
)
( ; right
(lambda ()
(unless +tab-bar-misc-info-mode
(+modeline-concat
'(+modeline-track
simple-modeline-segment-misc-info))))
simple-modeline-segment-process
+modeline-text-scale
,(+modeline-concat
'(+modeline-god-mode
+modeline-reading-mode
+modeline-narrowed)
",")
+modeline-position)))
(simple-modeline-mode +1))
(setup (:straight smartscan)
@ -1469,3 +1474,8 @@ See also `crux-reopen-as-root-mode'."
(:require +zzz-to-char)
(:option zzz-to-char-reach 1024)
(:global "M-z" #'+zzz-to-char))
(setup tab-bar
(:require +tab-bar)
(tab-bar-mode +1)
(+tab-bar-misc-info-mode +1))

View File

@ -88,7 +88,7 @@ This function makes a lambda, so you can throw it straight into
(defun +modeline-major-mode (&optional spacer)
"Display the current `major-mode'."
(concat (or spacer +modeline-default-spacer)
(propertize (+string-truncate (format-mode-line mode-name) 12)
(propertize (+string-truncate (format-mode-line mode-name) 16)
'face 'bold
'keymap mode-line-major-mode-keymap
'help-echo (concat (format-mode-line mode-name)
@ -185,27 +185,30 @@ The order of elements matters: whichever one matches first is applied."
(defun +modeline-position (&optional _) ; adapted from `simple-modeline'
"Display the current cursor position."
(list '((line-number-mode
((column-number-mode
(column-number-indicator-zero-based
(9 " %l:%c")
(9 " %l:%C"))
(6 " %l:")))
((column-number-mode
(column-number-indicator-zero-based
(5 " :%c")
(5 " :%C"))))))
'(file-percentage-mode
((-3 "%p") "%% "))
(if (region-active-p)
(propertize (format "%s%-5d"
(if (and (mark) (< (point) (mark))) "-" "+")
(apply '+ (mapcar
(lambda (pos)
(- (cdr pos)
(car pos)))
(region-bounds))))
'font-lock-face 'font-lock-variable-name-face))))
(let ((sep "|") (before " [") (after "]"))
(list `(:propertize (line-number-mode
((column-number-mode
(column-number-indicator-zero-based
,(concat before "%l" sep "%c" after)
,(concat before "%l" sep "%C" after))
,(concat before "%l" sep "" after)))
((column-number-mode
(column-number-indicator-zero-based
,(concat before sep "%c" after)
,(concat before sep "%C" after)))))
font-lock-face font-lock-comment-face)
(if (region-active-p)
(propertize (format "%s%-5d"
(if (and (mark) (< (point) (mark))) "-" "+")
(apply '+ (mapcar
(lambda (pos)
(- (cdr pos)
(car pos)))
(region-bounds))))
'font-lock-face 'font-lock-variable-name-face))
'(:propertize (file-percentage-mode
(" " (-3 "%p") "%%"))
font-lock-face font-lock-comment-face))))
(defun +modeline-vc (&optional spacer)
"Display the version control branch of the current buffer in the modeline."

80
lisp/+tab-bar.el Normal file
View File

@ -0,0 +1,80 @@
;;; +tab-bar.el -*- lexical-binding: t; -*-
;;; Commentary:
;; Emacs 28 comes with an easy-to-use `tab-bar-format' option, but I still use
;; Emacs 27 on my Windows machine. Thus, the code in this file.
;;; Code:
(require 'tab-bar)
;; Common
(defun +tab-bar-misc-info ()
"Display `mode-line-misc-info', formatted for the tab-bar."
`((global menu-item ,(string-trim-right
(format-mode-line mode-line-misc-info))
ignore)))
(defvar +tab-bar-show-original nil
"Original value of `tab-bar-show'.")
;; Emacs 27
(defun +tab-bar-misc-info-27 (output &rest _)
"Display `mode-line-misc-info' in the `tab-bar' on Emacs 27.
This is :filter-return advice for `tab-bar-make-keymap-1'."
(let* ((reserve (length (format-mode-line mode-line-misc-info)))
(str (propertize " "
'display `(space :align-to (- right (- 0 right-margin)
,reserve)))))
(prog1 (append output
`((align-right menu-item ,str nil))
(+tab-bar-misc-info)))))
;; Emacs 28
(defvar +tab-bar-format-original nil
"Original value of `tab-bar-format'.")
(defun +tab-bar-misc-info-28 ()
"Display `mode-line-misc-info', right-aligned, on Emacs 28."
(append (unless (memq 'tab-bar-format-align-right tab-bar-format)
'(tab-bar-format-align-right))
'(+tab-bar-misc-info)))
(define-minor-mode +tab-bar-misc-info-mode
"Show the `mode-line-misc-info' in the `tab-bar'."
:lighter ""
:global t
(if +tab-bar-misc-info-mode
(progn ; Enable
(setq +tab-bar-show-original tab-bar-show)
(cond
((boundp 'tab-bar-format) ; Emacs 28
(setq +tab-bar-format-original tab-bar-format)
(unless (memq '+tab-bar-misc-info tab-bar-format)
(setq tab-bar-format
(append tab-bar-format (+tab-bar-misc-info-28)))))
((fboundp 'tab-bar-make-keymap-1) ; Emacs 27
(advice-add 'tab-bar-make-keymap-1 :filter-return
'+tab-bar-misc-info-27)))
(setq tab-bar-show t))
(progn ; Disable
(setq tab-bar-show +tab-bar-show-original)
(cond
((boundp 'tab-bar-format) ; Emacs 28
(setq tab-bar-format +tab-bar-format-original))
((fboundp 'tab-bar-make-keymap-1) ; Emacs 27
(advice-remove 'tab-bar-make-keymap-1 '+tab-bar-misc-info-27))))))
(provide '+tab-bar)
;;; +tab-bar.el ends here