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

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

[elpa] externals/objed 041f518 3/5: Fix sexp movement in strings


From: Clemens Radermacher
Subject: [elpa] externals/objed 041f518 3/5: Fix sexp movement in strings
Date: Sat, 9 Feb 2019 08:38:59 -0500 (EST)

branch: externals/objed
commit 041f518f359924f70ba1177346b004c08c03efed
Author: Clemens Radermacher <address@hidden>
Commit: Clemens Radermacher <address@hidden>

    Fix sexp movement in strings
---
 objed-objects.el |  8 +++++---
 objed.el         | 45 +++++++++++++++++++++++++++++----------------
 2 files changed, 34 insertions(+), 19 deletions(-)

diff --git a/objed-objects.el b/objed-objects.el
index 54f89ab..8955892 100644
--- a/objed-objects.el
+++ b/objed-objects.el
@@ -1212,14 +1212,16 @@ position POS, otherwise just return POS."
 
 ;; * Object definition helpers
 
-(defun objed--in-string-p (&optional syn)
+(defun objed--in-string-p (&optional syn ignore-atp)
   "Return non-nil if point is inside or at string.
 
 If SYN is given use it instead of syntax at point."
   (let ((syn (or syn (syntax-ppss))))
-    (or (and (nth 3 syn)
+    (if (and (nth 3 syn)
              (nth 8 syn))
-        (objed--at-string-p))))
+        (nth 8 syn)
+      (and (not ignore-atp)
+           (objed--at-string-p)))))
 
 (defun objed--at-string-p ()
   "Return non-nil if point is at string."
diff --git a/objed.el b/objed.el
index 72a41d3..74b219b 100644
--- a/objed.el
+++ b/objed.el
@@ -899,26 +899,39 @@ Use `objed-define-dispatch' to define a dispatch 
command.")
 
 (defun objed--forward-sexp ()
   (interactive)
-  (while (and (not (eobp))
-              (or  (and (not (bobp))
-                        (not (memq (char-syntax (char-before)) (list ?\s ?>)))
-                        (eq (char-syntax (char-after)) ?\"))
-                   (not (ignore-errors
-                          (call-interactively 'forward-sexp)
-                          t))))
-    (forward-char 1)))
+  (let ((stringp nil))
+    (while (and (not (eobp))
+                (or  (and (not (bobp))
+                          (save-excursion
+                            (objed--skip-ws)
+                            (eq (char-syntax (char-after)) ?\"))
+                          (setq stringp (objed--in-string-p nil t)))
+                     (not (ignore-errors
+                            (call-interactively 'forward-sexp)
+                            t))))
+      (if stringp
+          (progn (goto-char stringp)
+                 (forward-sexp 1))
+        (forward-char 1))
+      (setq stringp nil))))
 
 
 (defun objed--backward-sexp ()
   (interactive)
-  (while (and (not (bobp))
-              (or  (and (not (eobp))
-                        (eq (char-syntax (char-before)) ?\")
-                        (not (memq (char-syntax (char-after)) (list ?\s ?>))))
-                   (not (ignore-errors
-                          (call-interactively 'backward-sexp)
-                          t))))
-    (forward-char -1)))
+  (let ((stringp nil))
+    (while (and (not (bobp))
+                (or  (and (not (eobp))
+                          (save-excursion
+                            (objed--skip-ws t)
+                            (eq (char-syntax (char-before)) ?\"))
+                          (setq stringp (objed--in-string-p nil t)))
+                     (not (ignore-errors
+                            (call-interactively 'backward-sexp)
+                            t))))
+      (if stringp
+          (goto-char stringp)
+        (forward-char -1))
+      (setq stringp nil))))
 
 
 (defmacro objed--save-state (&rest body)



reply via email to

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