(menu-bar-tools-menu): Read and send mail entries are not constants. (Bug#4913)
[bpt/emacs.git] / lisp / ls-lisp.el
index 08d07eb..ee5db5b 100644 (file)
@@ -1,7 +1,7 @@
 ;;; ls-lisp.el --- emulate insert-directory completely in Emacs Lisp
 
 ;; Copyright (C) 1992, 1994, 2000, 2001, 2002, 2003, 2004,
-;;   2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;;   2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
 ;; Modified by: Francis J. Wright <F.J.Wright@maths.qmw.ac.uk>
@@ -30,7 +30,7 @@
 ;; This file redefines the function `insert-directory' to implement it
 ;; directly from Emacs lisp, without running ls in a subprocess.  It
 ;; is useful if you cannot afford to fork Emacs on a real memory UNIX,
-;; under VMS or other non-UNIX platforms if you don't have the ls
+;; or other non-UNIX platforms if you don't have the ls
 ;; program, or if you want a different format from what ls offers.
 
 ;; This function can use regexps instead of shell wildcards.  If you
   :group 'dired)
 
 (defcustom ls-lisp-emulation
-  (cond ((eq system-type 'macos) 'MacOS)
-       ;; ((eq system-type 'windows-nt) 'MS-Windows)
+  (cond ;; ((eq system-type 'windows-nt) 'MS-Windows)
        ((memq system-type
-              '(hpux usg-unix-v unisoft-unix irix berkeley-unix))
+              '(hpux usg-unix-v irix berkeley-unix))
         'UNIX))                        ; very similar to GNU
   ;; Anything else defaults to nil, meaning GNU.
-  "*Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
+  "Platform to emulate: GNU (default), MacOS, MS-Windows, UNIX.
 Corresponding value is one of the atoms: nil, MacOS, MS-Windows, UNIX.
 Sets default values for: `ls-lisp-ignore-case', `ls-lisp-dirs-first',
 `ls-lisp-verbosity'.  Need not match actual platform.  Changing this
@@ -91,12 +90,12 @@ option will have no effect until you restart Emacs."
   ;; Name change for consistency with other option names.
   (or (memq ls-lisp-emulation '(MS-Windows MacOS))
       (and (boundp 'ls-lisp-dired-ignore-case) ls-lisp-dired-ignore-case))
-  "*Non-nil causes ls-lisp alphabetic sorting to ignore case."
+  "Non-nil causes ls-lisp alphabetic sorting to ignore case."
   :type 'boolean
   :group 'ls-lisp)
 
 (defcustom ls-lisp-dirs-first (eq ls-lisp-emulation 'MS-Windows)
-  "*Non-nil causes ls-lisp to sort directories first in any ordering.
+  "Non-nil causes ls-lisp to sort directories first in any ordering.
 \(Or last if it is reversed.)  Follows Microsoft Windows Explorer."
   ;; Functionality suggested by Chris McMahan <cmcmahan@one.net>
   :type 'boolean
@@ -109,7 +108,7 @@ option will have no effect until you restart Emacs."
             '(links)))                 ; distinguish NT/2K from 9x
        ((eq ls-lisp-emulation 'UNIX) '(links uid)) ; UNIX ls
        (t '(links uid gid)))           ; GNU ls
-  "*A list of optional file attributes that ls-lisp should display.
+  "A list of optional file attributes that ls-lisp should display.
 It should contain none or more of the symbols: links, uid, gid.
 A value of nil (or an empty list) means display none of them.
 
@@ -129,8 +128,8 @@ if emulation is GNU then default is `(links uid gid)'."
   :group 'ls-lisp)
 
 (defcustom ls-lisp-use-insert-directory-program
-  (not (memq system-type '(macos ms-dos windows-nt)))
-  "*Non-nil causes ls-lisp to revert back to using `insert-directory-program'.
+  (not (memq system-type '(ms-dos windows-nt)))
+  "Non-nil causes ls-lisp to revert back to using `insert-directory-program'.
 This is useful on platforms where ls-lisp is dumped into Emacs, such as
 Microsoft Windows, but you would still like to use a program to list
 the contents of a directory."
@@ -140,7 +139,7 @@ the contents of a directory."
 ;;; Autoloaded because it is let-bound in `recover-session', `mail-recover-1'.
 ;;;###autoload
 (defcustom ls-lisp-support-shell-wildcards t
-  "*Non-nil means ls-lisp treats file patterns as shell wildcards.
+  "Non-nil means ls-lisp treats file patterns as shell wildcards.
 Otherwise they are treated as Emacs regexps (for backward compatibility)."
   :type 'boolean
   :group 'ls-lisp)
@@ -148,7 +147,7 @@ Otherwise they are treated as Emacs regexps (for backward compatibility)."
 (defcustom ls-lisp-format-time-list
   '("%b %e %H:%M"
     "%b %e  %Y")
-  "*List of `format-time-string' specs to display file time stamps.
+  "List of `format-time-string' specs to display file time stamps.
 These specs are used ONLY if a valid locale can not be determined.
 
 If `ls-lisp-use-localized-time-format' is non-nil, these specs are used
@@ -168,7 +167,7 @@ current year. The OLD-TIME-FORMAT is used for older files.  To use ISO
   :group 'ls-lisp)
 
 (defcustom ls-lisp-use-localized-time-format nil
-  "*Non-nil causes ls-lisp to use `ls-lisp-format-time-list' even if
+  "Non-nil causes ls-lisp to use `ls-lisp-format-time-list' even if
 a valid locale is specified.
 
 WARNING: Using localized date/time format might cause Dired columns
@@ -390,7 +389,10 @@ not contain `d', so that a full listing is expected."
              (setq elt (car file-alist)
                    file-alist (cdr file-alist))
              (when (and (eq (cadr elt) t) ; directory
-                        (not (string-match "\\`\\.\\.?\\'" (car elt))))
+                        ;; Under -F, we have already decorated all
+                        ;; directories, including "." and "..", with
+                        ;; a /, so allow for that as well.
+                        (not (string-match "\\`\\.\\.?/?\\'" (car elt))))
                (setq elt (expand-file-name (car elt) dir))
                (insert "\n" elt ":\n")
                (ls-lisp-insert-directory
@@ -531,13 +533,17 @@ for directory, string (name linked to) for symbolic link, or nil."
         (type (cadr filedata)))
     (cond (type
           (cons
-           (concat file-name (if (eq type t) "/" "@"))
+           (concat (propertize file-name 'dired-filename t)
+                   (if (eq type t) "/" "@"))
            (cdr filedata)))
          ((string-match "x" (nth 9 filedata))
           (cons
-           (concat file-name "*")
+           (concat (propertize file-name 'dired-filename t) "*")
            (cdr filedata)))
-         (t filedata))))
+         (t
+          (cons
+           (propertize file-name 'dired-filename t)
+           (cdr filedata))))))
 
 (defun ls-lisp-extension (filename)
   "Return extension of FILENAME (ignoring any version extension)
@@ -632,7 +638,9 @@ SWITCHES, TIME-INDEX and NOW give the full switch list and time data."
            " "
            (ls-lisp-format-time file-attr time-index now)
            " "
-           (propertize file-name 'dired-filename t)
+           (if (not (memq ?F switches)) ; ls-lisp-classify already did that
+               (propertize file-name 'dired-filename t)
+             file-name)
            (if (stringp file-type)     ; is a symbolic link
                (concat " -> " file-type))
            "\n"