aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Távora <[email protected]>2014-04-02 10:59:06 +0100
committerJoão Távora <[email protected]>2014-04-02 10:59:06 +0100
commit200c532bd04a67a89db602462d74706051c61178 (patch)
treeef02bee0c2b5aa0d8e9adc407d24a7e20a97b96a
parent2395f2b919f44cae22b2ca99cd779e69d79f710a (diff)
Inhibit quote autopairing more frequently
* lisp/elec-pair.el (electric-pair-inhibit-if-helps-balance): Inhibit quote pairing if point-max is inside an unterminated string. (electric-pair--looking-at-unterminated-string-p): Delete. (electric-pair--in-unterminated-string-p): New function. * test/automated/electric-tests.el (inhibit-if-strings-mismatched): New test, change from `inhibit-only-of-next-is-mismatched'.
-rw-r--r--lisp/ChangeLog8
-rw-r--r--lisp/elec-pair.el27
-rw-r--r--test/ChangeLog5
-rw-r--r--test/automated/electric-tests.el4
4 files changed, 29 insertions, 15 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index dca32ba701..66ec9ab3dc 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,11 @@
+2014-04-02 João Távora <[email protected]>
+
+ * elec-pair.el (electric-pair-inhibit-if-helps-balance): Inhibit
+ quote pairing if point-max is inside an unterminated string.
+ (electric-pair--looking-at-unterminated-string-p):
+ Delete.
+ (electric-pair--in-unterminated-string-p): New function.
+
2014-04-01 Daniel Colascione <[email protected]>
* minibuffer.el (minibuffer-complete): Prevent assertion failure
diff --git a/lisp/elec-pair.el b/lisp/elec-pair.el
index 52ad9bc024..2d7060eb27 100644
--- a/lisp/elec-pair.el
+++ b/lisp/elec-pair.el
@@ -364,18 +364,17 @@ If point is not enclosed by any lists, return ((t) . (t))."
(funcall ended-prematurely-fn)))))))
(cons innermost outermost)))
-(defun electric-pair--looking-at-unterminated-string-p (char)
- "Return non-nil if following string starts with CHAR and is unterminated."
- ;; FIXME: ugly/naive
- (save-excursion
- (skip-chars-forward (format "^%c" char))
- (while (not (zerop (% (save-excursion (skip-syntax-backward "\\")) 2)))
- (unless (eobp)
- (forward-char 1)
- (skip-chars-forward (format "^%c" char))))
- (and (not (eobp))
- (condition-case nil
- (progn (forward-sexp) nil)
+(defun electric-pair--in-unterminated-string-p (char)
+ "Return non-nil if inside unterminated string started by CHAR"
+ (let* ((ppss (syntax-ppss))
+ (relevant-ppss (if (nth 4 ppss) ; in comment
+ (electric-pair--syntax-ppss)
+ ppss))
+ (string-delim (nth 3 relevant-ppss)))
+ (and (or (eq t string-delim)
+ (eq char string-delim))
+ (condition-case nil (progn (scan-sexps (nth 8 relevant-ppss) 1)
+ nil)
(scan-error t)))))
(defun electric-pair--inside-string-p (char)
@@ -409,7 +408,9 @@ happened."
(t
(eq (cdr outermost) pair)))))
((eq syntax ?\")
- (electric-pair--looking-at-unterminated-string-p char))))
+ (save-excursion
+ (goto-char (point-max))
+ (electric-pair--in-unterminated-string-p char)))))
(insert-char char)))))
(defun electric-pair-skip-if-helps-balance (char)
diff --git a/test/ChangeLog b/test/ChangeLog
index 75a3d0101c..be845db162 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,8 @@
+2014-04-02 João Távora <[email protected]>
+
+ * automated/electric-tests.el (inhibit-if-strings-mismatched):
+ New test, change from `inhibit-only-of-next-is-mismatched'.
+
2014-03-26 Barry O'Reilly <[email protected]>
* automated/undo-tests.el (undo-test-marker-adjustment-nominal):
diff --git a/test/automated/electric-tests.el b/test/automated/electric-tests.el
index e3ffd1abd2..c43b87f3f8 100644
--- a/test/automated/electric-tests.el
+++ b/test/automated/electric-tests.el
@@ -295,9 +295,9 @@ Should %s \"%s\" and point at %d"
:bindings `((electric-pair-text-syntax-table
. ,prog-mode-syntax-table)))
-(define-electric-pair-test inhibit-only-if-next-is-mismatched
+(define-electric-pair-test inhibit-if-strings-mismatched
"\"foo\"\"bar" "\""
- :expected-string "\"\"\"foo\"\"bar"
+ :expected-string "\"\"foo\"\"bar"
:expected-point 2
:test-in-strings nil
:bindings `((electric-pair-text-syntax-table