Überschreiben des Füllabsatzes im LaTeX-Modus

9

Ich möchte das Verhalten fill-paragraphin bestimmten Modi ändern (zB LaTeX-modebereitgestellt von AucTeX).

Ich könnte den Schlüssel einfach neu binden M-q, aber ich verwende auch evil-modedessen Implementierung von evil-fill-and-moveVerwendungen fill-region. Im Idealfall überschreibt meine benutzerdefinierte Füllfunktion sowohl die Funktionen fill-paragraph(damit es funktioniert M-q) als auch fill-region(damit es funktioniert evil).

Angenommen, ich habe ein eigenständiges Programm format, das LaTeX-Code über stdinformatierten Code aufnimmt und diesen ausgibt stdout. Wie würde ich die beiden oben genannten Füllfunktionen überschreiben, um sie zu verwenden format?

(Hinweis: Dies ist ähnlich wie vim‚s - formatprgOption.)

Kevin
quelle
Beeinflusst M-qdas erneute Binden überhaupt evil-fill-and-move? Ich benutze das Böse nicht, deshalb bin ich neugierig. Wenn die Region trotzdem aktiv ist fill-paragraph, wird fill-regionangerufen. So können Sie beraten oder durch fill-regionIhre Funktion ersetzen .
Vamsi
Ich habe es nicht versucht, aber ich glaube nicht. evil-fill-and-moveist gqim normalen Modus des Bösen an die Tastenfolge gebunden . Das erneute Binden M-qsollte diese Tastenkombination nicht beeinflussen. In gewissem Sinne sind meine Fragen wirklich zwei Fragen: 1) Wie ersetze ich die beiden Funktionen? 2) Wie benutze ich ein externes Programm? Der Grund für 2) ist, dass ich bereits eine externe Nicht-Elisp-Lösung habe.
Kevin
1
In diesem Fall können Sie einen Teil des Problems zu lösen , indem , (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))wo your-fill-functionist Ihre individuelle elisp defun. Dadurch wird diese Tastenkombination nur in Auctex festgelegt. Sie könnten wahrscheinlich shell-command-on-regionmit dem REPLACE-Argument definieren your-fill-function.
Vamsi

Antworten:

7

Es wäre besser, zwei Funktionen zu haben, obwohl eine in Bezug auf die andere implementiert werden kann. Der Grund dafür ist, dass ein Absatz ein impliziter Bereich ist, daher sollte die Eingabe in beiden Fällen unterschiedlich sein

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

Verwenden Sie Remap-Tastenkombinationen, um Funktionen unabhängig von ihrer Tastenkombination durch andere zu ersetzen:

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