Изменение форматирования Paredit

При использовании paredit в режимах программирования, таких как C, набрав (будет вставлять пробел перед парнем, когда я пытаюсь вызвать функцию, оставляя меня с:

foo ()

Есть ли способ отключить вставку пространства без изменения paredit-источника?

Ответ 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, поэтому разница минимальна. Кажется, что не существует параметра для управления этим типом поведения.

Ответ 2

См. paredit-space-for-delimiter-predicates

Ответ 3

Ну, Paredit идеально подходит для редактирования языков, построенных из S-выражений. Если вам просто нравится, как он автоматически вставляет закрытый палец, используйте функцию скелет-пар.

(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)