Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
;; This file:
;;   http://anggtwu.net/elisp/find-lgrep-links.el.html
;;   http://anggtwu.net/elisp/find-lgrep-links.el
;;          (find-angg "elisp/find-lgrep-links.el")
;; Author: Eduardo Ochs <eduardoochs@gmail.com>
;; Date: 2024jan31
;; Public domain.
;;
;; (load (buffer-file-name))
;; (eval-buffer)
;;
;; These sexps generate temporary buffers with lots `find-efunction's
;; that don't work:
;;
;;   (find-eaproposf "macro")
;;   (find-eaproposf "code-pdf")
;;   (find-eaproposf "^find-.*file")
;;
;; But compare:
;;
;;   (find-efunction 'find-efile)
;;   (find-lpgreps   'find-efile "e")
;;   (find-efunction 'brff)
;;   (find-lgreps    'brff)
;;   (find-efunction 'cl-struct-p--cmacro)
;;   (find-lgreps    'cl-struct-p--cmacro "cl-struct-p")

;; Index:
;; «.find-lgrep»	(to "find-lgrep")
;; «.find-lgreps»	(to "find-lgreps")

;; ********
;; See: (find-eev "eev-plinks.el" "find-lgrep")




;;;   __ _           _       _                      
;;;  / _(_)_ __   __| |     | | __ _ _ __ ___ _ __  
;;; | |_| | '_ \ / _` |_____| |/ _` | '__/ _ \ '_ \ 
;;; |  _| | | | | (_| |_____| | (_| | | |  __/ |_) |
;;; |_| |_|_| |_|\__,_|     |_|\__, |_|  \___| .__/ 
;;;                            |___/         |_|    
;;
;; «find-lgrep»  (to ".find-lgrep")
;; Tests: (ee-find-lgrep "/tmp/foo.elc" "\"e\"")
;;        (find-lgrep 'find-efile "\"e\"")
;;        (find-lgrep 'brg "[ ']brg[ )]")
;;
(defun find-lgrep (fname0 re)
  "Use lgrep to search for all occurrences of RE in FNAME0.
If FNAME0 is a symbol, convert it to a file name using:
   (setq fname0 (symbol-file fname0 'defun)))
If FNAME0 ends in .elc, convert it to the corresponding .el."
    (find-dbsw-call (ee-find-lgrep fname0 re)))

(defun ee-find-lgrep (fname0 re)
  "An internal function used by `find-lgrep'."
  (if (symbolp fname0) (setq fname0 (symbol-file fname0 'defun)))
  (setq fname0 (ee-file-name-elc-to-el (ee-expand fname0)))
  (let* ((dir     (file-name-directory    fname0))
         (fname   (file-name-nondirectory fname0)))
    `(lgrep ,re ,fname ,dir)))

(defun ee-file-name-elc-to-el (fname)
  "If FNAME ends with .elc, return the corresponding .el.
Return FNAME unchanged in the other cases. Note: this is fragile,
and I don't know if it would work on packages installed by
straight.el."
  (replace-regexp-in-string ".elc$" ".el" fname))



;;;   __ _           _       _                          
;;;  / _(_)_ __   __| |     | | __ _ _ __ ___ _ __  ___ 
;;; | |_| | '_ \ / _` |_____| |/ _` | '__/ _ \ '_ \/ __|
;;; |  _| | | | | (_| |_____| | (_| | | |  __/ |_) \__ \
;;; |_| |_|_| |_|\__,_|     |_|\__, |_|  \___| .__/|___/
;;;                            |___/         |_|        
;;
;; «find-lgreps»  (to ".find-lgreps")
;; TODO: rename this 
;;        (find-lgreps 'find-efile)
;;        (find-lgreps 'find-efile "e")
;;        (find-lgreps 'brg "brg")


(defun find-lgreps (f &optional stem)
  "Go to a temporary buffer with links for finding the source code of F."
  (interactive (find-function-read))
  (setq stem (or stem (format "%s" f)))
  (let* ((fname0 (symbol-file f 'defun))
	 (fname  (ee-shorten-file-name (ee-file-name-elc-to-el fname0)))
	 (stem1  (format "\"%s\"" stem))
	 (stem2  (format "[( ']%s$" stem))
	 (stem3  (format "[( ']%s[ )]" stem)))
    (find-estring-elisp
     `(ee-template0 "\
;; (find-lgreps '{f} \"{stem}\")
;; (find-eloadhistory-for '{f})
;; (find-eloadhistory-for '{f} 2 \" {f})\")
;; (find-efunction 'find-lgreps)

(find-efunctionpp '{f})
{(ee-S `(find-lgrep ',f ,stem1))}
{(ee-S `(find-lgrep ',f ,stem2))}
{(ee-S `(find-lgrep ',f ,stem3))}
{(ee-S `(find-lgrep ,fname ,stem1))}
{(ee-S `(find-lgrep ,fname ,stem2))}
{(ee-S `(find-lgrep ,fname ,stem3))}
{(ee-S `(find-fline ,fname))}
"))))






(provide 'find-lgrep-links)



;; Local Variables:
;; coding:  utf-8-unix
;; End: