all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* How to remove all text properties?
@ 2022-11-10  4:25 Jean Louis
  2022-11-10 18:18 ` Emanuel Berg
  2022-11-13  5:16 ` Eduardo Ochs
  0 siblings, 2 replies; 4+ messages in thread
From: Jean Louis @ 2022-11-10  4:25 UTC (permalink / raw)
  To: Help GNU Emacs

This particular situation is related to showing arbitrary links in
Emacs buffers.

My intention is to have this type of Hyperlinks in Emacs buffers:

⟦ (hyperscope 123) ⟧

The above is template interpolation snippet, reference: RCD Template
Interpolation System for Emacs:
https://hyperscope.link/3/7/1/3/3/RCD-Template-Interpolation-System-for-Emacs.html

The snippet alone is supposed to be bound to 2 possible directions:

- to display itself as Emacs button (link) within Emacs buffer,
  depending of the mode of invocation; 

- to contain function that is to be executed upon pressing the button;

What I wish to solve is removal of button text properties at time
point when I wish to delete the button and reverse it back to
original.

The original link or snippet will be following: ⟦ (hyperscope 123) ⟧

The button will be "Hello"

I wish to reverse the text properties of "Hello" to plain text
properties and display original ⟦ (hyperscope 123) ⟧

Here is how button will be displayed:

(insert-text-button "Hello"
		    'action (lambda (b) (message "Here"))
		    'follow-link t
		    'hyperscope-link 123)

If one evaluates the above, one will see "Hello" underlined and with
some text color, in general it will have different text properties.

After evaluating above, user will get following:

(insert-text-button "Hello"
		    'action (lambda (b) (message "Here"))
		    'follow-link t
		    'hyperscope-link 123)Hello

And then by executing the function below, the "Hello" above will
disappear and it will be reverted to ⟦ (hyperscope 123) ⟧

(defun rcd-revert-source ()
  (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)))

;; It searches for text properties and reverts it back,
;; but with errors, as font is still red.

(rcd-revert-source)

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.

I guess that (rcd-revert-source) is not perfect, what am I missing?

Why are text properties removed in mail-mode but not in Emacs Lisp mode?

--
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

In support of Richard M. Stallman
https://stallmansupport.org/



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-11-13  5:16 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-10  4:25 How to remove all text properties? Jean Louis
2022-11-10 18:18 ` Emanuel Berg
2022-11-12  8:33   ` Jean Louis
2022-11-13  5:16 ` Eduardo Ochs

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.