From e3af763f4da9157de53f0533a7fb32fb831994e6 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sun, 19 Jan 2014 12:32:47 +0000 Subject: [PATCH] Bind open-paren-in-column-0-is-defun-start to nil at some entry points. * progmodes/cc-engine.el (c-invalidate-state-cache-1) (c-parse-state-1, c-guess-basic-syntax): Bind it here. * progmodes/cc-mode.el (c-before-change, c-after-change) (c-font-lock-fontify-region): Bind it here. --- lisp/ChangeLog | 9 +++++++++ lisp/progmodes/cc-engine.el | 7 +++++-- lisp/progmodes/cc-mode.el | 24 +++++++++++++----------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 471be5eee7..138949b0c8 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,12 @@ +2014-01-19 Alan Mackenzie + + Bind open-paren-in-column-0-is-defun-start to nil at some entry + points. + * progmodes/cc-engine.el (c-invalidate-state-cache-1) + (c-parse-state-1, c-guess-basic-syntax): Bind it here. + * progmodes/cc-mode.el (c-before-change, c-after-change) + (c-font-lock-fontify-region): Bind it here. + 2014-01-19 Martin Rudalics * term.el (term-window-width): Call window-text-width instead of diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index efa8be1c80..24ca6ca7ea 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -3183,7 +3183,8 @@ comment at the start of cc-engine.el for more info." ;; Truncate `c-state-cache' and set `c-state-cache-good-pos' to a value ;; below `here'. To maintain its consistency, we may need to insert a new ;; brace pair. - (let ((here-bol (c-point 'bol here)) + (let (open-paren-in-column-0-is-defun-start + (here-bol (c-point 'bol here)) too-high-pa ; recorded {/(/[ next above here, or nil. dropped-cons ; was the last removed element a brace pair? pa) @@ -3254,6 +3255,7 @@ comment at the start of cc-engine.el for more info." ;; This function might do hidden buffer changes. (let* ((here (point)) (here-bopl (c-point 'bopl)) + open-paren-in-column-0-is-defun-start strategy ; 'forward, 'backward etc.. ;; Candidate positions to start scanning from: cache-pos ; highest position below HERE already existing in @@ -9370,7 +9372,8 @@ comment at the start of cc-engine.el for more info." (c-save-buffer-state ((indent-point (point)) (case-fold-search nil) - ;; A whole ugly bunch of various temporary variables. Have + open-paren-in-column-0-is-defun-start + ;; A whole ugly bunch of various temporary variables. Have ;; to declare them here since it's not possible to declare ;; a variable with only the scope of a cond test and the ;; following result clauses, and most of this function is a diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 98bf7053ce..e961343713 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -1032,15 +1032,16 @@ Note that the style variables are always made local to the buffer." (list type marked-id type-pos term-pos (buffer-substring-no-properties type-pos term-pos) - (buffer-substring-no-properties beg end))))))) - - (if c-get-state-before-change-functions - (mapc (lambda (fn) - (funcall fn beg end)) - c-get-state-before-change-functions)) - ))) - ;; The following must be done here rather than in `c-after-change' because - ;; newly inserted parens would foul up the invalidation algorithm. + (buffer-substring-no-properties beg end))))))) + + (if c-get-state-before-change-functions + (let (open-paren-in-column-0-is-defun-start) + (mapc (lambda (fn) + (funcall fn beg end)) + c-get-state-before-change-functions))) + ))) + ;; The following must be done here rather than in `c-after-change' because + ;; newly inserted parens would foul up the invalidation algorithm. (c-invalidate-state-cache beg)) (defvar c-in-after-change-fontification nil) @@ -1062,7 +1063,7 @@ Note that the style variables are always made local to the buffer." ;; This calls the language variable c-before-font-lock-functions, if non nil. ;; This typically sets `syntax-table' properties. - (c-save-buffer-state (case-fold-search) + (c-save-buffer-state (case-fold-search open-paren-in-column-0-is-defun-start) ;; When `combine-after-change-calls' is used we might get calls ;; with regions outside the current narrowing. This has been ;; observed in Emacs 20.7. @@ -1178,7 +1179,8 @@ Note that the style variables are always made local to the buffer." ;; ;; Type a space in the first blank line, and the fontification of the next ;; line was fouled up by context fontification. - (let ((new-beg beg) (new-end end) new-region case-fold-search) + (let ((new-beg beg) (new-end end) new-region case-fold-search + open-paren-in-column-0-is-defun-start) (if c-in-after-change-fontification (setq c-in-after-change-fontification nil) (save-restriction -- 2.20.1