142 lines
4.7 KiB
EmacsLisp
142 lines
4.7 KiB
EmacsLisp
;; -*- coding: utf-8; lexical-binding: t; -*-
|
|
|
|
;; buffer name
|
|
(defvar-local creature/mode-line-buffer-info
|
|
(propertized-buffer-identification "%b")
|
|
"custom version of `mode-line-buffer-identification'.")
|
|
(put 'creature/mode-line-buffer-info 'risky-local-variable t)
|
|
|
|
;; marker region info
|
|
(defvar creature/focus-window nil
|
|
"Current focus window.")
|
|
|
|
(defun creature/save-current-window ()
|
|
"Save current window."
|
|
(setq creature/focus-window (selected-window)))
|
|
|
|
(add-hook 'post-command-hook
|
|
#'creature/save-current-window)
|
|
|
|
(defvar creature/mode-line-region-info
|
|
'(:eval
|
|
(when (and (region-active-p) (eq creature/focus-window (selected-window)))
|
|
(let ((length (- (region-end) (region-beginning)))
|
|
(line (- (line-number-at-pos (region-end))
|
|
(line-number-at-pos (region-beginning))
|
|
-1)))
|
|
(propertize
|
|
(format " [%d|%d]" length line)
|
|
'help-echo "Selected region info"))))
|
|
"Length of marked string.")
|
|
(put 'creature/mode-line-region-info 'risky-local-variable t)
|
|
|
|
(defvar creature/mode-line-line-and-column
|
|
`(line-number-mode
|
|
(column-number-mode
|
|
(column-number-indicator-zero-based
|
|
(:propertize
|
|
mode-line-position-column-line-format
|
|
display (min-width (6.0))
|
|
,@mode-line-position--column-line-properties)
|
|
(:propertize
|
|
(:eval (string-replace
|
|
"%c" "%C" (car mode-line-position-column-line-format)))
|
|
display (min-width (6.0))
|
|
,@mode-line-position--column-line-properties))
|
|
(:propertize
|
|
mode-line-position-line-format
|
|
display (min-width (3.0))
|
|
,@mode-line-position--column-line-properties))
|
|
(column-number-mode
|
|
(column-number-indicator-zero-based
|
|
(:propertize
|
|
mode-line-position-column-format
|
|
display (min-width (3.0))
|
|
,@mode-line-position--column-line-properties)
|
|
(:propertize
|
|
(:eval (string-replace
|
|
"%c" "%C" (car mode-line-position-column-format)))
|
|
display (min-width (6.0))
|
|
,@mode-line-position--column-line-properties))))
|
|
"Line number and column number of position.")
|
|
(put 'creature/mode-line-line-and-column 'risky-local-variable t)
|
|
|
|
(defvar creature/mode-line-percent-size
|
|
'(:eval
|
|
(let* ((show-brace (and mode-line-percent-position size-indication-mode))
|
|
(begin-brace (if show-brace " {" " "))
|
|
(end-brace (if show-brace "}" ""))
|
|
(comma (if show-brace "," "")))
|
|
`(,begin-brace
|
|
(:propertize
|
|
("" mode-line-percent-position)
|
|
local-map ,mode-line-column-line-number-mode-map
|
|
display (min-width (3.0))
|
|
mouse-face mode-line-highlight
|
|
;; XXX needs better description
|
|
help-echo "Window Scroll Percentage
|
|
mouse-1: Display Line and Column Mode Menu")
|
|
,comma
|
|
(size-indication-mode
|
|
,(propertize
|
|
"%I"
|
|
'local-map mode-line-column-line-number-mode-map
|
|
'mouse-face 'mode-line-highlight
|
|
;; XXX needs better description
|
|
'help-echo "Size indication mode\n\
|
|
mouse-1: Display Line and Column Mode Menu"))
|
|
,end-brace)))
|
|
"Percent offset and buffer size.")
|
|
(put 'creature/mode-line-percent-size 'risky-local-variable t)
|
|
|
|
(setq mode-line-position
|
|
`(,creature/mode-line-percent-size
|
|
,creature/mode-line-line-and-column))
|
|
|
|
(let ((mode-line
|
|
'("%e"
|
|
mode-line-front-space
|
|
(:propertize
|
|
("" mode-line-mule-info mode-line-client mode-line-modified
|
|
mode-line-remote mode-line-window-dedicated))
|
|
mode-line-frame-identification
|
|
creature/mode-line-buffer-info
|
|
mode-line-position
|
|
creature/mode-line-region-info
|
|
" "
|
|
|
|
mode-line-modes
|
|
|
|
(project-mode-line project-mode-line-format)
|
|
(vc-mode vc-mode)
|
|
|
|
(flymake-mode flymake-mode-line-format)
|
|
mode-line-misc-info
|
|
mode-line-end-spaces)))
|
|
(setq-default mode-line-format mode-line))
|
|
|
|
;; cursor position info
|
|
(size-indication-mode 1)
|
|
(line-number-mode 1)
|
|
(column-number-mode 1)
|
|
|
|
;; don't show minor modes exclude company-mode
|
|
(defun creature/mode-line-change-modes ()
|
|
(if (boundp 'mode-line-collapse-minor-modes)
|
|
(progn
|
|
(setq mode-line-collapse-minor-modes
|
|
'(not company-mode global-company-mode))
|
|
(setq mode-line-collapse-minor-modes-to ""))
|
|
(if (boundp 'mode-line-minor-modes)
|
|
(setq mode-line-minor-modes nil)
|
|
(setq minor-mode-alist nil))))
|
|
(add-hook 'emacs-startup-hook #'creature/mode-line-change-modes)
|
|
|
|
(setq display-time-format " %H:%M")
|
|
(setq display-time-load-average nil)
|
|
(setq display-time-default-load-average nil)
|
|
(display-time-mode)
|
|
|
|
|
|
(provide 'init-modeline)
|