Ответ 1
Ну, как работает paredit, так это то, что он проверяет таблицы синтаксиса, чтобы увидеть, вставляете ли вы пару сразу после слова/символа/и т.д., и в этом случае он заставляет пространство быть вставленным. Вам необходимо переопределить эту функциональность - это можно сделать несколькими способами: советом, переопределением функции определения пространства, изменением таблицы синтаксиса и т.д.
Я бы попробовал прямо:
(defun paredit-space-for-delimiter-p (endp delimiter)
(and (not (if endp (eobp) (bobp)))
(memq (char-syntax (if endp (char-after) (char-before)))
(list ?\" ;; REMOVED ?w ?_
(let ((matching (matching-paren delimiter)))
(and matching (char-syntax matching)))))))
Это, очевидно, применимо ко всем местам, где вы используете paredit
. Если вы хотите что-то более конкретное, вы можете добавить некоторые условия к этому оператору and
(например, (and ... (memq major-mode '(c-mode lisp-mode)))
).
Итак... Думаю, я изменил "источник", но вы можете сделать то же самое с куском defadvice
... все это elisp, поэтому разница минимальна. Кажется, что не существует параметра для управления этим типом поведения.