Refactor: doom-modeline-update-buffer-file-name.

This commit is contained in:
Vincent Zhang 2018-11-14 03:58:21 +08:00
parent 2b7ee7451f
commit 4f0f761738

View file

@ -494,10 +494,8 @@ active.")
(if (eq idx len) "\"};" "\",\n"))))) (if (eq idx len) "\"};" "\",\n")))))
'xpm t :ascent 'center))))) 'xpm t :ascent 'center)))))
(defvar-local doom-modeline-buffer-file-name nil) (defun doom-modeline-buffer-file-name ()
(defun doom-modeline-update-buffer-file-name (&rest _)
"Propertized variable `buffer-file-name' based on `doom-modeline-buffer-file-name-style'." "Propertized variable `buffer-file-name' based on `doom-modeline-buffer-file-name-style'."
(setq doom-modeline-buffer-file-name
(let ((buffer-file-name (or (buffer-file-name (buffer-base-buffer)) ""))) (let ((buffer-file-name (or (buffer-file-name (buffer-base-buffer)) "")))
(unless buffer-file-truename (unless buffer-file-truename
(setq buffer-file-truename (file-truename buffer-file-name))) (setq buffer-file-truename (file-truename buffer-file-name)))
@ -521,11 +519,7 @@ active.")
(and (doom-modeline--active) (and (doom-modeline--active)
'doom-modeline-buffer-file)))) 'doom-modeline-buffer-file))))
(when face `(:inherit ,face)))))) (when face `(:inherit ,face))))))
'help-echo buffer-file-truename)))) 'help-echo buffer-file-truename)))
(add-hook 'find-file-hook #'doom-modeline-update-buffer-file-name)
(add-hook 'after-revert-hook #'doom-modeline-update-buffer-file-name)
(add-hook 'after-save-hook #'doom-modeline-update-buffer-file-name)
(advice-add #'select-window :after #'doom-modeline-update-buffer-file-name)
(defun doom-modeline--buffer-file-name-truncate (file-path true-file-path &optional truncate-tail) (defun doom-modeline--buffer-file-name-truncate (file-path true-file-path &optional truncate-tail)
"Propertized variable `buffer-file-name' that truncates every dir along path. "Propertized variable `buffer-file-name' that truncates every dir along path.
@ -615,13 +609,29 @@ buffer where knowing the current project directory is important."
'face face)))) 'face face))))
;; ;;
(defvar-local doom-modeline-buffer-file-name nil)
(defun doom-modeline-update-buffer-file-name (&rest _)
"Propertized variable `buffer-file-name' based on `doom-modeline-buffer-file-name-style'."
(setq doom-modeline-buffer-file-name
;; Show buffer name if it doesn't equal the file name.
;; NOTE: Format: "buffer-file-name[buffer-name]".
;; Except the same buffer names in different directories.
(if buffer-file-name
(let ((file-name (doom-modeline-buffer-file-name)))
(if (string-equal
(file-name-nondirectory buffer-file-name)
(replace-regexp-in-string "<.+>$" "" (or (buffer-name) "")))
file-name
(format "%s[%s]" file-name (buffer-name))))
"%b")))
(add-hook 'find-file-hook #'doom-modeline-update-buffer-file-name)
(add-hook 'after-revert-hook #'doom-modeline-update-buffer-file-name)
(add-hook 'after-save-hook #'doom-modeline-update-buffer-file-name)
(advice-add #'select-window :after #'doom-modeline-update-buffer-file-name)
(doom-modeline-def-segment buffer-info (doom-modeline-def-segment buffer-info
"Combined information about the current buffer, including the current working "Combined information about the current buffer, including the current working
directory, the file name, and its state (modified, read-only or non-existent)." directory, the file name, and its state (modified, read-only or non-existent)."
;; HACK: Compatible with loading `doom-modeline' after init time.
(unless doom-modeline-buffer-file-name (doom-modeline-update-buffer-file-name))
(concat (cond (buffer-read-only (concat (cond (buffer-read-only
(concat (doom-modeline-icon-octicon (concat (doom-modeline-icon-octicon
"lock" "lock"
@ -647,16 +657,9 @@ directory, the file name, and its state (modified, read-only or non-existent)."
:face 'doom-modeline-warning :face 'doom-modeline-warning
:v-adjust -0.05) :v-adjust -0.05)
" "))) " ")))
(if doom-modeline-buffer-file-name ;; HACK: Compatible with loading `doom-modeline' after init time.
;; Show buffer name if it doesn't equal the file name. (or doom-modeline-buffer-file-name
;; NOTE: Format: "buffer-file-name[buffer-name]". (doom-modeline-update-buffer-file-name))))
;; Except the same buffer names in different directories.
(if (string-equal
(file-name-nondirectory doom-modeline-buffer-file-name)
(replace-regexp-in-string "<.+>$" "" (or (buffer-name) "")))
doom-modeline-buffer-file-name
(format "%s[%s]" doom-modeline-buffer-file-name (buffer-name)))
"%b")))
(doom-modeline-def-segment buffer-info-simple (doom-modeline-def-segment buffer-info-simple
"Display only the current buffer's name, but with fontification." "Display only the current buffer's name, but with fontification."