回答:
スマートなオペレーターは有望に見えますが、まだ試していないので話せません。ビルド済みのソリューションが理想的ですが、十分でない場合は、この機能をラップしてマイナーモードでラップするのは非常に簡単です。
ここに私の行く:
(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)))
あなたは単にそれをあなたのinitに追加し、好きなときにそれを自動的に有効にすることができます
(add-hook 'text-mode-hook 'auto-space-punctuation-mode)
関数auto-punc-maybe-do
が実行する文字を挿入するたびに、docstringを読んで、これが目的の動作であることを確認してください。基本的に、句読点を入力すると、句読点や空白以外のものはすべて自動的にスペースが挿入されます。