[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Text property searching
From: |
Lars Ingebrigtsen |
Subject: |
Re: Text property searching |
Date: |
Mon, 16 Apr 2018 20:26:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
Below is a draft of the documentation of this function. Does it all
make sense? :-)
Should we perhaps go for a shorter name for this function? It's a bit
of a mouthful, but I don't really have any ideas for a good, snappy name
here...
-- Function: text-property-search-forward prop value predicate
Search for the next region that has text property PROP set to VALUE
according to PREDICATE.
This function is modelled after ‘search-forward’ and friends in
that it moves point, but it returns a structure that describes the
match instead of returning it in ‘match-beginning’ and friends.
If the text property can’t be found, the function returns ‘nil’.
If it’s found, point is placed at the end of the region that has
this text property match, and a ‘prop-match’ structure is returned.
PREDICATE can either be ‘t’ (which is a synonym for ‘equal’), ‘nil’
(which means “not equal”), or a predicate that will be called with
two parameters: The first is VALUE, and the second is the value of
the text property we’re inspecting.
In the examples below, imagine that you’re in a buffer that looks
like this:
This is a bold and here's bolditalic and this is the end.
That is, the “bold” words are the ‘bold’ face, and the “italic”
word is in the ‘italic’ face.
With point at the start:
(while (setq match (text-property-search-forward 'face 'bold t))
(push (buffer-substring (prop-match-beginning match)
(prop-match-end match))
words))
This will pick out all the words that use the ‘bold’ face.
(while (setq match (text-property-search-forward 'face nil t))
(push (buffer-substring (prop-match-beginning match)
(prop-match-end match))
words))
This will pick out all the bits that have no face properties, which
will result in the list ‘("This is a " "and here's " "and this is
the end")’ (only reversed, since we used ‘push’).
(while (setq match (text-property-search-forward 'face nil nil))
(push (buffer-substring (prop-match-beginning match)
(prop-match-end match))
words))
This will pick out all the regions where ‘face’ is set to
something, but this is split up into where the properties change,
so the result here will be ‘"bold" "bold" "italic"’.
For a more realistic example where you might use this, consider
that you have a buffer where certain sections represent URLs, and
these are tagged with ‘shr-url’.
(while (setq match (text-property-search-forward 'shr-url nil nil))
(push (prop-match-value match) urls))
This will give you a list of all those URLs.
---
Hm... it strikes me now that the two last parameters should be
optional, since (text-property-search-forward 'shr-url) would then be
even more obvious in its meaning.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
- Re: Text property searching, (continued)
Re: Text property searching, João Távora, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Message not available
- Message not available
- Re: Text property searching, João Távora, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Re: Text property searching, João Távora, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Re: Text property searching,
Lars Ingebrigtsen <=
- Re: Text property searching, Eli Zaretskii, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Re: Text property searching, Eli Zaretskii, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Re: Text property searching, Eli Zaretskii, 2018/04/16
- Re: Text property searching, Clément Pit-Claudel, 2018/04/16
- Re: Text property searching, Lars Ingebrigtsen, 2018/04/16
- Re: Text property searching, João Távora, 2018/04/16
- Re: Text property searching, Clément Pit-Claudel, 2018/04/16
Re: Text property searching, Lars Ingebrigtsen, 2018/04/16