unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Stephen Berman <stephen.berman@gmx.net>
To: Heime <heimeborgia@protonmail.com>
Cc: Heime via Users list for the GNU Emacs text editor
	<help-gnu-emacs@gnu.org>
Subject: Re: Colourise text in a buffer using a list
Date: Fri, 13 Sep 2024 10:07:09 +0200	[thread overview]
Message-ID: <87y13wf042.fsf@gmx.net> (raw)
In-Reply-To: <Ny_9lh_xzFVYQtg0BEaH1sIChl5oKz9oOuktxkKRgQBDyrqfj2JVFPl_La5jdYTqU9RtMsgZLh1P5sLOr4seNgkS05d1O6931oOXaFh1TQo=@protonmail.com> (Heime's message of "Fri, 13 Sep 2024 01:21:17 +0000")

On Fri, 13 Sep 2024 01:21:17 +0000 Heime <heimeborgia@protonmail.com> wrote:

> I have a buffer with text inserted from a list from a list.
>
> How can I print specific text form the list at INDEX by colouring
> that text it red ?
>
> (defun xiakos-check-red (lst index buffer)
>   "Color the element at INDEX in LST red."
>
>   (with-current-buffer buffer
>
>     (let* ( (text (nth index lst))
>             (start-pos nil)
>             (end-pos nil) )
>
>       (save-excursion
>
>         ;; Find the start and end positions of the text
>         (goto-char (point-min))
>         (dotimes (i index)
>           (forward-line)
>           (when (re-search-forward
>                   (regexp-quote text) (line-end-position) t)
>             (setq start-pos (match-beginning 0))
>             (setq end-pos (match-end 0)))
>           (unless start-pos
>             (goto-char (point-min))))
>
>         ;; Apply the red color to the found range
>         (when (and start-pos end-pos)
>           (add-text-properties start-pos end-pos
>                                '(face (:foreground "red"))))))))

I'm not sure whether "from a list from a list" is a typo, but IIUC what
you want, here's one way, with a test buffer and invocation:

(defun xiakos-check-red (lst index buffer)
  "Color each INDEXth element of LST found in BUFFER red."
  (with-current-buffer buffer
    (let* ((text (nth index lst))
           (start-pos nil)
           (end-pos nil))
      (save-excursion
        ;; Find the start and end positions of the text
        (goto-char (point-min))
        (while (re-search-forward (regexp-quote text) (point-max) t)
          (setq start-pos (match-beginning 0))
          (setq end-pos (match-end 0))
          ;; Apply the red color to the found range
          (when (and start-pos end-pos)
            (add-text-properties start-pos end-pos
				 '(face (:foreground "red")))))))))

-------------------- buffer "a" --------------------
This is a test.
This is not a test.
This is another test.
This is a third test.
This is not a test.
----------------------------------------------------

(xiakos-check-red '("is a") 0 "a")

Steve Berman



      reply	other threads:[~2024-09-13  8:07 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-13  1:21 Colourise text in a buffer using a list Heime
2024-09-13  8:07 ` Stephen Berman [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y13wf042.fsf@gmx.net \
    --to=stephen.berman@gmx.net \
    --cc=heimeborgia@protonmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).