forked from Github/emacs
Use a list of text properties to search in symlink filenames in Wdired
* lisp/dired-aux.el (dired-isearch-search-filenames): Use text properties 'dired-filename' and 'dired-symlink-filename'. * lisp/dired.el (dired-font-lock-keywords): Add text property 'dired-symlink-filename' on symlinks. * lisp/isearch.el (isearch-search-fun-in-text-property): Support a list of text properties (bug#57293).
This commit is contained in:
parent
f427b985a1
commit
0ab49d46dd
4 changed files with 32 additions and 14 deletions
5
etc/NEWS
5
etc/NEWS
|
|
@ -2023,7 +2023,10 @@ 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. 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
|
||||
|
||||
|
|
|
|||
|
|
@ -3544,7 +3544,8 @@ Intended to be added to `isearch-mode-hook'."
|
|||
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 ()
|
||||
|
|
|
|||
|
|
@ -786,7 +786,7 @@ Subexpression 2 must end right before the \\n.")
|
|||
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 @@ Subexpression 2 must end right before the \\n.")
|
|||
'(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 @@ Subexpression 2 must end right before the \\n.")
|
|||
'(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
|
||||
|
|
|
|||
|
|
@ -4512,21 +4512,35 @@ is a list of cons cells of the form (START . END)."
|
|||
(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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue