summaryrefslogtreecommitdiff
path: root/elisp
diff options
context:
space:
mode:
Diffstat (limited to 'elisp')
-rw-r--r--elisp/geiser-autodoc.el2
-rw-r--r--elisp/geiser-completion.el15
-rw-r--r--elisp/geiser-custom.el11
-rw-r--r--elisp/geiser-doc.el52
-rw-r--r--elisp/geiser-mode.el9
-rw-r--r--elisp/geiser-repl.el1
6 files changed, 75 insertions, 15 deletions
diff --git a/elisp/geiser-autodoc.el b/elisp/geiser-autodoc.el
index d7d6a08..7a63ef4 100644
--- a/elisp/geiser-autodoc.el
+++ b/elisp/geiser-autodoc.el
@@ -39,7 +39,7 @@
"Options for displaying autodoc strings in the echo area."
:group 'geiser)
-(geiser-custom--defface fuel-font-lock-markup-title
+(geiser-custom--defface autodoc-current-arg
'bold geiser-autodoc "highlighting current argument in autodoc messages")
(defcustom geiser-autodoc-delay 0.2
diff --git a/elisp/geiser-completion.el b/elisp/geiser-completion.el
index 814a587..22b36a1 100644
--- a/elisp/geiser-completion.el
+++ b/elisp/geiser-completion.el
@@ -26,6 +26,7 @@
(require 'geiser-eval)
(require 'geiser-log)
+(require 'geiser-syntax)
(require 'geiser-base)
@@ -172,13 +173,13 @@ terminates a current completion."
(defvar geiser-completion--module-history nil)
-(defun geiser-completion--read-module ()
- (let ((minibuffer-local-completion-map geiser-completion--module-minibuffer-map)
- (modules (geiser-completion--module-list))
- (prompt "Module name: "))
- (if modules
- (completing-read prompt modules nil nil nil geiser-completion--module-history)
- (read-string prompt nil geiser-completion--module-history))))
+(defun geiser-completion--read-module (&optional prompt default history)
+ (let ((minibuffer-local-completion-map geiser-completion--module-minibuffer-map))
+ (completing-read (or prompt "Module name: ")
+ (geiser-completion--module-list)
+ nil nil
+ (or default (geiser-syntax--buffer-module))
+ (or history geiser-completion--module-history))))
(defun geiser--respecting-message (format &rest format-args)
"Display TEXT as a message, without hiding any minibuffer contents."
diff --git a/elisp/geiser-custom.el b/elisp/geiser-custom.el
index 591d11a..27bcd33 100644
--- a/elisp/geiser-custom.el
+++ b/elisp/geiser-custom.el
@@ -43,11 +43,12 @@
:group 'faces)
(defmacro geiser-custom--defface (face def group doc)
- `(defface ,face (face-default-spec ,def)
- ,(format "Face for %s." doc)
- :group ',group
- :group 'geiser-faces
- :group 'faces))
+ (let ((face (intern (format "geiser-font-lock-%s" face))))
+ `(defface ,face (face-default-spec ,def)
+ ,(format "Face for %s." doc)
+ :group ',group
+ :group 'geiser-faces
+ :group 'faces)))
(put 'geiser-custom--defface 'lisp-indent-function 1)
diff --git a/elisp/geiser-doc.el b/elisp/geiser-doc.el
index 9dcb951..6bb1d10 100644
--- a/elisp/geiser-doc.el
+++ b/elisp/geiser-doc.el
@@ -26,10 +26,25 @@
(require 'geiser-completion)
(require 'geiser-eval)
+(require 'geiser-syntax)
(require 'geiser-popup)
+(require 'geiser-custom)
(require 'geiser-base)
+;;; Customization:
+
+(defgroup geiser-doc nil
+ "Options for documentation buffers."
+ :group 'geiser)
+
+(geiser-custom--defface doc-title
+ 'bold geiser-doc "article titles in documentation buffers")
+
+(geiser-custom--defface doc-link
+ 'link geiser-doc "links in documentation buffers")
+
+
;;; Documentation buffer:
(geiser-popup--define doc "*Geiser documentation*" fundamental-mode)
@@ -40,6 +55,26 @@
(defun geiser-doc--get-docstring (symbol)
(geiser-eval--send/result `(:gs ((:ge docstring) ',symbol))))
+(defun geiser-doc--get-module-children (module)
+ (geiser-eval--send/result `(:gs ((:ge module-children) (quote (:scm ,module))))))
+
+
+;;; Auxiliary functions:
+
+(defun geiser-doc--insert-title (title)
+ (let ((p (point)))
+ (insert title)
+ (put-text-property p (point) 'face 'geiser-font-lock-doc-title))
+ (newline))
+
+(defun geiser-doc--insert-list (title lst)
+ (when lst
+ (geiser-doc--insert-title title)
+ (newline)
+ (dolist (w lst)
+ (insert (format "\t- %s\n" w)))
+ (newline)))
+
;;; Commands:
@@ -58,6 +93,23 @@ With prefix argument, ask for symbol (with completion)."
(insert ds))
(geiser-doc--pop-to-buffer))))))
+(defun geiser-doc-module (module)
+ "Display information about a given module."
+ (interactive (list (geiser-completion--read-module)))
+ (let ((children (geiser-doc--get-module-children module)))
+ (if (not children)
+ (message "No info available for %s" module)
+ (geiser-doc--with-buffer
+ (erase-buffer)
+ (geiser-doc--insert-title (format "%s" module))
+ (newline)
+ (geiser-doc--insert-list "Procedures:" (cdr (assoc 'procs children)))
+ (geiser-doc--insert-list "Variables:" (cdr (assoc 'vars children)))
+ (geiser-doc--insert-list "Submodules:" (cdr (assoc 'modules children)))
+ (goto-char (point-min)))
+ (geiser-doc--pop-to-buffer))))
+
+
(provide 'geiser-doc)
;;; geiser-doc.el ends here
diff --git a/elisp/geiser-mode.el b/elisp/geiser-mode.el
index 84455e7..b023c3d 100644
--- a/elisp/geiser-mode.el
+++ b/elisp/geiser-mode.el
@@ -147,6 +147,10 @@ interacting with the Geiser REPL is at your disposal.
;;; Keys:
+(defun geiser-mode--triple-chord (p k c)
+ (define-key geiser-mode-map (vector '(control ?c) `(control ,p) k) c)
+ (define-key geiser-mode-map (vector '(control ?c) `(control ,p) `(control ,k)) c))
+
(define-key geiser-mode-map "\C-c\C-z" 'switch-to-guile)
(define-key geiser-mode-map "\C-c\C-l" 'geiser-load-current-buffer)
(define-key geiser-mode-map "\C-c\C-k" 'geiser-compile-current-buffer)
@@ -162,8 +166,9 @@ interacting with the Geiser REPL is at your disposal.
(define-key geiser-mode-map "\C-c\C-r" 'geiser-send-region)
(define-key geiser-mode-map "\C-c\M-r" 'geiser-send-region-and-go)
-(define-key geiser-mode-map "\C-c\C-a" 'geiser-autodoc-mode)
-(define-key geiser-mode-map "\C-c\C-d" 'geiser-doc-symbol-at-point)
+(geiser-mode--triple-chord ?d ?a 'geiser-autodoc-mode)
+(geiser-mode--triple-chord ?d ?d 'geiser-doc-symbol-at-point)
+(geiser-mode--triple-chord ?d ?m 'geiser-doc-module)
(define-key geiser-mode-map "\C-c\M-c" 'geiser-compile-definition)
(define-key geiser-mode-map "\C-c\C-c" 'geiser-compile-definition-and-go)
diff --git a/elisp/geiser-repl.el b/elisp/geiser-repl.el
index 5b58a0a..ea424e3 100644
--- a/elisp/geiser-repl.el
+++ b/elisp/geiser-repl.el
@@ -150,6 +150,7 @@ REPL buffer."
(define-key geiser-repl-mode-map "\C-a" 'geiser-repl--bol)
(define-key geiser-repl-mode-map "\C-ca" 'geiser-autodoc-mode)
(define-key geiser-repl-mode-map "\C-cd" 'geiser-doc-symbol-at-point)
+(define-key geiser-repl-mode-map "\C-cm" 'geiser-doc-module)
(define-key geiser-repl-mode-map "\C-ck" 'geiser-compile-file)
(define-key geiser-repl-mode-map "\C-cl" 'geiser-load-file)