Pergunta

Ao usar paredit nos modos de programação como C, digitação (irá inserir um espaço antes do parêntese quando eu estou tentando chamar uma função, deixando-me com:

foo ()

Existe uma maneira de desativar a inserção do espaço sem alterar fonte do paredit?

Foi útil?

Solução

Bem, aparece maneira paredit ao trabalho é que ele verifica as tabelas de sintaxe para ver se você está inserindo o direito par depois de uma palavra / símbolo / etc., Caso em que ele força um espaço a ser inserido. Você precisa substituir essa funcionalidade - o que pode ser feito de várias maneiras diferentes:. Conselho, redefinir a função que determina espaço, mesa de mudar a sintaxe, etc

Eu tentaria a frente:

(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)))))))

Isto, obviamente, se aplica a todos os lugares onde você usar paredit. Se você quiser algo mais modo específico, você pode adicionar algumas condições para que a declaração and (por exemplo (and ... (memq major-mode '(c-mode lisp-mode)))).

Então ... Eu acho que eu fiz mudar a "fonte", mas você pode fazer a mesma coisa com um pedaço de defadvice ... é tudo elisp, então a diferença é mínima. Não parece ser uma definição para controlar este tipo de comportamento.

Outras dicas

Veja paredit-space-for-delimiter-predicates

Bem, paredit é ideal para edição de línguas construídas de S-expressões. Se você só gosta como ele insere automaticamente o parêntese de fechamento, recurso de uso esqueleto de par .

(setq skeleton-pair t)
(global-set-key "(" 'skeleton-pair-insert-maybe)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top