Make double-click-1 work with unbalanced parens in CC Mode. Fixes bug#5560.
* lisp/mouse.el (mouse-start-end): check the syntax of alleged parens with `syntax-after' to ensure syntax-table text properties are respected.
This commit is contained in:
parent
7d206fc604
commit
95f5a4337c
1 changed files with 19 additions and 10 deletions
|
@ -931,20 +931,29 @@ If MODE is 2 then do the same for lines."
|
|||
(= start end)
|
||||
(char-after start)
|
||||
(= (char-syntax (char-after start)) ?\())
|
||||
(list start
|
||||
(save-excursion
|
||||
(goto-char start)
|
||||
(forward-sexp 1)
|
||||
(point))))
|
||||
(if (/= (syntax-class (syntax-after start)) 4) ; raw syntax code for ?\(
|
||||
;; This happens in CC Mode when unbalanced parens in CPP
|
||||
;; constructs are given punctuation syntax with
|
||||
;; syntax-table text properties. (2016-02-21).
|
||||
(signal 'scan-error (list "Containing expression ends prematurely"
|
||||
start start))
|
||||
(list start
|
||||
(save-excursion
|
||||
(goto-char start)
|
||||
(forward-sexp 1)
|
||||
(point)))))
|
||||
((and (= mode 1)
|
||||
(= start end)
|
||||
(char-after start)
|
||||
(= (char-syntax (char-after start)) ?\)))
|
||||
(list (save-excursion
|
||||
(goto-char (1+ start))
|
||||
(backward-sexp 1)
|
||||
(point))
|
||||
(1+ start)))
|
||||
(if (/= (syntax-class (syntax-after start)) 5) ; raw syntax code for ?\)
|
||||
;; See above comment about CC Mode.
|
||||
(signal 'scan-error (list "Unbalanced parentheses" start start))
|
||||
(list (save-excursion
|
||||
(goto-char (1+ start))
|
||||
(backward-sexp 1)
|
||||
(point))
|
||||
(1+ start))))
|
||||
((and (= mode 1)
|
||||
(= start end)
|
||||
(char-after start)
|
||||
|
|
Loading…
Add table
Reference in a new issue