diff options
Diffstat (limited to 'lisp')
| -rw-r--r-- | lisp/dired.el | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/lisp/dired.el b/lisp/dired.el index d1ec3f36b18..05789a35166 100644 --- a/lisp/dired.el +++ b/lisp/dired.el | |||
| @@ -517,9 +517,31 @@ Subexpression 2 must end right before the \\n.") | |||
| 517 | (list dired-re-dir | 517 | (list dired-re-dir |
| 518 | '(".+" (dired-move-to-filename) nil (0 dired-directory-face))) | 518 | '(".+" (dired-move-to-filename) nil (0 dired-directory-face))) |
| 519 | ;; | 519 | ;; |
| 520 | ;; Symbolic links. | 520 | ;; Symbolic link to a directory. |
| 521 | (list dired-re-sym | 521 | (list dired-re-sym |
| 522 | '(".+" (dired-move-to-filename) nil (0 dired-symlink-face))) | 522 | (list (lambda (end) |
| 523 | (when-let* ((file (dired-file-name-at-point)) | ||
| 524 | (truename (ignore-errors (file-truename file)))) | ||
| 525 | (and (file-directory-p truename) | ||
| 526 | (search-forward-regexp "\\(.+-> ?\\)\\(.+\\)" end t)))) | ||
| 527 | '(dired-move-to-filename) | ||
| 528 | nil | ||
| 529 | '(1 dired-symlink-face) | ||
| 530 | '(2 dired-directory-face))) | ||
| 531 | ;; | ||
| 532 | ;; Symbolic link to a non-directory. | ||
| 533 | (list dired-re-sym | ||
| 534 | (list (lambda (end) | ||
| 535 | (when-let ((file (dired-file-name-at-point))) | ||
| 536 | (let ((truename (ignore-errors (file-truename file)))) | ||
| 537 | (and (or (not truename) | ||
| 538 | (not (file-directory-p truename))) | ||
| 539 | (search-forward-regexp "\\(.+-> ?\\)\\(.+\\)" | ||
| 540 | end t))))) | ||
| 541 | '(dired-move-to-filename) | ||
| 542 | nil | ||
| 543 | '(1 dired-symlink-face) | ||
| 544 | '(2 'default))) | ||
| 523 | ;; | 545 | ;; |
| 524 | ;; Sockets, pipes, block devices, char devices. | 546 | ;; Sockets, pipes, block devices, char devices. |
| 525 | (list dired-re-special | 547 | (list dired-re-special |