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

From: Michael Albinus <[email-masked]>
Date: Sun, 08 Sep 2024 17:19:59 +0200

Suhail Singh <[email-masked]> writes:

Hi Suhail,

>>     ;; 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.

Possible, but I don't see that one version is "better" or "worse" than
the other. So I don't see a need to change it.

Best regards, Michael.