Remplacer le paragraphe de remplissage en mode LaTeX

9

Je voudrais changer le comportement de fill-paragraphdans certains modes (par exemple LaTeX-modefourni par AucTeX).

Je pourrais simplement relier la clé M-q, mais j'utilise aussi evil-modela mise en œuvre de qui evil-fill-and-moveutilise fill-region. Idéalement, ma fonction de remplissage personnalisé pour remplacer à la fois les fonctions fill-paragraph(donc ça marche avec M-q) et fill-region(donc ça marche avec evil).

En supposant que j'ai un programme autonome formatqui accepte le code LaTeX via stdinet génère le code formaté stdout, comment pourrais-je remplacer les deux fonctions de remplissage ci-dessus à utiliser format?

(Remarque: ceci est similaire à viml' formatprgoption de.)

Kevin
la source
La reliure M-qaffecte- t-elle evil-fill-and-movede toute façon? Je n'utilise pas le mal donc je suis curieux. Si la région est active, fill-paragraphappelez fill-regionquand même. Vous pourriez donc conseiller ou remplacer fill-regionpar votre fonction.
Vamsi
Je ne l'ai pas essayé, mais je ne crois pas. evil-fill-and-moveest lié à la séquence de touches gqen mode normal du mal. La nouvelle liaison M-qne doit pas affecter cette liaison de touches. Dans un certain sens, ma question est vraiment deux questions: 1) Comment remplacer les deux fonctions? 2) Comment utiliser un programme externe? La raison de 2) est que j'ai déjà une solution externe non Elisp.
Kevin
1
Dans ce cas, vous pouvez résoudre une partie de votre problème par (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))où se your-fill-functiontrouve votre defun elisp personnalisé. Cela ne définira ce combo clé que dans Auctex. Vous pourriez probablement utiliser shell-command-on-regionavec l'argument REPLACE pour définir your-fill-function.
Vamsi

Réponses:

7

Il serait préférable d'avoir 2 fonctions, bien que l'une puisse être implémentée en fonction de l'autre. La raison étant qu'un paragraphe est une région implicite , donc la saisie dans les deux cas doit être différente

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

Afin de substituer des fonctions à d'autres, indépendamment de leur raccourci clavier, utilisez les raccourcis clavier de remappage:

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