Let's make it *any* submodule
authorJose Antonio Ortega Ruiz <jao@gnu.org>
Sun, 25 Aug 2013 05:12:07 +0000 (25 07:12 +0200)
committerJose Antonio Ortega Ruiz <jao@gnu.org>
Sun, 25 Aug 2013 05:12:07 +0000 (25 07:12 +0200)
So the new functions are named geiser-racket-*-submodules, and by
default all submodule forms are hidden.

Now that we have the helpers in geiser-edit, we could have a generic
command in geiser-mode to change the visibility of form at point.

NEWS
elisp/geiser-edit.el
elisp/geiser-racket.el

diff --git a/NEWS b/NEWS
index 5f3b250..b3770fe 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,8 +2,8 @@
 
   New features:
 
-   - Racket: new commands geiser-racket-{show, hide, toggle}-tests,
-     for hiding test modules in code buffers.
+   - Racket: new commands geiser-racket-{show, hide, toggle}-submodules,
+     for folding submodule forms in code buffers.
    - Racket: interaction with submodules (entering them and evaluation
      within their scope).
    - New commands geiser-eval-buffer (C-c C-b) and
index f75e303..d43cf9b 100644 (file)
@@ -191,7 +191,7 @@ or following links in error buffers.")
   (let ((cloak (geiser-edit--cloak form)))
     (save-excursion
       (goto-char (point-min))
-      (while (re-search-forward (format "(%s\\b" (regexp-quote form)) nil t)
+      (while (re-search-forward (format "(%s\\b" form) nil t)
         (let* ((beg (match-beginning 0))
                (end (progn (ignore-errors (goto-char beg) (forward-sexp))
                            (point))))
@@ -204,6 +204,10 @@ or following links in error buffers.")
     (remove-overlays nil nil 'invisible cloak)
     (remove-from-invisibility-spec (cons cloak t))))
 
+(defun geiser-edit--show-all ()
+  (remove-overlays)
+  (setq buffer-invisibility-spec '(t)))
+
 (defun geiser-edit--toggle-visibility (form)
   (if (and (listp buffer-invisibility-spec)
            (assoc (geiser-edit--cloak form) buffer-invisibility-spec))
index 9e00c4d..435fb39 100644 (file)
@@ -373,24 +373,38 @@ using start-geiser, a procedure in the geiser/server module."
 \f
 ;;; Additional commands
 
-(defconst geiser-racket--test-module "module+ test")
-
-(defun geiser-racket-toggle-tests ()
-  "Toggle visibility of test module fragments of the form (module+ test).
-
-When hidden, the test module forms are shown as an ellipsis."
-  (interactive)
-  (geiser-edit--toggle-visibility geiser-racket--test-module))
-
-(defun geiser-racket-show-tests ()
-  "Unconditionally shows all test modules."
-  (interactive)
-  (geiser-edit--show geiser-racket--test-module))
-
-(defun geiser-racket-hide-tests ()
-  "Unconditionally hides all visible test modules."
-  (interactive)
-  (geiser-edit--hide geiser-racket--test-module))
+(defvar geiser-racket--submodule-history ())
+
+(defun geiser-racket--submodule-form (name)
+  (format "module[+*]? %s"
+          (cond ((eq 1 name) "")
+                ((numberp name)
+                 (read-string "Submodule name: " nil
+                              'geiser-racket--submodule-history))
+                ((stringp name) name)
+                t "")))
+
+(defun geiser-racket-toggle-submodules (&optional name)
+  "Toggle visibility of submodule forms.
+
+Use a prefix to be asked for a submodule name."
+  (interactive "p")
+  (geiser-edit--toggle-visibility (geiser-racket--submodule-form name)))
+
+(defun geiser-racket-show-submodules (&optional name)
+  "Unconditionally shows all submodule forms.
+
+Use a prefix to be asked for a submodule name."
+  (interactive "p")
+  (cond ((eq 1 name) (geiser-edit--show-all))
+        (t (geiser-edit--show (geiser-racket--submodule-form name)))))
+
+(defun geiser-racket-hide-submodules (&optional name)
+  "Unconditionally hides all visible submodules.
+
+Use a prefix to be asked for a submodule name."
+  (interactive "p")
+  (geiser-edit--hide (geiser-racket--submodule-form name)))
 
 \f
 ;;; Implementation definition: