Sostituzione del paragrafo di riempimento in modalità LaTeX


9

Vorrei cambiare il comportamento di fill-paragraphin determinate modalità (ad esempio LaTeX-modefornite da AucTeX).

Potrei semplicemente ricollegare la chiave M-q, ma sto anche usando la evil-modecui implementazione degli evil-fill-and-moveusi fill-region. Idealmente, la mia funzione di riempimento personalizzata per sovrascrivere entrambe le funzioni fill-paragraph(in modo che funzioni M-q) e fill-region(in modo che funzioni evil).

Supponendo che ho un programma autonomo formatche accetta il codice LaTeX tramite stdine genera il codice formattato stdout, come potrei fare per sovrascrivere le due funzioni di riempimento di cui sopra format?

(Nota: questo è simile a vim's formatprgopzione.)


Il rebinding M-qinfluenza evil-fill-and-movecomunque? Non uso il male, quindi sono curioso. Se la regione è attiva, fill-paragraphchiama fill-regioncomunque. Quindi potresti consigliare o sostituire fill-regioncon la tua funzione.
Vamsi,

Non l'ho provato, ma credo di no. evil-fill-and-moveè legato alla sequenza di tasti gqnella modalità normale del male. La rilegatura M-qnon dovrebbe influire su questa associazione di tasti. In un certo senso, la mia domanda è in realtà due domande: 1) Come sostituire le due funzioni? 2) Come utilizzare un programma esterno? Il motivo di 2) è che ho già una soluzione esterna, non Elisp.
Kevin,

1
In tal caso, puoi risolvere parte del problema in base a (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))dove si your-fill-functiontrova il tuo defun personalizzato elisp. Questo imposterà quella combinazione di tasti solo in Auctex. Probabilmente potresti usare shell-command-on-regionl'argomento REPLACE per definire your-fill-function.
Vamsi,

Risposte:


7

Sarebbe meglio avere 2 funzioni, anche se una può essere implementata in termini di altra. Il motivo è che un paragrafo è una regione implicita , quindi l'input in entrambi i casi dovrebbe essere diverso

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

Per sostituire le funzioni ad altri, indipendentemente dalla loro associazione di tasti, usa i tasti di rimappatura:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.