Function: dired-internal-noselect
dired-internal-noselect is a byte-compiled function defined in
dired.el.gz.
Signature
(dired-internal-noselect DIR-OR-LIST &optional SWITCHES MODE)
Source Code
;; Defined in /usr/src/emacs/lisp/dired.el.gz
(defun dired-internal-noselect (dir-or-list &optional switches mode)
;; If DIR-OR-LIST is a string and there is an existing dired buffer
;; for it, just leave buffer as it is (don't even call dired-revert).
;; This saves time especially for deep trees or with ange-ftp.
;; The user can type `g' easily, and it is more consistent with find-file.
;; But if SWITCHES are given they are probably different from the
;; buffer's old value, so call dired-sort-other, which does
;; revert the buffer.
;; Revert the buffer if DIR-OR-LIST is a cons or `dired-directory'
;; is a cons and DIR-OR-LIST is a string.
;; A pity we can't possibly do "Directory has changed - refresh? "
;; like find-file does.
;; Optional argument MODE is passed to dired-find-buffer-nocreate,
;; see there.
(let* ((old-buf (current-buffer))
(dirname (if (consp dir-or-list) (car dir-or-list) dir-or-list))
;; Look for an existing buffer.
(buffer (dired-find-buffer-nocreate dirname mode))
;; Note that buffer already is in dired-mode, if found.
(new-buffer-p (null buffer)))
(or buffer
(setq buffer (create-file-buffer dirname)))
(set-buffer buffer)
(if (not new-buffer-p) ; existing buffer ...
(cond (switches ; ... but new switches
;; file list may have changed
(setq dired-directory dir-or-list)
;; this calls dired-revert
(dired-sort-other switches))
;; Always revert when `dir-or-list' is a cons. Also revert
;; if `dired-directory' is a cons but `dir-or-list' is not.
((or (consp dir-or-list) (consp dired-directory))
(setq dired-directory dir-or-list)
(revert-buffer))
;; Always revert regardless of whether it has changed or not.
((eq dired-auto-revert-buffer t)
(revert-buffer))
;; Revert when predicate function returns non-nil.
((functionp dired-auto-revert-buffer)
(when (funcall dired-auto-revert-buffer dirname)
(revert-buffer)
(message "Changed directory automatically updated")))
;; If directory has changed on disk, offer to revert.
((when (dired-directory-changed-p dirname)
(message "%s"
(substitute-command-keys
"Directory has changed on disk; type \\[revert-buffer] to update Dired")))))
;; Else a new buffer
(setq default-directory
(or (car-safe (insert-directory-wildcard-in-dir-p dirname))
;; We can do this unconditionally
;; because dired-noselect ensures that the name
;; is passed in directory name syntax
;; if it was the name of a directory at all.
(file-name-directory dirname)))
(or switches
(setq switches (connection-local-value dired-listing-switches)))
(if mode (funcall mode)
(dired-mode dir-or-list switches))
;; default-directory and dired-actual-switches are set now
;; (buffer-local), so we can call dired-readin:
(let ((failed t))
(unwind-protect
(progn (dired-readin)
(setq failed nil))
;; dired-readin can fail if parent directories are inaccessible.
;; Don't leave an empty buffer around in that case.
(if failed (kill-buffer buffer))))
(goto-char (point-min))
(dired-initial-position dirname))
(when (consp dired-directory)
(dired--align-all-files))
;; Pop up a warning if the Dired listing displays a literal newline.
;; We do this here in order to get the warning not only when
;; interactively invoking `dired' on a directory, but also e.g. when
;; passing the directory name as a command line argument when
;; starting Emacs from the shell.
(unless (or dired-auto-toggle-b-switch
(dired-switches-escape-p dired-listing-switches)
(dired-switches-escape-p dired-actual-switches))
(when (dired--filename-with-newline-p)
(dired--display-filename-with-newline-warning buffer)))
(set-buffer old-buf)
buffer))