領域を特定の幅で埋める関数を作成するには?

領域を特定の幅で埋める関数を作成するには?

時にはemacsでテキストを調整するために使用されますC-u 70 M-x fill-region

..emacsC-u 70 fill-region

私はemacsプログラミングが初めてですが、しばらくemacsを使用してきました。解決策がある場合はどうするか説明できますか?

答え1

関数の前にプレフィックスを付けると、C-h fその文書を読むことができます。これにより、fill-region何よりも次のようになります。

The `fill-column' variable controls the width.

確認してみるとFill コマンドに関する Emacs マニュアルあなたは読むことができます:

塗りつぶしの最大線幅はバッファローカル変数によって指定されますfill-column。デフォルト(参照) 現地人)は70です。現在のバッファに設定する最も簡単な方法は、fill-columnコマンドC-x fset-fill-column)を使用することです。数値パラメータの場合は、それを新しい塗りつぶし列として使用します。パラメータと同様に、点の現在の水平位置にC-u設定されます。fill-column

これがどのようにC-u 70 M-x fill-region機能するかを説明します。また、パディング幅を設定して設定できることを示しますC-x f。したがって、引数を必要とする関数を書く必要がないかもしれません。つまり、代わりにC-x fandを使用できますfill-region

それでもこれを行う新しい関数が必要な場合は、次のものを使用できます。

(defun fill-region-ask-width (fill-width)
  "Asks for a width and fills the region to it"
  (interactive "nFill region to column: ")
  (fill-region-width fill-width))

(defun fill-region-width-70 ()
  "Fills the region with width 70"
  (interactive)
  (fill-region-width 70))

(defun fill-region-width (fill-width)
  "Fills the region with the given width"
  (set-fill-column fill-width)
  (fill-region (region-beginning) (region-end)))

これらの機能は次のように説明されます。ドックストリングしかし、ここにいくつかの注意事項があります。

  • fill-region-ask-widthユーザーに要求して得られたパラメータを受け入れ、その数を整数(n)で処理してに渡しますfill-region-prompt-width
  • fill-region-width-70にハードコードされた番号が渡されましたfill-region-prompt-width
  • fill-region-width他の2つの関数の共通点をモジュール化するために使用されるヘルパー関数。インタラクティブに定義されていないため、呼び出すことはできませんM-xfill-column指定されたパラメータを設定して領域を埋めます。

Emacs関数を作成し、それをキーにバインドする方法については、以下を参照してください。Emacs用のElispを学ぶ:4-2課 - Emacsにカスタム関数を追加する

関連情報