(filter-buffer-substring): Add NOPROPS arg, so

it can also replace buffer-substring-no-properties.
This commit is contained in:
Kim F. Storm 2006-04-09 23:03:48 +00:00
parent e691d082f6
commit 398c9ffba6

View file

@ -2332,7 +2332,7 @@ return value of `filter-buffer-substring'.
If this variable is nil, no filtering is performed.")
(defun filter-buffer-substring (beg end &optional delete)
(defun filter-buffer-substring (beg end &optional delete noprops)
"Return the buffer substring between BEG and END, after filtering.
The buffer substring is passed through each of the filter
functions in `buffer-substring-filters', and the value from the
@ -2342,21 +2342,36 @@ is nil, the buffer substring is returned unaltered.
If DELETE is non-nil, the text between BEG and END is deleted
from the buffer.
If NOPROPS is non-nil, final string returned does not include
text properties, while the string passed to the filters still
includes text properties from the buffer text.
Point is temporarily set to BEG before calling
`buffer-substring-filters', in case the functions need to know
where the text came from.
This function should be used instead of `buffer-substring' or
`delete-and-extract-region' when you want to allow filtering to
take place. For example, major or minor modes can use
`buffer-substring-filters' to extract characters that are special
to a buffer, and should not be copied into other buffers."
(save-excursion
(goto-char beg)
(let ((string (if delete (delete-and-extract-region beg end)
(buffer-substring beg end))))
(dolist (filter buffer-substring-filters string)
(setq string (funcall filter string))))))
This function should be used instead of `buffer-substring',
`buffer-substring-no-properties', or `delete-and-extract-region'
when you want to allow filtering to take place. For example,
major or minor modes can use `buffer-substring-filters' to
extract characters that are special to a buffer, and should not
be copied into other buffers."
(cond
((or delete buffer-substring-filters)
(save-excursion
(goto-char beg)
(let ((string (if delete (delete-and-extract-region beg end)
(buffer-substring beg end))))
(dolist (filter buffer-substring-filters)
(setq string (funcall filter string)))
(if noprops
(set-text-properties 0 (length string) nil string))
string)))
(noprops
(buffer-substring-no-properties beg end))
(t
(buffer-substring beg end))))
;;;; Window system cut and paste hooks.
@ -3742,7 +3757,7 @@ If point reaches the beginning or end of buffer, it stops there.
To ignore intangibility, bind `inhibit-point-motion-hooks' to t."
(interactive "p")
(or arg (setq arg 1))
(let ((orig (point)))
;; Move by lines, if ARG is not 1 (the default).