如何创建一个函数来将区域填充到一定的宽度?

如何创建一个函数来将区域填充到一定的宽度?

有时我使用 来调整 emacs 中的文本C-u 70 M-x fill-region

我希望我的.emacs文件中有一个带有参数的函数,以便我可以使用快捷方式调用该函数,而不必执行C-u 70 fill-region.我有 2 个快捷方式,一个使用默认的 70,另一个要求参数。

我对 emacs 编程很陌生,但我已经使用 emacs 一段时间了。如果有解决方案,您能解释一下如何做到这一点吗?

答案1

如果您为函数添加前缀,则C-h f可以阅读它的文档。如果你这样做,fill-region除其他外,它会显示:

The `fill-column' variable controls the width.

如果你检查有关 Fill 命令的 Emacs 手册你可以阅读:

填充的最大线宽由缓冲区局部变量指定fill-column。默认值(参见 当地人) 为 70。在当前缓冲区中设置的最简单方法fill-column是使用命令C-x f( set-fill-column)。对于数字参数,它使用它作为新的填充列。正如C-u参数一样,它设置fill-column为点的当前水平位置。

这解释了如何C-u 70 M-x fill-region工作。它还表明可以通过设置填充宽度C-x f。因此,可能没有必要编写一个要求参数的函数,即您可以使用C-x fandfill-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是一个辅助函数,用于模块化其他两个函数的共同点。它未定义为交互式,因此无法通过 调用M-x。它设置fill-column为给定的参数并填充区域`。

要了解如何编写 Emacs 函数并将它们绑定到键,请参阅学习 Elisp For Emacs:第 4-2 课 - 向 Emacs 添加自定义函数

相关内容