Let jit-lock-after-change.el have: (add-hook 'jit-lock-after-change-extend-region-functions (lambda (_start _end _old-len) (condition-case nil (backward-up-list) (scan-error nil))) nil t) Start today's trunk by: emacs -Q --load /tmp/jit-lock-after-change.el Insert parentheses: M-( Inserted into *scratch* buffer: ) ( But expected: () I'm on RHEL 5.