(defcustom dired-initial-position-hook nil
"This hook is used to position the point.
-It is run the function `dired-initial-position'."
+It is run by the function `dired-initial-position'."
:group 'dired
:type 'hook
:version "24.4")
(defvar ls-lisp-use-insert-directory-program)
+(defun dired-check-switches (switches short &optional long)
+ "Return non-nil if the string SWITCHES matches LONG or SHORT format."
+ (let (case-fold-search)
+ (and (stringp switches)
+ (string-match-p (concat "\\(\\`\\| \\)-[[:alnum:]]*" short
+ (if long (concat "\\|--" long "\\>") ""))
+ switches))))
+
(defun dired-switches-escape-p (switches)
"Return non-nil if the string SWITCHES contains -b or --escape."
;; Do not match things like "--block-size" that happen to contain "b".
- (string-match-p "\\(\\`\\| \\)-[[:alnum:]]*b\\|--escape\\>" switches))
+ (dired-check-switches switches "b" "escape"))
+
+(defun dired-switches-recursive-p (switches)
+ "Return non-nil if the string SWITCHES contains -R or --recursive."
+ (dired-check-switches switches "R" "recursive"))
(defun dired-insert-directory (dir switches &optional file-list wildcard hdr)
"Insert a directory listing of DIR, Dired style.
(while (< (point) end)
(ignore-errors
(if (not (dired-move-to-filename))
- (put-text-property (line-beginning-position)
- (1+ (line-end-position))
- 'invisible 'dired-hide-details-information)
+ (unless (or (looking-at-p "^$")
+ (looking-at-p dired-subdir-regexp))
+ (put-text-property (line-beginning-position)
+ (1+ (line-end-position))
+ 'invisible 'dired-hide-details-information))
(put-text-property (+ (line-beginning-position) 1) (1- (point))
'invisible 'dired-hide-details-detail)
(add-text-properties
(defun dired-insert-old-subdirs (old-subdir-alist)
"Try to insert all subdirs that were displayed before.
Do so according to the former subdir alist OLD-SUBDIR-ALIST."
- (or (string-match-p "R" dired-actual-switches)
+ (or (dired-switches-recursive-p dired-actual-switches)
(let (elt dir)
(while old-subdir-alist
(setq elt (car old-subdir-alist)
to see why something went wrong.
Type \\[dired-unmark] to Unmark a file or all files of an inserted subdirectory.
Type \\[dired-unmark-backward] to back up one line and unmark or unflag.
-Type \\[dired-do-flagged-delete] to delete (eXecute) the files flagged `D'.
+Type \\[dired-do-flagged-delete] to delete (eXpunge) the files flagged `D'.
Type \\[dired-find-file] to Find the current line's file
(or dired it in another buffer, if it is a directory).
Type \\[dired-find-file-other-window] to find file or Dired directory in Other window.
;; This is the UNIX version.
(if (get-text-property (point) 'dired-filename)
(goto-char (next-single-property-change (point) 'dired-filename))
- (let (opoint file-type executable symlink hidden case-fold-search used-F eol)
- ;; case-fold-search is nil now, so we can test for capital F:
- (setq used-F (string-match-p "F" dired-actual-switches)
+ (let (opoint file-type executable symlink hidden used-F eol)
+ (setq used-F (dired-check-switches dired-actual-switches "F" "classify")
opoint (point)
eol (line-end-position)
hidden (and selective-display
(R-ftp-base-dir-regex
;; Used to expand subdirectory names correctly in recursive
;; ange-ftp listings.
- (and (string-match-p "R" switches)
+ (and (dired-switches-recursive-p switches)
(string-match "\\`/.*:\\(/.*\\)" default-directory)
(concat "\\`" (match-string 1 default-directory)))))
(goto-char (point-min))
;; FIXME document whatever dired-x is doing.
(defun dired-initial-position (dirname)
"Where point should go in a new listing of DIRNAME.
-Point assumed at beginning of new subdir line.
+Point is assumed to be at the beginning of new subdir line.
It runs the hook `dired-initial-position-hook'."
(end-of-line)
(and (featurep 'dired-x) dired-find-subdir
;; If FILES defaulted to the current line's file.
(= (length files) 1))
(apply function args)
- (let ((buffer (get-buffer-create (or buffer-or-name " *Marked Files*"))))
+ (let ((buffer (get-buffer-create (or buffer-or-name " *Marked Files*")))
+ ;; Mark *Marked Files* window as softly-dedicated, to prevent
+ ;; other buffers e.g. *Completions* from reusing it (bug#17554).
+ (display-buffer-mark-dedicated 'soft))
(with-current-buffer buffer
(with-current-buffer-window
buffer
minus any directories explicitly deleted when R is cleared.
To be called first in body of `dired-sort-other', etc."
(cond
- ((and (string-match-p "R" switches)
- (not (string-match-p "R" dired-actual-switches)))
+ ((and (dired-switches-recursive-p switches)
+ (not (dired-switches-recursive-p dired-actual-switches)))
;; Adding -R to ls switches -- save `dired-subdir-alist':
(setq dired-subdir-alist-pre-R dired-subdir-alist))
- ((and (string-match-p "R" dired-actual-switches)
- (not (string-match-p "R" switches)))
+ ((and (dired-switches-recursive-p dired-actual-switches)
+ (not (dired-switches-recursive-p switches)))
;; Deleting -R from ls switches -- revert to pre-R subdirs
;; that are still present:
(setq dired-subdir-alist