summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--geiser-guile.el25
-rw-r--r--geiser-guile.texi7
-rw-r--r--src/geiser/doc.scm18
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)