Inhibit quote autopairing more frequently
Backported from trunk 2014-04-02T09:59:06Z!joaotavora@gmail.com * 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'.
This commit is contained in:
parent
a9c921e66b
commit
528c33b528
4 changed files with 29 additions and 15 deletions
|
@ -1,3 +1,11 @@
|
|||
2014-04-07 João Távora <joaotavora@gmail.com>
|
||||
|
||||
* 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-07 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* shell.el (shell-directory-tracker):
|
||||
|
|
|
@ -334,18 +334,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)
|
||||
|
@ -379,7 +378,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)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-04-07 João Távora <joaotavora@gmail.com>
|
||||
|
||||
* automated/electric-tests.el (inhibit-if-strings-mismatched):
|
||||
New test, change from `inhibit-only-of-next-is-mismatched'.
|
||||
|
||||
2014-04-06 João Távora <joaotavora@gmail.com>
|
||||
|
||||
* automated/python-tests.el (python-triple-quote-pairing): New test.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue