Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
;; This file:
;;   http://anggtwu.net/elisp/2025-buttons.el.html
;;   http://anggtwu.net/elisp/2025-buttons.el
;;          (find-angg "elisp/2025-buttons.el")
;; Author: Eduardo Ochs <eduardoochs@gmail.com>
;;
;; (defun e () (interactive) (find-angg "elisp/2025-buttons.el"))

;; «.find-eplist»	(to "find-eplist")
;; «.find-ebuttontype»	(to "find-ebuttontype")


(defun ee-button-message-setq (button) (message "%S" (setq b button)))

(progn
  (insert "\n")
  (insert-text-button "TB" 'action (lambda (b0) (message "%S" (setq b b0))))
  (insert "\n")
  (insert-text-button "TB" 'action 'ee-button-message-setq)
  )

TB
TB




(--> b)
(--> b (marker-position it))
(--> b (marker-position it) (text-properties-at it))
(--> b (button-get it 'category))

;; (find-es "emacs" "helpful-button-at-point")
;; (find-es "emacs" "buttons")
;; (find-eapropos "default-button")
;; (find-eapropos "apropos-plist")
;; (find-eaproposf "widget")
;; (symbol-plist 'apropos-plist)
;; (find-egrep "grep --color=auto -nH --null -e widget *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e apropos-plist *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e button-category *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e face-link *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e define-widget *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e define-button-type *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e supertype *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e :supertype *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e help-function *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e help-face *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e \"(define-button-type 'help-face$\" *.el */*.el")
;; (find-egrep "grep --color=auto -nH --null -e \"define-button-type 'help-face\" *.el */*.el")
;; (find-efile "button.el" "and uninterned")
;; (find-efile "button.el" "If the property `button-data' is present")
;; (find-node "(widget)Basic Types")
;; (find-efile "wid-edit.el" "(define-widget 'info-link")
;; (find-efile "help-mode.el" "(define-button-type 'help-function")

;; (symbol-plist 'info-link)
;; (find-eapropos "^info-link$")
;; (apropos-describe-plist 'info-link)
;; err: (describe-widget 'info-link)

;; (find-egrep "grep --color=auto -nH --null -e apropos-widget *.el */*.el")

;; (find-efunction 'find-epp)
;; (find-efunction 'find-eppp)
;; (find-efunction 'ee-ppp0)

;; (find-efile "help-mode.el" "(define-button-type 'help-face")
;; (find-efile "help-mode.el" "(define-button-type 'help-xref")
;; (find-eapropos "help-face")
;; (find-esymbolplist 'help-face)
;; (find-ebuttoncategoryplist 'help-face)


;; «find-eplist»  (to ".find-eplist")
;;
(defun ee-pp-plist (plist)
  (let* ((abs (cl-loop for (a b) on plist by 'cddr
		       collect (format "%s %s" (ee-pp0 a) (ee-pp0 b))))
	 (body (mapconcat 'identity abs "\n ")))
    (concat "(" body ")")))

(defun find-eplist (plist &rest pos-spec-list)
  (let ((ee-buffer-name (or ee-buffer-name "*pp*")))
    (apply 'find-estring-elisp (ee-pp-plist plist) pos-spec-list)))

;; «find-ebuttontype»  (to ".find-ebuttontype")
;;
(defun ee-pp-buttontype (symbol1)
  (let* ((symbol2 (button-category-symbol symbol1))
	 (plist1 (ee-pp-plist (symbol-plist symbol1)))
	 (plist2 (ee-pp-plist (symbol-plist symbol2))))
    (ee-template0 "\
;; (find-ebuttontype '{symbol1})
;; (find-eapropos \"{symbol1}\")
;; (find-egrep \"grep --color=auto -nH --null -e\
 \\\"define-button-type '{symbol1}\\\" *.el */*.el\")\n
;; (find-eplist (symbol-plist '{symbol1}))
{plist1}\n
;;                            (button-category-symbol '{symbol1})
;;                                                 --> {symbol2}
;; (find-eplist (symbol-plist (button-category-symbol '{symbol1})))
{plist2}")))

(defun find-ebuttontype (symbol1 &rest pos-spec-list)
  (let ((ee-buffer-name
	 (or ee-buffer-name
	     (format "*(find-ebuttontype '%s)*" symbol1))))
    (apply 'find-estring-elisp (ee-pp-buttontype symbol1) pos-spec-list)))




(define-button-type 'button1234 1 2 3 4)
(define-button-type 'button1234 1 2 3 4 'supertype 'help-xref)
;; (find-2a nil '(find-ebuttontype 'button1234))


(symbol-plist 'my-button)
(button-category-symbol 'my-button)
(symbol-plist (button-category-symbol 'my-button))
(find-esymbolplist (button-category-symbol 'my-button))
(find-esymbolplist 'my-button)
(find-ebuttoncategoryplist 'my-button)


(symbol-plist 'help-face)
(symbol-plist 'default-button)
(find-esymbolplist 'default-button)
(apropos-format-plist (symbol-plist 'default-button) "\n ")
(find-estring (apropos-format-plist 'default-button "\n "))

(find-ebuttoncategoryplist 'apropos-plist)

(find-eapropos "info-link")

(apropos-describe-plist 'default-button)
(apropos-describe-plist 'apropos-plist)



(--> (button-category-symbol 'apropos-plist))
(--> (button-category-symbol 'apropos-plist) (symbol-plist it))
(--> (button-category-symbol 'apropos-plist) (apropos-describe-plist it))
(--> (button-category-symbol 'apropos-plist) (find-esymbolplist it))

(--> (symbol-plist 'apropos-plist)