Subject: Re: bug#73046: 29.4; Emacs 100% CPU usage for several seconds when opening dired buffer over TRAMP

From: Suhail Singh <[email-masked]>
Date: Sun, 08 Sep 2024 11:09:38 -0400

Michael Albinus <[email-masked]> writes:

>     ;; 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)))))
> +                 (if (not (connection-local-value dired-check-symlinks))
> +                     (search-forward-regexp
> +                      "\\(.+-> ?\\)\\(.+\\)" end t)
> +                   (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))))))

Minor nitpick: given the comment for this section (which seems to
suggest this only applies to symlinks to non-directories), wouldn't it
be "better" to simply have something like below instead for the if-then
case?  I.e., a separate entry in dired-font-lock-keywords for the
failsafe.

#+begin_src emacs-lisp
  ;; Generic face for symbolic links
  (list dired-re-sym
        (when (not (connection-local-value dired-check-symlinks))
          '(".+" (dired-move-to-filename) nil (0 dired-symlink-face))))
#+end_src

This is essentially what I have in my config today, and seems to behave
as expected.

-- 
Suhail