emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/racket-mode 8168082b4e 1/3: beginning-of-defun: Allow navi


From: ELPA Syncer
Subject: [nongnu] elpa/racket-mode 8168082b4e 1/3: beginning-of-defun: Allow navigating up to the module form
Date: Thu, 11 Jan 2024 11:42:38 -0500 (EST)

branch: elpa/racket-mode
commit 8168082b4eb871e55388a7e9738e8e7b7317e273
Author: Greg Hendershott <git@greghendershott.com>
Commit: Greg Hendershott <git@greghendershott.com>

    beginning-of-defun: Allow navigating up to the module form
---
 racket-common.el | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/racket-common.el b/racket-common.el
index 13fd5b963c..72f449648b 100644
--- a/racket-common.el
+++ b/racket-common.el
@@ -218,7 +218,7 @@ To insert Unicode symbols generally, see 
`racket-unicode-input-method-enable'."
 (defun racket--beginning-of-defun-function ()
   "A value for `beginning-of-defun-function'.
 
-Aware of module forms and sexp comment prefixes.
+Aware of `racket-module-forms' and sexp comment prefixes.
 
 Note: This is the old flavor that takes no arguments and returns
 a boolean whether it moved. As a result `beginning-of-defun-raw'
@@ -229,15 +229,25 @@ flavor here."
   (let ((parse-sexp-ignore-comments t)
         (orig (point)))
     (racket--escape-string-or-comment)
-    ;; Move to outermost form, but stop before any module form.
+    ;; Try to move up to outermost form, but stopping at or before any
+    ;; module form.
     (while
         (condition-case nil
-            (let ((pt (point)))
+            (let ((prev (point)))
               (goto-char (scan-lists (point) -1 1))
-              (or (not (looking-at racket-module-forms))
-                  (progn (goto-char pt) nil)))
+              (if (looking-at racket-module-forms)
+                  ;; Stop -- either directly on this module form, or,
+                  ;; back down from where we just came.
+                  (if (= (1+ (point)) prev)
+                      nil
+                    (goto-char prev)
+                    nil)
+                ;; Continue moving up.
+                t))
           (scan-error nil)))
-    ;; Unless we moved, try a simple `backward-sexp'.
+    ;; Unless we moved, try a simple `backward-sexp': Maybe we're
+    ;; already at the module level, and just need to move to the
+    ;; previous module-level item.
     (unless (/= orig (point))
       (condition-case nil (backward-sexp 1) (scan-error nil)))
     ;; When we moved, also move before any preceding "#;".



reply via email to

[Prev in Thread] Current Thread [Next in Thread]