Suhail Singh <suhailsingh...@gmail.com> writes: Hi,
> The above observations seem consistent with Michael's comments above > regd. font-lock checks for "Broken Symbolink link" and "Symbolic link to > a directory". As such, if Michael's proposal below is implemented I > believe it would be an adequate fix to the issue: > >>>> I believe it would be helpful to suppress these checks via a user >>>> option. And no, the checks shouldn't be suppressed for remote >>>> directories in general, on a fast connection they are valuable. I gave it a try, see appended patch. There's a new user option `dired-highlight-symlinks'. If non-nil (the default), symlinks are highlighted the same way as now. With a nil value, they aren't. You can switch this option on and off globally. However, it would be better to do this host-wise. For this, we have connection-local variables. The following code snippet in your ".emacs" switches the option off for the remote host "remotehost". --8<---------------cut here---------------start------------->8--- (connection-local-set-profile-variables 'my-dired-profile '((dired-highlight-symlinks . nil))) (connection-local-set-profiles '(:application tramp :machine "remotehost") 'my-dired-profile) --8<---------------cut here---------------end--------------->8--- Comments? Best regards, Michael.
diff --git a/lisp/dired.el b/lisp/dired.el index 0d526dfc376..53d6d213951 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -738,6 +738,13 @@ dired-ignored-face ;;; Font-lock +(defcustom dired-highlight-symlinks t + "Whether symlinks shall use an own face. +Set it to nil for remote directories, which suffer from a slow connection." + :type 'boolean + :group 'dired + :version "31.1") + (defvar dired-font-lock-keywords (list ;; @@ -815,11 +822,13 @@ dired-font-lock-keywords ;; 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)))) + (when (connection-local-value dired-highlight-symlinks) + (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) @@ -829,10 +838,12 @@ dired-font-lock-keywords ;; Symbolic link to a directory. (list dired-re-sym (list (lambda (end) - (when-let* ((file (dired-file-name-at-point)) - (truename (ignore-errors (file-truename file)))) - (and (file-directory-p truename) - (search-forward-regexp "\\(.+-> ?\\)\\(.+\\)" end t)))) + (when (connection-local-value dired-highlight-symlinks) + (when-let* ((file (dired-file-name-at-point)) + (truename (ignore-errors (file-truename file)))) + (and (file-directory-p truename) + (search-forward-regexp + "\\(.+-> ?\\)\\(.+\\)" end t))))) '(dired-move-to-filename) nil '(1 dired-symlink-face) @@ -841,12 +852,13 @@ dired-font-lock-keywords ;; Symbolic link to a non-directory. (list dired-re-sym (list (lambda (end) - (when-let ((file (dired-file-name-at-point))) - (let ((truename (ignore-errors (file-truename file)))) - (and (or (not truename) - (not (file-directory-p truename))) - (search-forward-regexp "\\(.+-> ?\\)\\(.+\\)" - end t))))) + (when (connection-local-value dired-highlight-symlinks) + (when-let ((file (dired-file-name-at-point))) + (let ((truename (ignore-errors (file-truename file)))) + (and (or (not truename) + (not (file-directory-p truename))) + (search-forward-regexp + "\\(.+-> ?\\)\\(.+\\)" end t)))))) '(dired-move-to-filename) nil '(1 dired-symlink-face)