Emacs:尝试 运行 交互式函数时参数数量错误

Emacs: Wrong number of arguments when trying to run an interactive function

我正在尝试创建一个将所选区域缩进 4 个空格的命令。

合适的命令是:C-u 4 C-x <TAB>,当C-u是"universal-argument"命令的快捷方式,C-x <TAB>indent-rigidly的快捷方式,所以我写了这个功能:

(defun my-tab ()
  (interactive)
  (universal-argument 4)
  (indent-rigidly))

但是当我尝试 运行 函数时(使用 M-x my-tab)我得到这个错误:

Wrong number of arguments: (0 . 0), 1

有什么问题?

谢谢!

如果您查看 indent-rigidly (C-h f indent-rigidly) 的文档,您会注意到它需要 3-4 个参数:

(indent-rigidly START END ARG &optional INTERACTIVE)

因此,您还应该为其提供开始和结束位置。您还应该正常提供 ARG,而不是使用 universal-argument.

(defun my-tab (start end)
  (interactive (if (use-region-p)
                   (list (region-beginning) (region-end))
                 ;; Operate on the current line if region is not to be used.
                 (list (line-beginning-position) (line-end-position))))
  (indent-rigidly start end 4))