mirror of
https://github.com/vale981/doom-modeline
synced 2025-03-05 09:21:38 -05:00
[Feature] Introduce `auto' style for buffer file names.
Close #179. `auto' style is the default style now. Given ~/Projects/FOSS/emacs/lisp/comint.el auto => emacs/lisp/comint.el (in a project) or comint.el truncate-upto-project => ~/P/F/emacs/lisp/comint.el truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el truncate-with-project => emacs/l/comint.el truncate-except-project => ~/P/F/emacs/l/comint.el truncate-upto-root => ~/P/F/e/lisp/comint.el truncate-all => ~/P/F/e/l/comint.el relative-from-project => emacs/lisp/comint.el relative-to-project => lisp/comint.el file-name => comint.el buffer-name => comint.el<2> (uniquify buffer name)"
This commit is contained in:
parent
e6d690bae0
commit
43a78ad7eb
6 changed files with 253 additions and 90 deletions
|
@ -181,6 +181,7 @@ Run `M-x customize-group RET doom-modeline RET` or set the variables.
|
|||
;; Determines the style used by `doom-modeline-buffer-file-name'.
|
||||
;;
|
||||
;; Given ~/Projects/FOSS/emacs/lisp/comint.el
|
||||
;; auto => emacs/lisp/comint.el (in a project) or comint.el
|
||||
;; truncate-upto-project => ~/P/F/emacs/lisp/comint.el
|
||||
;; truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el
|
||||
;; truncate-with-project => emacs/l/comint.el
|
||||
|
@ -195,7 +196,7 @@ Run `M-x customize-group RET doom-modeline RET` or set the variables.
|
|||
;; If you are experiencing the laggy issue, especially while editing remote files
|
||||
;; with tramp, please try `file-name' style.
|
||||
;; Please refer to https://github.com/bbatsov/projectile/issues/657.
|
||||
(setq doom-modeline-buffer-file-name-style 'truncate-upto-project)
|
||||
(setq doom-modeline-buffer-file-name-style 'auto)
|
||||
|
||||
;; Whether display icons in mode-line. Respects `all-the-icons-color-icons'.
|
||||
;; While using the server mode in GUI, should set the value explicitly.
|
||||
|
|
|
@ -173,10 +173,11 @@ Specify another one if you encounter the issue."
|
|||
(const :tag "Disable" nil))
|
||||
:group 'doom-modeline)
|
||||
|
||||
(defcustom doom-modeline-buffer-file-name-style 'truncate-upto-project
|
||||
(defcustom doom-modeline-buffer-file-name-style 'auto
|
||||
"Determines the style used by `doom-modeline-buffer-file-name'.
|
||||
|
||||
Given ~/Projects/FOSS/emacs/lisp/comint.el
|
||||
auto => emacs/lisp/comint.el (in a project) or comint.el
|
||||
truncate-upto-project => ~/P/F/emacs/lisp/comint.el
|
||||
truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el
|
||||
truncate-with-project => emacs/l/comint.el
|
||||
|
@ -187,7 +188,8 @@ Specify another one if you encounter the issue."
|
|||
relative-to-project => lisp/comint.el
|
||||
file-name => comint.el
|
||||
buffer-name => comint.el<2> (uniquify buffer name)"
|
||||
:type '(choice (const truncate-upto-project)
|
||||
:type '(choice (const auto)
|
||||
(const truncate-upto-project)
|
||||
(const truncate-upto-project)
|
||||
(const truncate-from-project)
|
||||
(const truncate-with-project)
|
||||
|
@ -839,26 +841,6 @@ UNICODE is the unicode char fallback. TEXT is the ASCII char fallback."
|
|||
(propertize unicode 'face face))
|
||||
(when text (propertize text 'face face)))))
|
||||
|
||||
(defvar-local doom-modeline-project-root nil)
|
||||
(defun doom-modeline-project-root ()
|
||||
"Get the path to the root of your project.
|
||||
Return `default-directory' if no project was found."
|
||||
(setq doom-modeline-project-root
|
||||
(or doom-modeline-project-root
|
||||
(pcase doom-modeline-project-detection
|
||||
('ffip
|
||||
(when (fboundp 'ffip-get-project-root-directory)
|
||||
(let ((inhibit-message t))
|
||||
(ffip-get-project-root-directory))))
|
||||
('projectile
|
||||
(when (fboundp 'projectile-project-root)
|
||||
(projectile-project-root)))
|
||||
('project
|
||||
(when (fboundp 'project-current)
|
||||
(when-let ((project (project-current)))
|
||||
(car (project-roots project))))))
|
||||
default-directory)))
|
||||
|
||||
(defun doom-modeline--make-xpm (face width height)
|
||||
"Create an XPM bitmap via FACE, WIDTH and HEIGHT. Inspired by `powerline''s `pl/make-xpm'."
|
||||
(when (and (display-graphic-p)
|
||||
|
@ -887,7 +869,38 @@ Return `default-directory' if no project was found."
|
|||
(if (eq idx len) "\"};" "\",\n")))))
|
||||
'xpm t :ascent 'center))))))
|
||||
|
||||
;; Fix: invalid-regexp "Trailing backslash" while handling $HOME on Windows
|
||||
(defvar-local doom-modeline--project-detected-p nil)
|
||||
(defvar-local doom-modeline--project-root nil)
|
||||
(defun doom-modeline--project-root ()
|
||||
"Get the path to the root of your project.
|
||||
Return nil if no project was found."
|
||||
(if doom-modeline--project-detected-p
|
||||
doom-modeline--project-root
|
||||
(setq doom-modeline--project-root
|
||||
(pcase doom-modeline-project-detection
|
||||
('ffip
|
||||
(when (fboundp 'ffip-get-project-root-directory)
|
||||
(let ((inhibit-message t))
|
||||
(ffip-get-project-root-directory))))
|
||||
('projectile
|
||||
(when (fboundp 'projectile-project-root)
|
||||
(projectile-project-root)))
|
||||
('project
|
||||
(when (fboundp 'project-current)
|
||||
(when-let ((project (project-current)))
|
||||
(car (project-roots project))))))
|
||||
doom-modeline--project-detected-p t)))
|
||||
|
||||
(defun doom-modeline-project-p ()
|
||||
"Check if the file is in a project."
|
||||
(doom-modeline--project-root))
|
||||
|
||||
(defun doom-modeline-project-root ()
|
||||
"Get the path to the root of your project.
|
||||
Return `default-directory' if no project was found."
|
||||
(or (doom-modeline--project-root) default-directory))
|
||||
|
||||
;; HACK: fix invalid-regexp "Trailing backslash" while handling $HOME on Windows
|
||||
(defun doom-modeline-shrink-path--dirs-internal (full-path &optional truncate-all)
|
||||
"Return fish-style truncated string based on FULL-PATH.
|
||||
Optional parameter TRUNCATE-ALL will cause the function to truncate the last
|
||||
|
@ -912,36 +925,34 @@ directory too."
|
|||
(defun doom-modeline-buffer-file-name ()
|
||||
"Propertized variable `buffer-file-name' based on `doom-modeline-buffer-file-name-style'."
|
||||
(let* ((buffer-file-name (file-local-name (or (buffer-file-name (buffer-base-buffer)) "")))
|
||||
(buffer-file-truename (file-local-name (or buffer-file-truename (file-truename buffer-file-name) ""))))
|
||||
(buffer-file-truename (file-local-name (or buffer-file-truename (file-truename buffer-file-name) "")))
|
||||
(face (if (buffer-modified-p) 'doom-modeline-buffer-modified 'doom-modeline-buffer-file)))
|
||||
(propertize
|
||||
(pcase doom-modeline-buffer-file-name-style
|
||||
(`truncate-upto-project
|
||||
('auto
|
||||
(if (doom-modeline-project-p)
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename nil nil 'hide)
|
||||
(propertize (file-name-nondirectory buffer-file-name) 'face face)))
|
||||
('truncate-upto-project
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink))
|
||||
(`truncate-from-project
|
||||
('truncate-from-project
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename nil 'shrink))
|
||||
(`truncate-with-project
|
||||
('truncate-with-project
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink 'shink 'hide))
|
||||
(`truncate-except-project
|
||||
('truncate-except-project
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename 'shrink 'shink))
|
||||
(`truncate-upto-root
|
||||
('truncate-upto-root
|
||||
(doom-modeline--buffer-file-name-truncate buffer-file-name buffer-file-truename))
|
||||
(`truncate-all
|
||||
('truncate-all
|
||||
(doom-modeline--buffer-file-name-truncate buffer-file-name buffer-file-truename t))
|
||||
(`relative-to-project
|
||||
('relative-to-project
|
||||
(doom-modeline--buffer-file-name-relative buffer-file-name buffer-file-truename))
|
||||
(`relative-from-project
|
||||
('relative-from-project
|
||||
(doom-modeline--buffer-file-name buffer-file-name buffer-file-truename nil nil 'hide))
|
||||
(style
|
||||
(propertize
|
||||
(pcase style
|
||||
(`file-name (file-name-nondirectory buffer-file-name))
|
||||
(`buffer-name (buffer-name)))
|
||||
'face
|
||||
(let ((face (or (and (buffer-modified-p)
|
||||
'doom-modeline-buffer-modified)
|
||||
(and (doom-modeline--active)
|
||||
'doom-modeline-buffer-file))))
|
||||
(when face `(:inherit ,face))))))
|
||||
('file-name
|
||||
(propertize (file-name-nondirectory buffer-file-name) 'face face))
|
||||
('buffer-name
|
||||
(propertize (buffer-name) 'face face)))
|
||||
'mouse-face 'mode-line-highlight
|
||||
'help-echo (concat buffer-file-truename
|
||||
(unless (string= (file-name-nondirectory buffer-file-truename)
|
||||
|
@ -953,39 +964,43 @@ directory too."
|
|||
(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.
|
||||
If TRUNCATE-TAIL is t also truncate the parent directory of the file."
|
||||
(let ((dirs (shrink-path-prompt (file-name-directory true-file-path)))
|
||||
(active (doom-modeline--active)))
|
||||
(let ((dirs (shrink-path-prompt (file-name-directory true-file-path))))
|
||||
(if (null dirs)
|
||||
(propertize "%b" 'face (if active 'doom-modeline-buffer-file))
|
||||
(let ((modified-faces (if (buffer-modified-p) 'doom-modeline-buffer-modified)))
|
||||
(propertize "%b" 'face 'doom-modeline-buffer-file)
|
||||
(let ((modified-face (and (buffer-modified-p) 'doom-modeline-buffer-modified)))
|
||||
(let ((dirname (car dirs))
|
||||
(basename (cdr dirs))
|
||||
(dir-faces (or modified-faces (if active 'doom-modeline-project-root-dir)))
|
||||
(file-faces (or modified-faces (if active 'doom-modeline-buffer-file))))
|
||||
(dir-face (or modified-face 'doom-modeline-project-root-dir))
|
||||
(file-face (or modified-face 'doom-modeline-buffer-file)))
|
||||
(concat (propertize (concat dirname
|
||||
(if truncate-tail (substring basename 0 1) basename)
|
||||
"/")
|
||||
'face (if dir-faces `(:inherit ,dir-faces)))
|
||||
'face (and dir-face `(:inherit ,dir-face)))
|
||||
(propertize (file-name-nondirectory file-path)
|
||||
'face (if file-faces `(:inherit ,file-faces)))))))))
|
||||
'face (and file-face `(:inherit ,file-face)))))))))
|
||||
|
||||
(defun doom-modeline--buffer-file-name-relative (_file-path true-file-path &optional include-project)
|
||||
"Propertized variable `buffer-file-name' showing directories relative to project's root only."
|
||||
(let ((root (file-local-name (doom-modeline-project-root)))
|
||||
(active (doom-modeline--active)))
|
||||
(if (null root)
|
||||
(propertize "%b" 'face (if active 'doom-modeline-buffer-file))
|
||||
(let* ((modified-faces (if (buffer-modified-p) 'doom-modeline-buffer-modified))
|
||||
(propertize "%b" 'face 'doom-modeline-buffer-file)
|
||||
(let* ((modified-face (and (buffer-modified-p) 'doom-modeline-buffer-modified))
|
||||
(relative-dirs (file-relative-name (file-name-directory true-file-path)
|
||||
(if include-project (concat root "../") root)))
|
||||
(relative-faces (or modified-faces (if active 'doom-modeline-buffer-path)))
|
||||
(file-faces (or modified-faces (if active 'doom-modeline-buffer-file))))
|
||||
(relative-face (or modified-face 'doom-modeline-buffer-path))
|
||||
(file-face (or modified-face 'doom-modeline-buffer-file)))
|
||||
(if (equal "./" relative-dirs) (setq relative-dirs ""))
|
||||
(concat (propertize relative-dirs 'face (if relative-faces `(:inherit ,relative-faces)))
|
||||
(concat (propertize relative-dirs 'face (if relative-face `(:inherit ,relative-face)))
|
||||
(propertize (file-name-nondirectory true-file-path)
|
||||
'face (if file-faces `(:inherit ,file-faces))))))))
|
||||
'face (if file-face `(:inherit ,file-face))))))))
|
||||
|
||||
(defun doom-modeline--buffer-file-name (file-path _true-file-path &optional truncate-project-root-parent truncate-project-relative-path hide-project-root-parent)
|
||||
(defun doom-modeline--buffer-file-name (file-path
|
||||
_true-file-path
|
||||
&optional
|
||||
truncate-project-root-parent
|
||||
truncate-project-relative-path
|
||||
hide-project-root-parent)
|
||||
"Propertized variable `buffer-file-name' given by FILE-PATH.
|
||||
If TRUNCATE-PROJECT-ROOT-PARENT is non-nil will be saved by truncating project
|
||||
root parent down fish-shell style.
|
||||
|
@ -1004,12 +1019,11 @@ If HIDE-PROJECT-ROOT-PARENT is non-nil will hide project root parent.
|
|||
Example:
|
||||
~/Projects/FOSS/emacs/lisp/comint.el => emacs/lisp/comint.el"
|
||||
(let ((project-root (file-local-name (doom-modeline-project-root)))
|
||||
(active (doom-modeline--active))
|
||||
(modified-faces (if (buffer-modified-p) 'doom-modeline-buffer-modified)))
|
||||
(let ((sp-faces (or modified-faces (if active 'doom-modeline-project-parent-dir)))
|
||||
(project-faces (or modified-faces (if active 'doom-modeline-project-dir)))
|
||||
(relative-faces (or modified-faces (if active 'doom-modeline-buffer-path)))
|
||||
(file-faces (or modified-faces (if active 'doom-modeline-buffer-file))))
|
||||
(modified-face (and (buffer-modified-p) 'doom-modeline-buffer-modified)))
|
||||
(let ((sp-face (or modified-face 'doom-modeline-project-parent-dir))
|
||||
(project-face (or modified-face 'doom-modeline-project-dir))
|
||||
(relative-face (or modified-face 'doom-modeline-buffer-path))
|
||||
(file-face (or modified-face 'doom-modeline-buffer-file)))
|
||||
(concat
|
||||
;; project root parent
|
||||
(unless hide-project-root-parent
|
||||
|
@ -1021,11 +1035,11 @@ Example:
|
|||
(not (string= root-path-parent "/")))
|
||||
(shrink-path--dirs-internal root-path-parent t)
|
||||
(abbreviate-file-name root-path-parent))
|
||||
'face sp-faces)))
|
||||
'face sp-face)))
|
||||
;; project
|
||||
(propertize
|
||||
(concat (file-name-nondirectory (directory-file-name project-root)) "/")
|
||||
'face project-faces)
|
||||
'face project-face)
|
||||
;; relative path
|
||||
(propertize
|
||||
(when-let (relative-path (file-relative-name
|
||||
|
@ -1036,9 +1050,9 @@ Example:
|
|||
(if truncate-project-relative-path
|
||||
(substring (shrink-path--dirs-internal relative-path t) 1)
|
||||
relative-path)))
|
||||
'face relative-faces)
|
||||
'face relative-face)
|
||||
;; file name
|
||||
(propertize (file-name-nondirectory file-path) 'face file-faces)))))
|
||||
(propertize (file-name-nondirectory file-path) 'face file-face)))))
|
||||
|
||||
(provide 'doom-modeline-core)
|
||||
|
||||
|
|
|
@ -304,7 +304,6 @@ Uses `all-the-icons-material' to fetch the icon."
|
|||
mouse-1: Previous buffer\nmouse-3: Next buffer"
|
||||
'local-map mode-line-buffer-identification-keymap))))))
|
||||
(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)
|
||||
(add-hook 'clone-indirect-buffer-hook #'doom-modeline-update-buffer-file-name)
|
||||
(add-hook 'evil-insert-state-exit-hook #'doom-modeline-update-buffer-file-name)
|
||||
|
@ -595,7 +594,7 @@ Uses `all-the-icons-octicon' to fetch the icon."
|
|||
(doom-modeline-vcs-icon "alert" "⚠" "!" 'doom-modeline-urgent))
|
||||
(t
|
||||
(doom-modeline-vcs-icon "git-branch" "" "@" 'doom-modeline-info -0.05)))))))
|
||||
(add-hook 'find-file-hook #'doom-modeline-update-vcs-icon t)
|
||||
(add-hook 'find-file-hook #'doom-modeline-update-vcs-icon)
|
||||
(add-hook 'after-save-hook #'doom-modeline-update-vcs-icon)
|
||||
(advice-add #'vc-refresh-state :after #'doom-modeline-update-vcs-icon)
|
||||
|
||||
|
@ -638,7 +637,7 @@ Uses `all-the-icons-octicon' to fetch the icon."
|
|||
((memq state '(removed conflict unregistered))
|
||||
'doom-modeline-urgent)
|
||||
(t 'doom-modeline-info)))))))
|
||||
(add-hook 'find-file-hook #'doom-modeline-update-vcs-text t)
|
||||
(add-hook 'find-file-hook #'doom-modeline-update-vcs-text)
|
||||
(add-hook 'after-save-hook #'doom-modeline-update-vcs-text)
|
||||
(advice-add #'vc-refresh-state :after #'doom-modeline-update-vcs-text)
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: Vincent Zhang <seagle0128@gmail.com>
|
||||
;; Homepage: https://github.com/seagle0128/doom-modeline
|
||||
;; Version: 2.9.2
|
||||
;; Version: 3.0.0
|
||||
;; Package-Requires: ((emacs "25.1") (all-the-icons "2.2.0") (shrink-path "0.2.0") (dash "2.11.0"))
|
||||
;; Keywords: faces mode-line
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
|
||||
;;; Code:
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'doom-modeline-core)
|
||||
|
||||
(ert-deftest doom-modeline-icon/octicon-icon ()
|
||||
|
@ -60,34 +61,171 @@
|
|||
(ert-deftest doom-modeline-project-root/ffip ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(doom-modeline-project-detection 'ffip)
|
||||
(doom-modeline-project-root nil))
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline--project-root nil))
|
||||
(cl-flet ((ffip-get-project-root-directory () "/home/user/project-ffip/"))
|
||||
(should (string= (ffip-get-project-root-directory) "/home/user/project-ffip/")))))
|
||||
|
||||
(ert-deftest doom-modeline-project-root/projectile ()
|
||||
(let ((default-directory "/home/user/projectile/")
|
||||
(doom-modeline-project-detection 'projectile)
|
||||
(doom-modeline-project-root nil))
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline--project-root nil))
|
||||
(cl-flet ((projectile-project-root () default-directory))
|
||||
(should (string= (doom-modeline-project-root) "/home/user/projectile/")))))
|
||||
|
||||
(ert-deftest doom-modeline-project-root/project ()
|
||||
(let ((default-directory "/home/user/project-current/")
|
||||
(doom-modeline-project-detection 'project)
|
||||
(doom-modeline-project-root nil))
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline--project-root nil))
|
||||
(cl-flet ((project-current (&optional _maybe-prompt _dir)
|
||||
`(vc . ,default-directory)))
|
||||
(should (string= (doom-modeline-project-root) "/home/user/project-current/")))))
|
||||
|
||||
(ert-deftest doom-modeline-project-root/default ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(doom-modeline-project-detection nil))
|
||||
(doom-modeline-project-detection nil)
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should (string= (doom-modeline-project-root) "/home/user/project/"))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/auto-in-project ()
|
||||
(let* ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline--project-root default-directory)
|
||||
(doom-modeline-buffer-file-name-style 'auto))
|
||||
(cl-flet ((doom-modeline-project-p () t)
|
||||
(doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"project/relative/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/auto-file-name ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'auto))
|
||||
(cl-flet ((doom-modeline-project-p () nil)
|
||||
(doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/file-name ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'file-name))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"test.txt"))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/buffer-name ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'buffer-name))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
(buffer-name)))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-upto-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'truncate-upto-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"/h/u/project/relative/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-from-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'truncate-from-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"/home/user/project/r/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-with-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'truncate-with-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"project/r/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-except-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'truncate-except-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"/h/u/project/r/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-upto-root ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'truncate-upto-root))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"/h/u/p/relative/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/truncate-all ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline-buffer-file-name-style 'truncate-all))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"/h/u/p/r/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/relative-to-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'relative-to-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"relative/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline-buffer-file-name/relative-from-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(buffer-file-name "/home/user/project/relative/test.txt")
|
||||
(buffer-file-truename "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t)
|
||||
(doom-modeline-buffer-file-name-style 'relative-from-project))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties (doom-modeline-buffer-file-name))
|
||||
"project/relative/test.txt")))))
|
||||
|
||||
(ert-deftest doom-modeline--buffer-file-name/truncate-upto-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path nil))
|
||||
(true-file-path nil)
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name file-path true-file-path 'shrink))
|
||||
|
@ -96,7 +234,8 @@
|
|||
(ert-deftest doom-modeline--buffer-file-name/truncate-from-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path nil))
|
||||
(true-file-path nil)
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name file-path true-file-path nil 'shrink))
|
||||
|
@ -105,7 +244,8 @@
|
|||
(ert-deftest doom-modeline--buffer-file-name/truncate-with-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path nil))
|
||||
(true-file-path nil)
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name file-path true-file-path 'shrink 'shrink 'hide))
|
||||
|
@ -114,7 +254,8 @@
|
|||
(ert-deftest doom-modeline--buffer-file-name/truncate-except-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path nil))
|
||||
(true-file-path nil)
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name file-path true-file-path 'shrink 'shrink))
|
||||
|
@ -123,26 +264,29 @@
|
|||
(ert-deftest doom-modeline--buffer-file-name-truncate/truncate-upto-root ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path "~/project/relative/test.txt"))
|
||||
(true-file-path "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name-truncate file-path true-file-path))
|
||||
"~/p/relative/test.txt"))))
|
||||
"/h/u/p/relative/test.txt"))))
|
||||
|
||||
(ert-deftest doom-modeline--buffer-file-name-truncate/truncate-all ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path "/home/user/project/relative/test.txt")
|
||||
(true-file-path "~/project/relative/test.txt"))
|
||||
(true-file-path "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name-truncate file-path true-file-path t))
|
||||
"~/p/r/test.txt"))))
|
||||
"/h/u/p/r/test.txt"))))
|
||||
|
||||
(ert-deftest doom-modeline--buffer-file-name-relative/relative-to-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path nil)
|
||||
(true-file-path "/home/user/project/relative/test.txt"))
|
||||
(cl-flet ((doom-modeline-project-root () "/home/user/project/"))
|
||||
(true-file-path "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name-relative file-path true-file-path))
|
||||
|
@ -151,8 +295,9 @@
|
|||
(ert-deftest doom-modeline--buffer-file-name-relative/relative-from-project ()
|
||||
(let ((default-directory "/home/user/project/")
|
||||
(file-path nil)
|
||||
(true-file-path "/home/user/project/relative/test.txt"))
|
||||
(cl-flet ((doom-modeline-project-root () "/home/user/project/"))
|
||||
(true-file-path "/home/user/project/relative/test.txt")
|
||||
(doom-modeline--project-detected-p t))
|
||||
(cl-flet ((doom-modeline-project-root () default-directory))
|
||||
(should
|
||||
(string= (strip-text-properties
|
||||
(doom-modeline--buffer-file-name-relative file-path true-file-path 'include-project))
|
||||
|
|
|
@ -32,6 +32,10 @@
|
|||
|
||||
(add-to-list 'load-path (expand-file-name "."))
|
||||
|
||||
;; @see https://github.com/rejeep/ert-runner.el/issues/49
|
||||
(when (> emacs-major-version 26)
|
||||
(defalias 'ert--print-backtrace 'backtrace-to-string))
|
||||
|
||||
(defun strip-text-properties(txt)
|
||||
"Strip text properties of TXT."
|
||||
(set-text-properties 0 (length txt) nil txt)
|
||||
|
|
Loading…
Add table
Reference in a new issue