Substituindo parágrafo de preenchimento no modo LaTeX

9

Gostaria de mudar o comportamento de fill-paragraphcertos modos (por exemplo, LaTeX-modefornecidos por AucTeX).

Eu poderia apenas religar a chave M-q, mas também estou usando evil-modecuja implementação de evil-fill-and-moveusos fill-region. Idealmente, minha função de preenchimento personalizado substitui as funções fill-paragraph(assim funciona M-q) e fill-region(assim funciona evil).

Supondo que eu tenho um programa independente formatque aceita o código LaTeX via stdine gera código formatado stdout, como substituir as duas funções de preenchimento acima para usar format?

(Nota: este é semelhante ao vimda formatprgopção.)

Kevin
fonte
A religação M-qafeta evil-fill-and-movede qualquer maneira? Eu não uso o mal, por isso estou curioso. Se a região estiver ativa, fill-paragraphligue de fill-regionqualquer maneira. Portanto, você pode aconselhar ou substituir fill-regionpor sua função.
Vamsi 24/09
Eu não tentei, mas acredito que não. evil-fill-and-moveestá vinculado à sequência de teclas gqno modo normal do mal. A religação M-qnão deve afetar essa combinação de teclas. Em certo sentido, minha pergunta é realmente duas perguntas: 1) Como substituir as duas funções? 2) Como usar um programa externo? A razão para 2) é que eu já tenho uma solução externa não Elisp.
Kevin
11
Nesse caso, você pode resolver parte do seu problema (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))onde your-fill-functionestá o seu elisp customizado. Isso definirá essa combinação de teclas apenas no Auctex. Você provavelmente poderia usar shell-command-on-regiono argumento REPLACE para definir your-fill-function.
Vamsi

Respostas:

7

Seria melhor ter duas funções, embora uma possa ser implementada em termos da outra. A razão é que um parágrafo é uma região implícita ; portanto, a entrada nos dois casos deve ser diferente

(defun my-format-region (beg end)
  (interactive "r")
  (shell-command-on-region beg end "format"))

(defun my-format-paragraph ()
  (interactive)
  (save-excursion
    (mark-paragraph)
    (my-format-region (point) (mark))))

Para substituir funções por outras pessoas, independentemente de suas combinações de teclas, use as combinações de teclas remapadas:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
Sigma
fonte