diff --git a/etc/NEWS b/etc/NEWS index 83fa28b325..596e52b4a2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -2002,7 +2002,9 @@ the buffer will take you to that directory. *** 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. In Wdired this can +be used when the new user option 'wdired-search-replace-filenames' is +non-nil (which is the default). ** Bookmarks diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index 94b2baf72d..06f0b86fc4 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el @@ -3544,7 +3544,8 @@ dired-isearch-search-filenames 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 () diff --git a/lisp/dired.el b/lisp/dired.el index f45d215ed6..fa06c8fd44 100644 --- a/lisp/dired.el +++ b/lisp/dired.el @@ -786,7 +786,7 @@ dired-font-lock-keywords 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 @@ -798,7 +798,7 @@ dired-font-lock-keywords '(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 @@ -812,7 +812,7 @@ dired-font-lock-keywords '(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 diff --git a/lisp/isearch.el b/lisp/isearch.el index 31fcf01949..7fdae06c96 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -4512,21 +4522,34 @@ isearch-search-fun-in-noncontiguous-region (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. +these list of PROPERTIES in the current buffer. The argument SEARCH-FUN provides the function to search text, and defaults to the value of `isearch-search-fun-default' when nil." (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)) + (ensure-list properties)))) + (lambda (pos) + (let ((pos-list (if isearch-forward + (mapcar (lambda (property) + (next-single-property-change + pos property)) + (ensure-list properties)) + (mapcar (lambda (property) + (previous-single-property-change + pos property)) + (ensure-list 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)