Mengganti paragraf isi dalam mode LaTeX

9

Saya ingin mengubah perilaku fill-paragraphdalam mode tertentu (misalnya LaTeX-modedisediakan oleh AucTeX).

Saya hanya bisa memutar kunci M-q, tetapi saya juga menggunakan evil-modeimplementasi yang evil-fill-and-movemenggunakan fill-region. Idealnya, fungsi isi kustom saya untuk menimpa kedua fungsi fill-paragraph(sehingga berfungsi dengan M-q) dan fill-region(jadi berfungsi dengan evil).

Dengan anggapan bahwa saya memiliki program mandiri formatyang menggunakan kode LaTeX via stdindan menampilkan kode yang diformat stdout, bagaimana saya akan mengganti dua fungsi pengisian di atas untuk digunakan format?

(Catatan: ini mirip dengan vim's formatprgpilihan.)

Kevin
sumber
Apakah pengikatan kembali M-qmemengaruhi evil-fill-and-move? Saya tidak menggunakan kejahatan maka saya ingin tahu. Jika wilayah tetap fill-paragraphpanggilan aktif fill-region. Jadi, Anda dapat menyarankan atau mengganti fill-regiondengan fungsi Anda.
Vamsi
Saya belum mencobanya, tapi saya percaya tidak. evil-fill-and-moveterikat pada urutan kunci gqdalam mode normal kejahatan. Rebinding M-qseharusnya tidak memengaruhi ikatan kunci ini. Dalam beberapa hal, pertanyaan saya sebenarnya adalah dua pertanyaan: 1) Bagaimana cara mengganti dua fungsi? 2) Bagaimana cara menggunakan program eksternal? Alasan untuk 2) adalah bahwa saya sudah memiliki solusi eksternal, non-Elisp.
Kevin
1
Dalam hal ini Anda dapat menyelesaikan bagian dari masalah Anda dengan di (add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))mana your-fill-functiondefun elisp kustom Anda. Ini akan menetapkan kombo kunci itu hanya di Auctex. Anda mungkin bisa menggunakan shell-command-on-regionargumen REPLACE untuk didefinisikan your-fill-function.
Vamsi

Jawaban:

7

Akan lebih baik memiliki 2 fungsi, meskipun yang satu dapat diimplementasikan dalam hal yang lain. Alasannya adalah bahwa paragraf adalah wilayah implisit , sehingga input dalam kedua kasus harus berbeda

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

Untuk mengganti fungsi dengan yang lain, apa pun ikatan kuncinya, gunakan remap keybindings:

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