LaTeXモードでのfill-paragraphのオーバーライド


9

fill-paragraph特定のモード(LaTeX-modeによって提供されるなどAucTeX)の動作を変更したいと思います。

キーを再バインドすることもできますがM-q、usesのevil-mode実装もevil-fill-and-move使用していfill-regionます。理想的には、カスタム塗りつぶし関数をfill-paragraph使用して(ので機能するM-q)とfill-region(ので機能する)の両方の関数をオーバーライドしますevil

format介してLaTeXコードを取り込み、stdinフォーマットされたコードを出力するスタンドアロンプ​​ログラムがあるとするとstdout、上記の2つのfill関数をオーバーライドして使用するにはどうすればよいformatでしょうか。

(注:これはvimformatprgオプションに似ています。)


とにかくリバインドはM-q影響evil-fill-and-moveしますか?悪を使わないので好奇心旺盛です。とにかく、リージョンがアクティブな場合はfill-paragraph呼び出しfill-regionます。ですから、アドバイスしたりfill-region、自分の機能に置き換えたりすることができます。
Vamsi 2014

私は試したことはありませんが、信じていません。悪の通常モードでevil-fill-and-moveキーシーケンスgqにバインドされています。再バインドM-qはこのキーバインドに影響を与えるべきではありません。ある意味で、私の質問は本当に2つの質問です:1)2つの関数を置き換える方法は?2)外部プログラムの使用方法は?2)の理由は、外部の非Elispソリューションをすでに持っているためです。
ケビン

1
その場合、あなたはして、問題の一部を解決することができる(add-hook 'LaTeX-mode-hook (lambda () local-set-key (kbd "M-q") 'your-fill-function))場所をyour-fill-functionカスタムのelispの関数定義があります。これにより、Auctexでのみそのキーコンボが設定されます。おそらくshell-command-on-region、REPLACE引数を使用して定義することができますyour-fill-function
Vamsi 2014

回答:


7

1つは他の観点から実装することができますが、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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.