Переопределення абзацу в режимі 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?

(Примітка. Це схоже на варіант vims formatprg.)


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

Я не пробував цього, але вірю, що ні. evil-fill-and-moveприв’язаний до ключової послідовності gqв звичайному режимі зла. Повторне перев’язування M-qне повинно впливати на це прив'язку клавіш. У деякому сенсі моє запитання справді два питання: 1) Як замінити дві функції? 2) Як користуватися зовнішньою програмою? Причиною 2) є те, що я вже маю зовнішнє нееліспське рішення.
Кевін

1
У такому випадку ви можете вирішити частину вашої проблеми за тим, (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))де your-fill-functionзнаходиться ваш власний елісп. Це встановить це ключове комбо лише в 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.