Изменение форматирования Paredit - PullRequest
10 голосов
/ 27 мая 2009

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

foo ()

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

Ответы [ 3 ]

12 голосов
/ 27 мая 2009

Итак, 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, поэтому разница минимальна. Похоже, что нет настройки для управления этим типом поведения.

5 голосов
/ 14 февраля 2011

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

4 голосов
/ 27 мая 2009

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

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