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

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

[nongnu] elpa/forth-mode 5a08c82adb 111/153: Improve word movement comma


From: ELPA Syncer
Subject: [nongnu] elpa/forth-mode 5a08c82adb 111/153: Improve word movement commands inside symbols.
Date: Sat, 29 Jan 2022 08:02:23 -0500 (EST)

branch: elpa/forth-mode
commit 5a08c82adb7de711c530a63dcac269cd6b593341
Author: Helmut Eller <helmut@msibook>
Commit: Helmut Eller <eller.helmut@gmail.com>

    Improve word movement commands inside symbols.
    
    In particular keep "symbol" and "word" distinct so that
    M-DEL etc. works like in other modes.
    
    * forth-syntax.el (forth-syntax--set-word-syntax): New helper.
    (forth-syntax--state-normal, forth-syntax--state-parsing-word): Use it.
---
 forth-syntax.el | 19 +++++++++++++++++--
 test/tests.el   |  9 +++------
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/forth-syntax.el b/forth-syntax.el
index 39133fd6d5..4c6e02a25b 100644
--- a/forth-syntax.el
+++ b/forth-syntax.el
@@ -27,6 +27,21 @@
 SYNTAX must be a valid argument for `string-to-syntax'."
   `(put-text-property ,start ,end 'syntax-table ',(string-to-syntax syntax)))
 
+;; Set the syntax in the region START/END to "word" or "symbol".  Do
+;; nothing for characters that already have the correct syntax so that
+;; word movement commands work "naturally".
+(defun forth-syntax--set-word-syntax (start end)
+  (save-excursion
+    (goto-char start)
+    (while (progn
+            (skip-syntax-forward "w_" end)
+            (cond ((< (point) end)
+                   (let ((start (point)))
+                     (skip-syntax-forward "^w_" end)
+                     (forth-syntax--set-syntax start (point) "_")
+                     t))
+                  (t nil))))))
+
 
 ;;; State functions
 
@@ -77,7 +92,7 @@ SYNTAX must be a valid argument for `string-to-syntax'."
     (skip-chars-forward forth-syntax--non-whitespace)
     (cond ((= start (point)) #'forth-syntax--state-eob)
          (t
-          (forth-syntax--set-syntax start (point) "w")
+          (forth-syntax--set-word-syntax start (point))
           #'forth-syntax--state-normal))))
 
 (defun forth-syntax--parse-comment (backward-regexp forward-regexp)
@@ -143,7 +158,7 @@ SYNTAX must be a valid argument for `string-to-syntax'."
     (skip-chars-forward forth-syntax--non-whitespace)
     (cond ((= start (point)) #'forth-syntax--state-eob)
          (t
-          (forth-syntax--set-syntax start (point) "w")
+          (forth-syntax--set-word-syntax start (point))
           (let ((word (buffer-substring-no-properties start (point))))
             (cond ((forth-syntax--lookup word))
                   (t
diff --git a/test/tests.el b/test/tests.el
index 5b3ce27302..3822334861 100644
--- a/test/tests.el
+++ b/test/tests.el
@@ -191,11 +191,8 @@ The whitespace before and including \"|\" on each line is 
removed."
   (forth-assert-forward-sexp " :noname foo bar ; \ x" 2 19)
   (forth-assert-forward-sexp " if drop exit else 1+ then bar " 2 27))
 
-;; IDEA 1: in words like foo-bar give the "-" a "word constituent"
-;; syntax so that word movement works like in Lisp mode (which
-;; everybody is used to :-).
-;;
-;; IDEA 2: give the filename in "include filename" string syntax.
+;; IDEA: give the filename in "include filename" string syntax.
 (ert-deftest forth-word-movements ()
   (forth-assert-forward-word "include /tmp/foo.fth \ bar" 1 8)
-  (forth-assert-forward-word "include /tmp/foo.fth \ bar" 8 21))
+  (forth-assert-forward-word "include /tmp/foo.fth \ bar" 8 13)
+  (forth-assert-forward-word "foo-bar" 1 4))



reply via email to

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