Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" 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.