1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-26 10:49:33 +00:00

Clarify face-at-point doc string and add (thing-at-point 'face)

* lisp/faces.el (face-at-point): Say what this function does.

* lisp/thingatpt.el (thing-at-point-face-at-point): Add `face'
type (bug#57087).
(thing-at-point-provider-alist, thing-at-point): Mention it in the
doc strings.
This commit is contained in:
Lars Ingebrigtsen 2022-08-12 15:54:55 +02:00
parent c0d761bf7f
commit 829b131e5b
2 changed files with 33 additions and 13 deletions

View File

@ -2046,18 +2046,29 @@ as backgrounds."
(when msg (message "Color: `%s'" color))
color))
(defun face-at-point (&optional thing multiple)
"Return the face of the character after point.
If it has more than one face, return the first one.
If THING is non-nil try first to get a face name from the buffer.
IF MULTIPLE is non-nil, return a list of all faces.
Return nil if there is no face."
(defun face-at-point (&optional text multiple)
"Return a face name from point in the current buffer.
This function is meant to be used as a conveniency function for
providing defaults when prompting the user for a face name.
If TEXT is non-nil, return the text at point if it names an
existing face.
Otherwise, look at the faces in effect at point as text
properties or overlay properties, and return one of these face
names.
IF MULTIPLE is non-nil, return a list of faces.
Return nil if there is no face at point.
This function is not meant for handling faces programatically; to
do that, use `get-text-property' and `get-char-property'."
(let (faces)
(if thing
;; Try to get a face name from the buffer.
(let ((face (intern-soft (thing-at-point 'symbol))))
(if (facep face)
(push face faces))))
(when text
;; Try to get a face name from the buffer.
(when-let ((face (thing-at-point 'face)))
(push face faces)))
;; Add the named faces that the `read-face-name' or `face' property uses.
(let ((faceprop (or (get-char-property (point) 'read-face-name)
(get-char-property (point) 'face))))

View File

@ -74,7 +74,7 @@ question.
\"things\" include `symbol', `list', `sexp', `defun', `filename',
`existing-filename', `url', `email', `uuid', `word', `sentence',
`whitespace', `line', and `page'.")
`whitespace', `line', `face' and `page'.")
;; Basic movement
@ -166,7 +166,7 @@ positions of the thing found."
THING should be a symbol specifying a type of syntactic entity.
Possibilities include `symbol', `list', `sexp', `defun',
`filename', `existing-filename', `url', `email', `uuid', `word',
`sentence', `whitespace', `line', `number', and `page'.
`sentence', `whitespace', `line', `number', `face' and `page'.
When the optional argument NO-PROPERTIES is non-nil,
strip text properties from the return value.
@ -361,6 +361,15 @@ E.g.:
(put 'existing-filename 'thing-at-point 'thing-at-point-file-at-point)
;; Faces
(defun thing-at-point-face-at-point (&optional _lax _bounds)
"Return the name of the face at point as a symbol."
(when-let ((face (thing-at-point 'symbol)))
(and (facep face) (intern face))))
(put 'face 'thing-at-point 'thing-at-point-face-at-point)
;; URIs
(defvar thing-at-point-beginning-of-url-regexp nil