diff lisp/dired.el @ 111826:b665689b1c29

Smarter initialization for dired-use-ls-dired (Bug#7546). * lisp/dired.el (dired-use-ls-dired): Set default to a special "unspecified" value. (dired-insert-directory): When called the first time, check whether "ls --dired" succeeds and set dired-use-ls-dired (Bug#7546).
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 04 Dec 2010 17:10:12 -0500
parents 141d3f14d8c3
children c00190a8c8ef
line wrap: on
line diff
--- a/lisp/dired.el	Sat Dec 04 20:50:39 2010 +0100
+++ b/lisp/dired.el	Sat Dec 04 17:10:12 2010 -0500
@@ -80,8 +80,11 @@
       "/etc/chown")))
   "Name of chown command (usually `chown' or `/etc/chown').")
 
-(defvar dired-use-ls-dired (not (not (string-match "gnu" system-configuration)))
-  "Non-nil means Dired should use `ls --dired'.")
+(defvar dired-use-ls-dired 'unspecified
+  "Non-nil means Dired should use \"ls --dired\".
+The special value of `unspecified' means to check explicitly, and
+save the result in this variable.  This is performed the first
+time `dired-insert-directory' is called.")
 
 (defvar dired-chmod-program "chmod"
   "Name of chmod command (usually `chmod').")
@@ -1057,7 +1060,14 @@
   (let ((opoint (point))
 	(process-environment (copy-sequence process-environment))
 	end)
-    (if (or dired-use-ls-dired (file-remote-p dir))
+    (if (or (if (eq dired-use-ls-dired 'unspecified)
+		;; Check whether "ls --dired" gives exit code 0, and
+		;; save the answer in `dired-use-ls-dired'.
+		(setq dired-use-ls-dired
+		      (eq (call-process insert-directory-program nil nil nil "--dired")
+			  0))
+	      dired-use-ls-dired)
+	    (file-remote-p dir))
 	(setq switches (concat "--dired " switches)))
     ;; We used to specify the C locale here, to force English month names;
     ;; but this should not be necessary any more,