From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kalle Olavi Niemitalo To: guile-emacs@sourceware.cygnus.com Subject: scheme-find-definition Date: Tue, 09 May 2000 03:23:00 -0000 Message-id: <87aei0yt1a.fsf@PC486.Niemitalo.local> X-SW-Source: 2000-q2/msg00044.html Here's a command which finds the source location of a Scheme procedure, if the reader saved it. (read-enable 'positions) I didn't commit this to CVS because Keisuke is rewriting the Scheme files. Will that take long? (import-lisp-function find-file) (import-lisp-function goto-line) (import-lisp-function move-to-column) (define (find-filename-property tree) "Return a part of TREE which has a `filename' source-property. Return #f if not found." (and (pair? tree) (or (and (source-property tree 'filename) tree) (find-filename-property (car tree)) (find-filename-property (cdr tree))))) (define-command (scheme-find-procedure proc) "Go to the definition of Scheme procedure PROC." (interactive "SFind procedure: ") ;; Hack for converting interactively entered symbols to procedures. ;; This might go away, don't use this from programs. (if (symbol? proc) (set! proc (eval proc))) (let ((part (cond ((procedure-with-setter? proc) (or (find-filename-property (procedure-source (procedure proc))) (find-filename-property (procedure-source (setter proc))))) ((procedure? proc) (find-filename-property (procedure-source proc)))))) (or part (error "Can't find definition of " proc)) (find-file (source-property part 'filename)) (and=> (source-property part 'line) (lambda (line) (goto-line (+ line 1)))) (and=> (source-property part 'column) move-to-column)))