Mercurial > emacs
changeset 107145:541b767fb366
* files.el (insert-directory): When WILDCARD-REGEXP and
FULL-DIRECTORY-P are nil, insert the file entry instead of the
whole directory. (Bug#5551)
* net/ange-ftp.el (ange-ftp-insert-directory): Insert " " for
dired's alignment sanity. (Bug#5516)
author | Michael Albinus <albinus@detlef> |
---|---|
date | Sun, 14 Feb 2010 10:23:52 +0100 |
parents | 0811f079d15e |
children | 149c0b848923 b6358fb91b0b 3417b6095672 529eb05b1a74 |
files | lisp/ChangeLog lisp/files.el lisp/net/ange-ftp.el |
diffstat | 3 files changed, 62 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Feb 14 02:20:31 2010 +0200 +++ b/lisp/ChangeLog Sun Feb 14 10:23:52 2010 +0100 @@ -1,3 +1,12 @@ +2010-02-14 Michael Albinus <michael.albinus@gmx.de> + + * files.el (insert-directory): When WILDCARD-REGEXP and + FULL-DIRECTORY-P are nil, insert the file entry instead of the + whole directory. (Bug#5551) + + * net/ange-ftp.el (ange-ftp-insert-directory): Insert " " for + dired's alignment sanity. (Bug#5516) + 2010-02-14 Juri Linkov <juri@jurta.org> * man.el (Man-fontify-manpage, Man-cleanup-manpage):
--- a/lisp/files.el Sun Feb 14 02:20:31 2010 +0200 +++ b/lisp/files.el Sun Feb 14 10:23:52 2010 +0100 @@ -5699,6 +5699,11 @@ (shell-quote-wildcard-pattern pattern)))) ;; SunOS 4.1.3, SVr4 and others need the "." to list the ;; directory if FILE is a symbolic link. + (unless full-directory-p + (setq switches + (if (stringp switches) + (concat switches " -d") + (add-to-list 'switches "-d" 'append)))) (apply 'call-process insert-directory-program nil t nil (append
--- a/lisp/net/ange-ftp.el Sun Feb 14 02:20:31 2010 +0200 +++ b/lisp/net/ange-ftp.el Sun Feb 14 10:23:52 2010 +0100 @@ -4517,44 +4517,54 @@ ;; because some FTP servers react to "ls foo" by listing the symlink foo ;; rather than the directory it points to. Now that ange-ftp-ls uses ;; "cd foo; ls" instead, this is not necesssary any more. - (insert - (cond - (wildcard - (let ((default-directory (file-name-directory file))) - (ange-ftp-ls (file-name-nondirectory file) switches nil nil t))) - (full - (ange-ftp-ls file switches 'parse)) - (t - ;; If `full' is nil we're going to do `ls' for a single file. - ;; Problem is that for various reasons, ange-ftp-ls needs to cd and - ;; then do an ls of current dir, which obviously won't work if we - ;; want to ls a file. So instead, we get a full listing of the - ;; parent directory and extract the line corresponding to `file'. - (when (string-match "-?d\\'" switches) - ;; Remove "d" which dired added to `switches'. - (setq switches (substring switches 0 (match-beginning 0)))) - (setq file (directory-file-name file)) - (let* ((dirlist (ange-ftp-ls (or (file-name-directory file) ".") - switches 'parse)) - (filename (file-name-nondirectory file)) - (case-fold-search nil)) - ;; FIXME: This presumes a particular output format, which is - ;; basically Unix. - (if (string-match (concat "^.+[^ ] " (regexp-quote filename) - "\\( -> .*\\)?[@/*=]?\n") dirlist) - (match-string 0 dirlist) - ""))))) - - ;; The inserted file could be from somewhere else. - (when (and (not wildcard) (not full) - (search-backward - (if (zerop (length (file-name-nondirectory - (expand-file-name file)))) - "." - (file-name-nondirectory file)) - nil 'noerror)) - (replace-match (file-relative-name (expand-file-name file)) t) - (goto-char (point-max))))) + (let ((beg (point)) + (end (point-marker))) + (set-marker-insertion-type end t) + (insert + (cond + (wildcard + (let ((default-directory (file-name-directory file))) + (ange-ftp-ls (file-name-nondirectory file) switches nil nil t))) + (full + (ange-ftp-ls file switches 'parse)) + (t + ;; If `full' is nil we're going to do `ls' for a single file. + ;; Problem is that for various reasons, ange-ftp-ls needs to cd and + ;; then do an ls of current dir, which obviously won't work if we + ;; want to ls a file. So instead, we get a full listing of the + ;; parent directory and extract the line corresponding to `file'. + (when (string-match "-?d\\'" switches) + ;; Remove "d" which dired added to `switches'. + (setq switches (substring switches 0 (match-beginning 0)))) + (setq file (directory-file-name file)) + (let* ((dirlist (ange-ftp-ls (or (file-name-directory file) ".") + switches 'parse)) + (filename (file-name-nondirectory file)) + (case-fold-search nil)) + ;; FIXME: This presumes a particular output format, which is + ;; basically Unix. + (if (string-match (concat "^.+[^ ] " (regexp-quote filename) + "\\( -> .*\\)?[@/*=]?\n") dirlist) + (match-string 0 dirlist) + ""))))) + + ;; Insert " " for dired's alignment sanity. + (goto-char beg) + (while (re-search-forward "^\\(\\S-\\)" end 'move) + (replace-match " \\1")) + + ;; The inserted file could be from somewhere else. + (when (and (not wildcard) (not full) + (search-backward + (if (zerop (length (file-name-nondirectory + (expand-file-name file)))) + "." + (file-name-nondirectory file)) + nil 'noerror)) + (replace-match (file-relative-name (expand-file-name file)) t) + (goto-char end)) + + (set-marker end nil)))) (defun ange-ftp-dired-uncache (dir) (if (ange-ftp-ftp-name (expand-file-name dir))