help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Colourise text in a buffer using a list


From: Stephen Berman
Subject: Re: Colourise text in a buffer using a list
Date: Fri, 13 Sep 2024 10:07:09 +0200
User-agent: Gnus/5.13 (Gnus v5.13)

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 via email to

[Prev in Thread] Current Thread [Next in Thread]