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

[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



reply via email to

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