From 5d713118a24a8766ea788288c1b47c96cf9bf5a6 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Wed, 3 Feb 2010 01:03:20 +0100 Subject: PLT: Better help lookups. --- elisp/geiser-plt.el | 13 +++++++++---- scheme/plt/geiser/autodoc.ss | 6 +++--- scheme/plt/geiser/modules.ss | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/elisp/geiser-plt.el b/elisp/geiser-plt.el index 9fcd3f5..d9b3ca9 100644 --- a/elisp/geiser-plt.el +++ b/elisp/geiser-plt.el @@ -1,6 +1,6 @@ ;; geiser-plt.el -- geiser support for PLT scheme -;; Copyright (C) 2009 Jose Antonio Ortega Ruiz +;; Copyright (C) 2009, 2010 Jose Antonio Ortega Ruiz ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the Modified BSD License. You should @@ -112,10 +112,15 @@ This function uses `geiser-plt-init-file' if it exists." ;;; External help -(defun geiser-plt--external-help (symbol module) - (message "Requesting help for '%s'..." symbol) +(defsubst geiser-plt--get-help (symbol module) (geiser-eval--send/wait - `(:eval (get-help ',symbol (:module ,module)) geiser/autodoc)) + `(:eval (get-help ',symbol (:module ,module)) geiser/autodoc))) + +(defun geiser-plt--external-help (id module) + (message "Requesting help for '%s'..." id) + (let ((out (geiser-eval--retort-output (geiser-plt--get-help id module)))) + (when (and out (string-match " but provided by:\n +\\(.+\\)\n" out)) + (geiser-plt--get-help symbol (match-string 1 out)))) (minibuffer-message "%s done" (current-message)) t) diff --git a/scheme/plt/geiser/autodoc.ss b/scheme/plt/geiser/autodoc.ss index 6dd877c..65e095f 100644 --- a/scheme/plt/geiser/autodoc.ss +++ b/scheme/plt/geiser/autodoc.ss @@ -16,9 +16,9 @@ (require geiser/utils geiser/modules geiser/locations scheme/help) (define (get-help symbol mod) - (with-handlers ((exn? (lambda (e) - (eval `(help ,symbol #:from ,mod))))) - (eval `(help ,symbol)))) + (with-handlers ((exn? (lambda (_) + (eval `(help ,symbol))))) + (eval `(help ,symbol #:from ,(ensure-module-spec mod))))) (define (autodoc ids) (if (not (list? ids)) diff --git a/scheme/plt/geiser/modules.ss b/scheme/plt/geiser/modules.ss index eb5357f..1818ecd 100644 --- a/scheme/plt/geiser/modules.ss +++ b/scheme/plt/geiser/modules.ss @@ -12,6 +12,7 @@ #lang scheme (provide load-module + ensure-module-spec module-spec->namespace namespace->module-path-name module-path-name->name -- cgit v1.2.3