From ff8e3eb457b0f639fc5afa478f346a89c7990ba8 Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Sun, 30 Oct 2022 22:06:11 +0800 Subject: [PATCH] customize modeline --- init.el | 1 + lisp/init-modeline.el | 117 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 lisp/init-modeline.el diff --git a/init.el b/init.el index 800c186..6d51e2e 100644 --- a/init.el +++ b/init.el @@ -106,6 +106,7 @@ If freezing sometimes, decrease it. If stuttering, increase it.") (require 'init-built-in) +(require 'init-modeline) (require 'init-git) (require 'init-awesome-pair) (require 'init-theme) diff --git a/lisp/init-modeline.el b/lisp/init-modeline.el new file mode 100644 index 0000000..3b7dc3a --- /dev/null +++ b/lisp/init-modeline.el @@ -0,0 +1,117 @@ +;; -*- coding: utf-8; lexical-binding: t; -*- + +(defun creature/set-mode-line-format-for-exist-buffers () + "Make customized mode line works in exist buffers." + (mapc (lambda (buffer) + (with-current-buffer buffer + (setq mode-line-format creature/mode-line-format))) + (buffer-list))) + + +;; buffer name +(defvar creature/mode-line-buffer-name + '(:eval (propertize + "%b" + 'face 'mode-line-buffer-id)) + "Buffer name with face.") +(set-face-attribute 'mode-line-buffer-id nil :weight 'normal) +(put 'creature/mode-line-buffer-name '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))) + (format " [%d|%d]" length line)))) + "Length of marked string.") +(put 'creature/mode-line-region-info 'risky-local-variable t) + +(defvar creature/mode-line-company-info + '(:eval + (when (and (not buffer-read-only) + (or (bound-and-true-p company-mode) + (bound-and-true-p global-company-mode))) + company-lighter)) + "Customize company lighter.") +(put 'creature/mode-line-company-info 'risky-local-variable t) + +;; combin mode line fromat +(defvar creature/mode-line-format + '("%e" + creature/mode-line-window-number + " " + current-input-method-title + "%Z" ; coding system and eol type + "%*" ; read only buffer? + "%+" ; buffer modified? + "%@" ; buffer is in remote? + " " + creature/mode-line-buffer-name + " {" + "%p" ; percent of point in buffer + "," + "%I" ; buffer size + "}(" + "%l,%c" ; line and column + ")" + " (" + mode-name ; major mode + mode-line-process + creature/mode-line-company-info + ")" + creature/mode-line-region-info + (vc-mode vc-mode) + + (flymake-mode flymake-mode-line-format) + mode-line-misc-info + mode-line-end-spaces + ) + "Customized mode line format.") + +;; 1. define a variable to keep origin mode-line +;; 2. make customized mode-line worked for exist buffers. +(defvar creature/origin-mode-line-format + mode-line-format + "Keep origin `mode-line-format'") + +(setq-default mode-line-format creature/mode-line-format) + +(creature/set-mode-line-format-for-exist-buffers) + +(defun creature/toggle-mode-line () + "Switch `mode-line-format' between customized and the origin. +Customized is save in `creature/mode-line-format', +orgiin is in `creature/origin-mode-line-format'." + + (let ((tmp-mode-line + (if (eq mode-line-format creature/mode-line-format) + creature/origin-mode-line-format + creature/mode-line-format))) + (mapc (lambda (buffer) + (with-current-buffer buffer + (setq mode-line-format tmp-mode-line))) + (buffer-list)) + (setq-default mode-line-format tmp-mode-line) + nil)) + +;; (setq display-time-interval 1) +(setq display-time-format " %R %a %F") +(setq display-time-load-average nil) +(setq display-time-default-load-average nil) +(display-time-mode) + + +(provide 'init-modeline)