GNU bug report logs - #78053
[PATCH] Support strings for electric-pairs.

Previous Next

Package: emacs;

Reported by: Elijah Gabe Pérez <eg642616 <at> gmail.com>

Date: Fri, 25 Apr 2025 00:31:01 UTC

Severity: normal

Tags: patch

Full log


Message #26 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Elijah Gabe Pérez <eg642616 <at> gmail.com>
To: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
 text editors" <bug-gnu-emacs <at> gnu.org>
Cc: 78053 <at> debbugs.gnu.org, Stefan Monnier <monnier <at> iro.umontreal.ca>,
 João Távora <joaotavora <at> gmail.com>
Subject: Re: bug#78053: [PATCH] Support strings for electric-pairs.
Date: Sun, 25 May 2025 19:16:56 -0600
[Message part 1 (text/plain, inline)]
Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs <at> gnu.org> writes:

>> @@ -41,7 +41,9 @@ electric-pair-pairs
>>  See also the variable `electric-pair-text-pairs'."
>>    :version "24.1"
>>    :group 'electricity
>> -  :type '(repeat (cons character character)))
>> +  :type '(repeat
>> +          (choice (cons character character)
>> +                  (cons string string))))
>
> We want to do the same for `electric-pair-text-pairs`, no?
>

Yes, I forgot it.

>> @@ -258,7 +260,18 @@ electric-pair-syntax-info
>>       (direct (if (eq (car direct) (cdr direct))
>>                   (list ?\" command-event t string-or-comment)
>>                 (list ?\( (cdr direct) t string-or-comment)))
>> -     (reverse (list ?\) (car reverse) t string-or-comment)))))
>> +     (reverse (list ?\) (car reverse) t string-or-comment))
>> +     ;; The if-let here is for avoid unnecessary looking-back computation
>> +     ((if-let* ((str-pair
>> +		 (cl-loop for pairs in fallback
>> +			  do
>> +			  (if (and
>> +			       (stringp (car pairs))
>> +			       (looking-back
>> +				(regexp-quote (car pairs))
>> +				(- (point) (length (car pairs)))))
>> +			      (cl-return (cdr pairs))))))
>> +	  (list 'str str-pair nil nil))))))
>
> BTW, here you could use `compare-buffer-substrings`.

Thanks, Can you explain how to use it in this case?  AFAIK
`compare-buffer-substrings' needs 2 strings in the buffer for the
comparison.

>>  (defun electric-pair--insert (char times)
>>    (let ((last-command-event char)
>> @@ -591,6 +604,11 @@ electric-pair-post-self-insert-function
>>                                pos))
>>           (forward-char num))
>>          ;; Insert matching pair.
>> +        ;; String pairs
>> +        ((and (eq syntax 'str) (not overwrite-mode))
>> +         (insert " ")
>> +         (save-excursion (insert " " pair)))
>> +        ;; Char pairs
>>          ((and (memq syntax '(?\( ?\" ?\$))
>>                (not overwrite-mode)
>>                (or unconditional
>
> I can imagine some multi-char delimiters which don't call for spaces
> inside of them (e.g. LaTeX's ``...''), so maybe the entries in
> `electric-pair-pairs` should have some extra info about it.
> I suggest we replace the (STRING . STRING) format with
> (STRING STRING ...) so we can put extra info in the `...`.

Are you sure it's good idea to replace the cons cell form with a list?
I've added the list form, but it coexists with the cons cell to avoid
any future bug.

[0001-Support-strings-for-electric-pairs.-bug-78053.patch (text/x-patch, attachment)]
[Message part 3 (text/plain, inline)]
-- 
                                          - E.G via GNU Emacs and Org.

This bug report was last modified 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.