Function: tramp-handle-insert-directory

tramp-handle-insert-directory is a byte-compiled function defined in tramp.el.gz.

Signature

(tramp-handle-insert-directory FILENAME SWITCHES &optional WILDCARD FULL-DIRECTORY-P)

Documentation

Like insert-directory for Tramp files.

Source Code

;; Defined in /usr/src/emacs/lisp/net/tramp.el.gz
(defun tramp-handle-insert-directory
    (filename switches &optional wildcard full-directory-p)
  "Like `insert-directory' for Tramp files."
  (require 'ls-lisp)
  (defvar ls-lisp-dirs-first)
  (defvar ls-lisp-emulation)
  (defvar ls-lisp-ignore-case)
  (defvar ls-lisp-use-insert-directory-program)
  (defvar ls-lisp-verbosity)
  (unless switches (setq switches ""))
  ;; Mark trailing "/".
  (when (and (directory-name-p filename)
	     (not full-directory-p))
    (setq switches (concat switches "F")))
  ;; Check, whether directory is accessible.
  (unless wildcard
    (access-file filename "Reading directory"))
  (with-parsed-tramp-file-name (expand-file-name filename) nil
    (with-tramp-progress-reporter v 0 (format "Opening directory %s" filename)
      ;; We bind `ls-lisp-emulation' to nil (which is GNU).
      ;; `ls-lisp-set-options' modifies `ls-lisp-ignore-case',
      ;; `ls-lisp-dirs-first' and `ls-lisp-verbosity', so we bind them
      ;; as well.  We don't want to use `insert-directory-program'.
      (let (ls-lisp-emulation ls-lisp-ignore-case ls-lisp-dirs-first
	    ls-lisp-verbosity ls-lisp-use-insert-directory-program start)
	;; Set proper options based on `ls-lisp-emulation'.
	(tramp-compat-funcall 'ls-lisp-set-options)
	(tramp-run-real-handler
	 #'insert-directory
	 (list filename switches wildcard full-directory-p))
	;; `ls-lisp' always returns full listings.  We must remove
	;; superfluous parts.
	(unless (tramp-compat-string-search "l" switches)
	  (save-excursion
	    (goto-char (point-min))
	    (while (setq start
			 (text-property-not-all
			  (point) (line-end-position) 'dired-filename t))
	      (delete-region
	       start
	       (or (text-property-any
		    start (line-end-position) 'dired-filename t)
		   (line-end-position)))
	      (if (= (line-beginning-position) (line-end-position))
		  ;; Empty line.
		  (delete-region (point) (progn (forward-line) (point)))
		(forward-line)))))))))