[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ls-lisp-insert-directory calls directory-files-and-attributes incorr
From: |
Richard Stallman |
Subject: |
Re: ls-lisp-insert-directory calls directory-files-and-attributes incorrectly |
Date: |
Wed, 01 Oct 2003 17:23:22 -0400 |
Does this change make it work correctly?
*** ls-lisp.el.~1.51.~ Thu Sep 11 09:45:48 2003
--- ls-lisp.el Wed Oct 1 17:05:43 2003
***************
*** 212,218 ****
file switches wildcard full-directory-p)
;; We need the directory in order to find the right handler.
(let ((handler (find-file-name-handler (expand-file-name file)
! 'insert-directory)))
(if handler
(funcall handler 'insert-directory file switches
wildcard full-directory-p)
--- 212,219 ----
file switches wildcard full-directory-p)
;; We need the directory in order to find the right handler.
(let ((handler (find-file-name-handler (expand-file-name file)
! 'insert-directory))
! wildcard-regexp)
(if handler
(funcall handler 'insert-directory file switches
wildcard full-directory-p)
***************
*** 221,236 ****
(setq switches (replace-match "" nil nil switches)))
;; Convert SWITCHES to a list of characters.
(setq switches (delete ?- (append switches nil)))
(if wildcard
! (setq wildcard
(if ls-lisp-support-shell-wildcards
(wildcard-to-regexp (file-name-nondirectory file))
(file-name-nondirectory file))
file (file-name-directory file))
! (if (memq ?B switches) (setq wildcard "[^~]\\'")))
(ls-lisp-insert-directory
file switches (ls-lisp-time-index switches)
! wildcard full-directory-p)
;; Try to insert the amount of free space.
(save-excursion
(goto-char (point-min))
--- 222,246 ----
(setq switches (replace-match "" nil nil switches)))
;; Convert SWITCHES to a list of characters.
(setq switches (delete ?- (append switches nil)))
+ ;; Sometimes we get ".../foo*/" as FILE. While the shell and
+ ;; `ls' don't mind, we certainly do, because it makes us think
+ ;; there is no wildcard, only a directory name.
+ (if (and ls-lisp-support-shell-wildcards
+ (string-match "[[?*]" file))
+ (progn
+ (or (not (eq (aref file (1- (length file))) ?/))
+ (setq file (substring file 0 (1- (length file)))))
+ (setq wildcard t)))
(if wildcard
! (setq wildcard-regexp
(if ls-lisp-support-shell-wildcards
(wildcard-to-regexp (file-name-nondirectory file))
(file-name-nondirectory file))
file (file-name-directory file))
! (if (memq ?B switches) (setq wildcard-regexp "[^~]\\'")))
(ls-lisp-insert-directory
file switches (ls-lisp-time-index switches)
! wildcard-regexp full-directory-p)
;; Try to insert the amount of free space.
(save-excursion
(goto-char (point-min))
***************
*** 244,272 ****
(insert " available " available)))))))))
(defun ls-lisp-insert-directory
! (file switches time-index wildcard full-directory-p)
"Insert directory listing for FILE, formatted according to SWITCHES.
Leaves point after the inserted text. This is an internal function
optionally called by the `ls-lisp.el' version of `insert-directory'.
It is called recursively if the -R switch is used.
SWITCHES is a *list* of characters. TIME-INDEX is the time index into
! file-attributes according to SWITCHES. WILDCARD is nil or an *Emacs
regexp*. FULL-DIRECTORY-P means file is a directory and SWITCHES does
not contain `d', so that a full listing is expected."
! ;; Sometimes we get ".../foo*/" as FILE. While the shell and
! ;; `ls' don't mind, we certainly do, because it makes us think
! ;; there is no wildcard, only a directory name.
! (if (and ls-lisp-support-shell-wildcards
! (string-match "[[?*]" file))
! (progn
! (or (not (eq (aref file (1- (length file))) ?/))
! (setq file (substring file 0 (1- (length file)))))
! (setq wildcard t)))
! (if (or wildcard full-directory-p)
(let* ((dir (file-name-as-directory file))
(default-directory dir) ; so that file-attributes works
(file-alist
! (directory-files-and-attributes dir nil wildcard t))
(now (current-time))
(sum 0)
;; do all bindings here for speed
--- 254,273 ----
(insert " available " available)))))))))
(defun ls-lisp-insert-directory
! (file switches time-index wildcard-regexp full-directory-p)
"Insert directory listing for FILE, formatted according to SWITCHES.
Leaves point after the inserted text. This is an internal function
optionally called by the `ls-lisp.el' version of `insert-directory'.
It is called recursively if the -R switch is used.
SWITCHES is a *list* of characters. TIME-INDEX is the time index into
! file-attributes according to SWITCHES. WILDCARD-REGEXP is nil or an *Emacs
regexp*. FULL-DIRECTORY-P means file is a directory and SWITCHES does
not contain `d', so that a full listing is expected."
! (if (or wildcard-regexp full-directory-p)
(let* ((dir (file-name-as-directory file))
(default-directory dir) ; so that file-attributes works
(file-alist
! (directory-files-and-attributes dir nil wildcard-regexp t))
(now (current-time))
(sum 0)
;; do all bindings here for speed
***************
*** 322,328 ****
(setq elt (expand-file-name (car elt) dir))
(insert "\n" elt ":\n")
(ls-lisp-insert-directory
! elt switches time-index wildcard full-directory-p)))))
;; If not full-directory-p, FILE *must not* end in /, as
;; file-attributes will not recognize a symlink to a directory,
;; so must make it a relative filename as ls does:
--- 323,329 ----
(setq elt (expand-file-name (car elt) dir))
(insert "\n" elt ":\n")
(ls-lisp-insert-directory
! elt switches time-index wildcard-regexp full-directory-p)))))
;; If not full-directory-p, FILE *must not* end in /, as
;; file-attributes will not recognize a symlink to a directory,
;; so must make it a relative filename as ls does:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: ls-lisp-insert-directory calls directory-files-and-attributes incorrectly,
Richard Stallman <=