From f857023945f6eee65d9725684f22e022c3e6acc4 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Thu, 12 Feb 2009 22:07:29 +0100 Subject: Edit symbol at point for programs. --- geiser/emacs.scm | 1 + geiser/eval.scm | 4 +++- geiser/introspection.scm | 38 +++++++++++++++++++++++++++++++++----- 3 files changed, 37 insertions(+), 6 deletions(-) (limited to 'geiser') diff --git a/geiser/emacs.scm b/geiser/emacs.scm index 8f0fffd..a3212af 100644 --- a/geiser/emacs.scm +++ b/geiser/emacs.scm @@ -27,6 +27,7 @@ (define-module (geiser emacs) #:re-export (ge:proc-args ge:completions + ge:symbol-location ge:compile-file ge:load-file) #:use-module ((geiser introspection) diff --git a/geiser/eval.scm b/geiser/eval.scm index 1400566..8a7f48f 100644 --- a/geiser/eval.scm +++ b/geiser/eval.scm @@ -70,7 +70,9 @@ SUBR, MSG and REST." (current (getcwd))) (dynamic-wind (lambda () (chdir dest)) - (lambda () (compile-file path)) + (lambda () + (and (compile-file path) + (load-compiled (string-append dest "/" (compiled-file-name path))))) (lambda () (chdir current))))) (define (load-file path) diff --git a/geiser/introspection.scm b/geiser/introspection.scm index 6ac3f69..03d5796 100644 --- a/geiser/introspection.scm +++ b/geiser/introspection.scm @@ -25,7 +25,7 @@ ;;; Code: (define-module (geiser introspection) - #:export (proc-args completions) + #:export (proc-args completions symbol-location) #:use-module (system vm program) #:use-module (ice-9 session) #:use-module (srfi srfi-1)) @@ -81,9 +81,37 @@ (apropos-internal (string-append "^" prefix))) stringstring name)) + (reverse-name (reverse name)) + (leaf (car reverse-name)) + (dir-hint-module-name (reverse (cdr reverse-name))) + (dir-hint (apply string-append + (map (lambda (elt) + (string-append elt "/")) + dir-hint-module-name)))) + (%search-load-path (in-vicinity dir-hint leaf)))) + +(define (program-file prog) + (let* ((mod (and prog (program-module prog))) + (name (and mod (module-name mod)))) + (and name (module-filename name)))) + +(define (program-location prog) + (make-location (program-file prog) (program-line prog))) + +(define (symbol-location sym) + (let ((prog (resolve-symbol sym))) + (if (program? prog) + (program-location prog) + '()))) ;;; introspection.scm ends here -- cgit v1.2.3