[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to remove all text properties?
From: |
Eduardo Ochs |
Subject: |
Re: How to remove all text properties? |
Date: |
Sun, 13 Nov 2022 02:16:11 -0300 |
On Thu, 10 Nov 2022 at 01:26, Jean Louis <bugs@gnu.support> wrote:
>
> The problem that I see is that my function above can revert text
> properties in this *mail* buffer in major-mode ⇒ mail-mode, but it
> cannot revert text properties in emacs-lisp-mode, where "Hello"
> becomes read, and then after reverting, the original snippet ⟦
> (hyperscope 123) ⟧ becomes red too.
Hi Jean Louis,
I saved this to the file /tmp/o,
--snip--snip--
(defun rcd-insert-hello ()
(interactive)
(insert-text-button "Hello"
'action (lambda (b) (message "Here"))
'follow-link t
'hyperscope-link 123))
(defun rcd-revert-source ()
(interactive)
(let ((point (point)))
(save-excursion
(goto-char (point-min))
(let (my-prop)
(while (setq my-prop
(text-property-search-forward
'hyperscope-link))
(when my-prop
(let ((begin (prop-match-beginning my-prop))
(end (prop-match-end my-prop))
(value (prop-match-value my-prop)))
(set-text-properties (1- begin) end nil)
(delete-region begin end)
(goto-char begin)
(insert (format "⟦ (hyperscope-link %s) ⟧" value)))))))
(goto-char point)))
;; (rcd-insert-hello)
;; (rcd-revert-source)
--snip--snip--
and then I tried this:
1. without changing its mode from fundamental-mode to something else
I ran the two defuns and the (rcd-insert-hello); it inserted a
button whose text was "Hello",
2. I ran my `find-eregionpp', defined here,
(find-efunction 'find-eregionpp)
(find-eev "eev-blinks.el" "find-eregionpp")
http://angg.twu.net/eev-current/eev-blinks.el.html#find-eregionpp
on the ")Hello\n", and saved its output in another file - I will
discuss it soon,
3. I ran the (rcd-revert-source) - it converted the "Hello" to this:
"⟦ (hyperscope-link 123) ⟧"
4. I ran some undos to delete the "⟦ (hyperscope-link 123) ⟧" and
the "Hello",
5. I ran `M-x emacs-lisp-mode',
6. I ran the (rcd-insert-hello) again. It inserted a button whose
text was "Hello". That button worked as expected - typing
RET on it ran (message "Here") - but it didn't look like a
button: it was displayed in font-lock-comment-face,
7. I ran `M-x find-eregionpp' on the ")Hello\n" and saved its
output in another file,
8. I ran the (rcd-revert-source). It worked as before - it
converted the "Hello" to this:
"⟦ (hyperscope-link 123) ⟧"
9. I ran some undos.
Here is the output of the `find-eregionpp's. The first one, that
was run with the file in fundamental-mode, gave this:
((")")
("Hello"
(action (lambda (b) (message "Here")))
(button (t))
(category default-button)
(follow-link t)
(hyperscope-link 123))
("\n"))
and the second one, that was run with the file in
emacs-lisp-mode, gave this:
((")"
(face font-lock-comment-face)
(fontified t))
("Hello"
(action (lambda (b) (message "Here")))
(button (t))
(category default-button)
(face font-lock-comment-face)
(follow-link t)
(fontified t)
(hyperscope-link 123))
("\n"
(face font-lock-comment-face)
(fontified t)))
The difference was that in emacs-lisp-mode all three intervals
had these extra properties:
(face font-lock-comment-face)
(fontified t)
In fundamental-mode the face of the "Hello" was inherited from the
`(category default-button)'. I found that face - `button' - with `C-u
C-x =', but here are three low-level links that sort of point to that
information:
(find-egrep "grep --color=auto -nH --null -e default-button *.el */*.el")
(find-efile "button.el" "(put 'default-button 'face 'button)")
(describe-text-category 'default-button)
In emacs-lisp-mode the "Hello" had this among its text properties,
(face font-lock-comment-face)
and this took precedence over the face from the category.
Does that help?
Cheers,
Eduardo Ochs
http://angg.twu.net/eepitch.html