emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master df8dede858: Fix electric paring in rcirc buffers


From: Philip Kaludercic
Subject: master df8dede858: Fix electric paring in rcirc buffers
Date: Sun, 31 Jul 2022 06:47:31 -0400 (EDT)

branch: master
commit df8dede8585257a2ee76ed93d6ecb6cf117e124a
Author: Philip Kaludercic <philipk@posteo.net>
Commit: Philip Kaludercic <philipk@posteo.net>

    Fix electric paring in rcirc buffers
    
    * rcirc.el (rcirc--electric-pair-inhibit): Add new predicate function.
    (rcirc-mode): Use rcirc--electric-pair-inhibit.
---
 lisp/net/rcirc.el | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 54d7861f44..065398b64a 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -1388,6 +1388,21 @@ Each element looks like (FILENAME . TEXT).")
   "The current number of responses printed in this channel.
 This number is independent of the number of lines in the buffer.")
 
+(defun rcirc--electric-pair-inhibit (char)
+  "Check whether CHAR should be paired by `electric-pair-mode'.
+This uses the default value inhibition predicate (as set by
+`electric-pair-inhibit-predicate'), but ignores all text prior to
+the prompt so that mismatches parentheses by some other message
+does not confuse the pairing."
+  (let ((fallback (default-value 'electric-pair-inhibit-predicate)))
+    ;; The assumption is that this function is only bound by
+    ;; `rcirc-mode', and should never be the global default.
+    (cl-assert (not (eq fallback #'rcirc--electric-pair-inhibit)))
+    (save-restriction
+      (widen)
+      (narrow-to-region rcirc-prompt-start-marker (point-max))
+      (funcall fallback char))))
+
 (defun rcirc-mode (process target)
   "Initialize an IRC buffer for writing with TARGET.
 PROCESS is the process object used for communication.
@@ -1459,6 +1474,9 @@ PROCESS is the process object used for communication.
   (when rcirc-cycle-completion-flag
     (setq-local completion-cycle-threshold t))
 
+  (setq-local electric-pair-inhibit-predicate
+              #'rcirc--electric-pair-inhibit)
+
   (run-mode-hooks 'rcirc-mode-hook))
 
 (defun rcirc-update-prompt (&optional all)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]