diff options
-rw-r--r-- | geiser-guile.el | 25 | ||||
-rw-r--r-- | geiser-guile.texi | 7 | ||||
-rw-r--r-- | src/geiser/doc.scm | 18 |
3 files changed, 46 insertions, 4 deletions
diff --git a/geiser-guile.el b/geiser-guile.el index ac5e6b4..7663b83 100644 --- a/geiser-guile.el +++ b/geiser-guile.el @@ -169,6 +169,14 @@ effect on new REPLs. For existing ones, use the command "List of info nodes that, when present, are used for manual lookups." :type '(repeat string)) +(geiser-custom--defcustom geiser-guile-doc-process-texinfo nil + "Non-nil means try to convert docstrings from texinfo into plain-text. + +Changes to the value of this variable will automatically take +effect on new REPLs. For existing ones, use the command +\\[geiser-guile-update-doc-process-texinfo]." + :type 'boolean) + ;;; REPL support @@ -570,6 +578,17 @@ The new level is set using the value of `geiser-guile-warning-level'." (geiser evaluation)))) (geiser-eval--send/result code))) +(defun geiser-guile-update-doc-process-texinfo () + "Update whether docstrings should be processed as texinfo. +The new value is set using the value of `geiser-guile-doc-process-texinfo'." + (interactive) + (let* ((new-value (if geiser-guile-doc-process-texinfo + '\#t + '\#f)) + (code `(begin (set! (@@ (geiser doc) %process-texinfo?) ,new-value) + 'done))) + (geiser-eval--send/wait code))) + ;;;###autoload (defun connect-to-guile () "Start a Guile REPL connected to a remote process. @@ -619,7 +638,11 @@ See `geiser-guile-use-declarative-modules'." (dolist (dir g-load-path) (let ((dir (expand-file-name dir))) (geiser-eval--send/wait `(:eval (:ge add-to-load-path ,dir))))) - (geiser-guile-update-warning-level))) + (geiser-guile-update-warning-level) + (let ((geiser-guile-doc-process-texinfo + (buffer-local-value 'geiser-guile-doc-process-texinfo + geiser-repl--last-scm-buffer))) + (geiser-guile-update-doc-process-texinfo)))) ;;; Manual lookup diff --git a/geiser-guile.texi b/geiser-guile.texi index af87d34..ae605ab 100644 --- a/geiser-guile.texi +++ b/geiser-guile.texi @@ -73,6 +73,11 @@ loading @samp{~/.guile}, leave @code{geiser-guile-init-file} alone and set One can also provide a global list of paths to add to Guile's @samp{%load-path} via @code{geiser-guile-load-path}. +You can enable processing of texinfo in docstrings by customizing +@code{geiser-guile-doc-process-texinfo} to a non-nil value. If +enabled and docstring is a valid texinfo snippet, it will be converted +into a plain text before being displayed. + @node Debugging support @unnumbered Debugging support @@ -99,4 +104,4 @@ Geiser guile can be used remotely via tramp connections: the REPL process will be run in the machine where the tramp-accessed file lives. Implemented by Felipe Lema. -@bye
\ No newline at end of file +@bye diff --git a/src/geiser/doc.scm b/src/geiser/doc.scm index b566b5e..dbd92fa 100644 --- a/src/geiser/doc.scm +++ b/src/geiser/doc.scm @@ -23,7 +23,12 @@ #:use-module (ice-9 regex) #:use-module (ice-9 format) #:use-module (oop goops) - #:use-module (srfi srfi-1)) + #:use-module (srfi srfi-1) + #:use-module (texinfo) + #:use-module (texinfo plain-text)) + +;;; Should texinfo in docstrings be processed? +(define %process-texinfo? #f) (define (autodoc ids) (if (not (list? ids)) @@ -194,6 +199,15 @@ `(("signature" . ,(or (obj-signature sym obj #f) sym)) ("docstring" . ,(docstring sym obj)))))) +(define (try-texinfo->plain-text str) + "Convert STR from texinfo into a plain text, assuming it is a valid texinfo +and %process-texinfo? is #t. + +Return either the resulting plain text or the original STR." + (or (and %process-texinfo? + (false-if-exception (stexi->plain-text (texi-fragment->stexi str)))) + str)) + (define (docstring sym obj) (define (valuable?) (not (or (macro? obj) (procedure? obj) (program? obj)))) @@ -212,7 +226,7 @@ (display modname) (display "."))) (newline) - (if doc (begin (newline) (display doc))) + (if doc (begin (newline) (display (try-texinfo->plain-text doc)))) (if (valuable?) (begin (newline) (display "Value:") (newline) |