*** Search and replace in Dired/Wdired supports more regexps.
For example, the regexp ".*" will match only characters that are part
of the file name. Also "^.*$" can be used to match at the beginning
-of the file name and at the end of the file name.
+of the file name and at the end of the file name. This is used only
+when searching on file names. In Wdired this can be used when the new
+user option 'wdired-search-replace-filenames' is non-nil (which is the
+default).
** Bookmarks
The returned function narrows the search to match the search string
only as part of a file name enclosed by the text property `dired-filename'.
It's intended to override the default search function."
- (isearch-search-fun-in-text-property (funcall orig-fun) 'dired-filename))
+ (isearch-search-fun-in-text-property
+ (funcall orig-fun) '(dired-filename dired-symlink-filename)))
;;;###autoload
(defun dired-isearch-filenames ()
nil
'(1 'dired-broken-symlink)
'(2 dired-symlink-face)
- '(3 'dired-broken-symlink)))
+ '(3 '(face dired-broken-symlink dired-symlink-filename t))))
;;
;; Symbolic link to a directory.
(list dired-re-sym
'(dired-move-to-filename)
nil
'(1 dired-symlink-face)
- '(2 dired-directory-face)))
+ '(2 '(face dired-directory-face dired-symlink-filename t))))
;;
;; Symbolic link to a non-directory.
(list dired-re-sym
'(dired-move-to-filename)
nil
'(1 dired-symlink-face)
- '(2 'default)))
+ '(2 '(face default dired-symlink-filename t))))
;;
;; Sockets, pipes, block devices, char devices.
(list dired-re-special
(setq bounds (cdr bounds))))
found))))
-(defun isearch-search-fun-in-text-property (search-fun property)
- "Return the function to search inside text that has the specified PROPERTY.
+(defun isearch-search-fun-in-text-property (search-fun properties)
+ "Return the function to search inside text that has the specified PROPERTIES.
The function will limit the search for matches only inside text which has
-this property in the current buffer.
+at least one of the text PROPERTIES.
The argument SEARCH-FUN provides the function to search text, and
defaults to the value of `isearch-search-fun-default' when nil."
+ (setq properties (ensure-list properties))
(apply-partially
#'search-within-boundaries
search-fun
- (lambda (pos) (get-text-property (if isearch-forward pos
- (max (1- pos) (point-min)))
- property))
- (lambda (pos) (if isearch-forward
- (next-single-property-change pos property)
- (previous-single-property-change pos property)))))
+ (lambda (pos)
+ (let ((pos (if isearch-forward pos (max (1- pos) (point-min)))))
+ (seq-some (lambda (property)
+ (get-text-property pos property))
+ properties)))
+ (lambda (pos)
+ (let ((pos-list (if isearch-forward
+ (mapcar (lambda (property)
+ (next-single-property-change
+ pos property))
+ properties)
+ (mapcar (lambda (property)
+ (previous-single-property-change
+ pos property))
+ properties))))
+ (setq pos-list (delq nil pos-list))
+ (when pos-list (if isearch-forward
+ (seq-min pos-list)
+ (seq-max pos-list)))))))
(defun search-within-boundaries ( search-fun get-fun next-fun
string &optional bound noerror count)