summaryrefslogtreecommitdiff
path: root/lisp/dired.el
diff options
context:
space:
mode:
authorTino Calancha <tino.calancha@gmail.com>2020-08-27 11:51:30 +0200
committerTino Calancha <tino.calancha@gmail.com>2020-08-27 11:52:38 +0200
commitbdc1f193470633adcd860db4b05a9fe951bd375b (patch)
treeeae80782569cd3d5da7e8045133c6f861003512d /lisp/dired.el
parentf40260f121d41d50fda428e789d22b125e24f407 (diff)
downloademacs-bdc1f193470633adcd860db4b05a9fe951bd375b.tar.gz
dired: Show broken/circular links w/ different face
* lisp/dired.el (dired-broken-symlink): New face. (dired-font-lock-keywords): Use it for broken/circular links (Bug#39145). * etc/NEWS (Changes in Specialized Modes and Packages in Emacs 28.1): Announce this change.
Diffstat (limited to 'lisp/dired.el')
-rw-r--r--lisp/dired.el22
1 files changed, 22 insertions, 0 deletions
diff --git a/lisp/dired.el b/lisp/dired.el
index 08d04688519..d122869a5e3 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -534,6 +534,14 @@ Subexpression 2 must end right before the \\n.")
(defvar dired-symlink-face 'dired-symlink
"Face name used for symbolic links.")
+(defface dired-broken-symlink
+ '((((class color))
+ :foreground "yellow1" :background "red1" :weight bold)
+ (t :weight bold :slant italic :underline t))
+ "Face used for broken symbolic links."
+ :group 'dired-faces
+ :version "28.1")
+
(defface dired-special
'((t (:inherit font-lock-variable-name-face)))
"Face used for sockets, pipes, block devices and char devices."
@@ -597,6 +605,20 @@ Subexpression 2 must end right before the \\n.")
(list dired-re-dir
'(".+" (dired-move-to-filename) nil (0 dired-directory-face)))
;;
+ ;; Broken Symbolic link.
+ (list dired-re-sym
+ (list (lambda (end)
+ (let* ((file (dired-file-name-at-point))
+ (truename (ignore-errors (file-truename file))))
+ ;; either not existent target or circular link
+ (and (not (and truename (file-exists-p truename)))
+ (search-forward-regexp "\\(.+\\) \\(->\\) ?\\(.+\\)" end t))))
+ '(dired-move-to-filename)
+ nil
+ '(1 'dired-broken-symlink)
+ '(2 dired-symlink-face)
+ '(3 'dired-broken-symlink)))
+ ;;
;; Symbolic link to a directory.
(list dired-re-sym
(list (lambda (end)