El operador inteligente parece prometedor, pero no lo he probado, así que no puedo hablar por él. Una solución preconstruida sería ideal, pero si ninguna es suficiente, sería muy fácil ajustar esta funcionalidad y ajustarla en un modo menor.
Aquí está mi ir:
(defvar auto-punc-punctuation-members
(string-to-list ".,:;?!")
"List of charactesr to insert spaces after")
(defvar auto-punc-ignore-members
(string-to-list " \t")
"List of characters to not auto insert spaces before")
(defun auto-punc-maybe-do ()
"If the last entered character is not in `auto-punc-punctuation-members' or `auto-punc-ignore-members',
and the prior character is in `auto-punc-punctuation-members',
insert a space between the two characters. "
(when (and auto-space-punctuation-mode
(not (member (char-before) (append auto-punc-punctuation-members auto-punc-ignore-members)))
(member (char-before (1- (point))) auto-punc-punctuation-members))
(backward-char 1)
(insert " ")
(forward-char 1)))
(define-minor-mode auto-space-punctuation-mode
"Automatically inserts spaces between some punctuation and other characters."
:init-value nil
:lighter "._a"
:keymap nil
(make-variable-buffer-local 'post-self-insert-hook)
(if auto-space-punctuation-mode
(add-hook 'post-self-insert-hook 'auto-punc-maybe-do)
(remove-hook 'post-self-insert-hook 'auto-punc-maybe-do)))
Simplemente puede agregarlo a su init y habilitarlo automáticamente cuando lo desee
(add-hook 'text-mode-hook 'auto-space-punctuation-mode)
Cada vez que inserte un carácter, la función se auto-punc-maybe-do
ejecuta, lea la cadena de documentación para asegurarse de que este sea el comportamiento que desea. Básicamente, si escribe puntuación, entonces cualquier cosa que no sea puntuación o espacio en blanco, se insertará un espacio automáticamente.