Przesłanianie akapitu wypełnienia w trybie LaTeX

9

Chciałbym zmienić zachowanie fill-paragraphniektórych trybów (np. LaTeX-modeDostarczone przez AucTeX).

Mógłbym po prostu ponownie powiązać klucz M-q, ale używam również, evil-modektórego implementacja evil-fill-and-movezastosowań fill-region. Idealnie fill-paragraphbyłoby, gdyby moja niestandardowa funkcja wypełniania zastępowała obie funkcje (więc działa z nimi M-q) i fill-region(więc działa z evil).

Zakładając, że mam samodzielny program, formatktóry pobiera kod LaTeX przez stdini formatuje kod wyjściowy stdout, jak miałbym zastąpić dwie powyższe funkcje wypełniania, aby użyć format?

(Uwaga: to jest podobna do vim„s formatprgopcja).

Kevin
źródło
Czy ponowne wiązanie w jakikolwiek sposób M-qwpływa evil-fill-and-move? Nie używam zła, dlatego jestem ciekawy. Jeśli region jest aktywny, mimo to fill-paragraphpołączenia fill-region. Możesz więc doradzić lub zastąpić fill-regionswoją funkcją.
Vamsi
Nie próbowałem tego, ale nie wierzę. evil-fill-and-movejest związany z sekwencją klawiszy gqw normalnym trybie zła. Ponowne wiązanie M-qnie powinno wpływać na to wiązanie klawiszy. W pewnym sensie moje pytanie to tak naprawdę dwa pytania: 1) Jak zastąpić dwie funkcje? 2) Jak korzystać z zewnętrznego programu? Powodem 2) jest to, że mam już zewnętrzne rozwiązanie inne niż Elisp.
Kevin
1
W takim przypadku możesz rozwiązać część problemu, określając, (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))gdzie your-fill-functionznajduje się Twój własny elisp defun. Spowoduje to ustawienie tej kombinacji klawiszy tylko w Auctex. Prawdopodobnie możesz użyć shell-command-on-regionargumentu REPLACE do zdefiniowania your-fill-function.
Vamsi

Odpowiedzi:

7

Lepiej byłoby mieć 2 funkcje, chociaż jedną można zaimplementować w odniesieniu do drugiej. Powodem jest to, że akapit jest regionem niejawnym , więc dane wejściowe w obu przypadkach powinny być różne

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

Aby zastąpić funkcje innymi, niezależnie od ich przypisania, użyj przyporządkowania skrótów:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
Sigma
źródło