计算数字参数前的通用参数数

时间:2019-03-09 07:24:55

标签: emacs key-bindings calling-convention

如何找到在universal-arguments之前用于调用命令的numeric-argument的数量。

例如,如何在以下(错误的)函数中区分arg1arg2

(defun my-func (&optional arg1 arg2)
  (interactive "P\nP")
  (message "arg1: %S, arg2: %S, value: %S"
           arg1 arg2 (prefix-numeric-value current-prefix-arg)))

用例,根据先前的universal-arguments的数目,例如,透明地将数字前缀值传递给建议的命令。 dired将以下2文件中的以下2文件重命名为 C-u 2 或使用 C-u C-u 2 重命名其他Dired缓冲区。

遵循以下建议的做法,但实际上将dired-do-rename正确地传递给1而不是4(define-advice dired-do-rename (:around (fun &rest args) "defer-dwim") (let ((dired-dwim-target (equal '(4) current-prefix-arg))) (apply fun (list (max 1 (prefix-numeric-value current-prefix-arg))))))

prefix-command-preserve-state-hook

我看到有一个 <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>java.enablingKeyWordSearch.TestServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> ,但这似乎需要付出更多的努力才能实现。

1 个答案:

答案 0 :(得分:0)

对不起,但是您的问题对我来说还不清楚-因此可能无法回答。

您说:“如何在数字参数之前找到用于调用命令的通用参数的数量。”我会回答的。

"P"字符串规范中写入interactive的次数无关紧要。每次的值都是相同的,并且多次出现这种情况并不对应于C-u的多次使用。

因此(interactive "P\nP\nP")只会产生三个具有相同值的参数-值的使用是一次使用前缀参数键序列,而无论该序列是C-uC-9M--3C-u 360C-u C-u C-u

如果您想让函数区分C-uC-u C-uC-u C-u C-u,则需要测试原始前缀参数("P"为{ {1}}。

  • interactive对应于原始前缀arg C-u,即仅包含数字4的列表。
  • (4)对应于原始前缀arg C-u C-u
  • (16)对应于原始前缀arg C-u C-u C-u

(64)返回4; (prefix-numeric-value '(4))返回16;并且(prefix-numeric-value '(16))返回64。

请参见Elisp手册的节点Prefix Command Arguments

您可以使用以下命令进行练习,以查看在键入不同的prefix-arg键序列时产生的原始和数字前缀参数是什么:

(prefix-numeric-value '(64))

您的其余问题对我来说完全不清楚。我不明白您要如何处理“ (defun foo (arg narg) (interactive "P\np") (message "ARG: %S, NARG: %S" arg narg)) 。如果我是对的,请考虑发布两个独立的问题:一个询问如何区分dired-do-renameC-u,以及另一个询问关于C-u C-u的问题(什么?)。