Переопределение заполнения абзаца в режиме LaTeX


9

Я хотел бы изменить поведение fill-paragraphв определенных режимах (например, LaTeX-modeпредоставленных AucTeX).

Я мог бы просто привязать ключ M-q, но я также использую evil-modeчью реализацию evil-fill-and-moveиспользует fill-region. В идеале, моя пользовательская функция заполнения должна переопределять обе функции fill-paragraph(чтобы она работала M-q) и fill-region(чтобы она работала evil).

Предполагая, что у меня есть отдельная программа, formatкоторая принимает код LaTeX через stdinи выводит форматированный код stdout, как мне переопределить две вышеупомянутые функции заполнения для использования format?

(Примечание: это похоже на vim's formatprgвариант.)


Есть ли пересвязывание M-qвлияет evil-fill-and-moveна так или иначе? Я не использую зло, поэтому мне любопытно. Если регион активен, fill-paragraphзвонки fill-regionвсе равно. Таким образом, вы могли бы посоветовать или заменить fill-regionсвоей функцией.
Вамси

Я не пробовал, но я не верю. evil-fill-and-moveсвязан с последовательностью клавиш gqв нормальном режиме зла. Перепривязка M-qне должна влиять на эту привязку клавиш. В каком-то смысле мой вопрос на самом деле состоит из двух вопросов: 1) Как заменить две функции? 2) Как использовать внешнюю программу? Причина 2) в том, что у меня уже есть внешнее решение, отличное от Elisp.
Кевин

1
В этом случае вы можете решить часть вашей проблемы , (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))где your-fill-functionваш заказ Elisp DEFUN. Это установит этот ключевой комбо только в Auctex. Возможно, вы могли бы использовать shell-command-on-regionс аргументом REPLACE для определения your-fill-function.
Вамси

Ответы:


7

Было бы лучше иметь 2 функции, хотя одну можно реализовать с точки зрения другой. Причина в том, что абзац является неявной областью, поэтому входные данные в обоих случаях должны быть разными

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

Чтобы заменить функции на другие, независимо от их привязки клавиш, используйте переназначение клавиш:

 (define-key LaTeX-mode-map [remap fill-region] 'my-format-region)
 (define-key LaTeX-mode-map [remap fill-paragraph] 'my-format-paragraph)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.