Subject: Re: bug#47936: AucTeX and electric-pair-mode

From: Ikumi Keita <[email-masked]>
Date: Thu, 22 Apr 2021 13:33:34 +0900

Hi Philip,

>>>>> Philip Kaludercic <[email-masked]> writes:

> an annoyance I have with auctex is it's interaction with
> electric-pair-mode. If both LaTeX-electric-left-right-brace and
> electric-pair-mode are enabled, typing '(' inserts "())", because both
> AucTeX and the electric function insert a closing parentheses. I still
> want to keep LaTeX-electric-left-right-brace enabled, because it handles
> TeX-specific parentheses (\{, \left <something>, ...) better.

AUCTeX already has the following code in `LaTeX-common-initialization'
to turn off `electric-pair-mode' explicitly.  So I guess you customize
`LaTeX-mode-hook' to re-enable `electric-pair-mode'.

  ;; AUCTeX's brace pairing feature (`LaTeX-electric-left-right-brace') doesn't
  ;; play nice with `electric-pair-mode' which is a global minor mode as of
  ;; emacs 24.4.
  (when (and LaTeX-electric-left-right-brace
             (boundp 'electric-pair-mode))
    (set (make-local-variable 'electric-pair-mode) nil))

> The attached patch would propose a solution that respects
> electric-pair-mode and doesn't insert an extra closing pair if
> enabled. It seems to work on my system, and if there are no issues it
> would be great if something along these lines could be done to avoid
> this behaviour.

Thanks. Maybe the attached patch might be better so that
`LaTeX-insert-left-brace' can get rid of all unexpected interactions
with `self-insert-command'. Tassilo, what do you think about it?

Regards,
Ikumi Keita

diff --git a/latex.el b/latex.el
index 83d50caf..7e14de75 100644
--- a/latex.el
+++ b/latex.el
@@ -2899,7 +2899,7 @@ Normally bound to keys \(, { and [."
              (TeX-active-mark)
              (> (point) (mark)))
         (exchange-point-and-mark))
-    (self-insert-command (prefix-numeric-value arg))
+    (insert (make-string (prefix-numeric-value arg) last-command-event))
     (if auto-p
         (let ((lbrace (char-to-string last-command-event)) lmacro skip-p)
           (save-excursion
@@ -6810,13 +6810,6 @@ function would return non-nil and `(match-string 1)' would return
 
   (define-key LaTeX-mode-map "\C-xne" #'LaTeX-narrow-to-environment)
 
-  ;; AUCTeX's brace pairing feature (`LaTeX-electric-left-right-brace') doesn't
-  ;; play nice with `electric-pair-mode' which is a global minor mode as of
-  ;; emacs 24.4.
-  (when (and LaTeX-electric-left-right-brace
-             (boundp 'electric-pair-mode))
-    (set (make-local-variable 'electric-pair-mode) nil))
-
   ;; Initialization of `add-log-current-defun-function':
   (set (make-local-variable 'add-log-current-defun-function)
        #'TeX-current-defun-name))