【问题标题】:How to use the content of the kill-ring as the prefix-arg for universal-argument?如何使用 kill-ring 的内容作为通用参数的前缀参数?
【发布时间】:2013-11-12 22:56:15
【问题描述】:

有时我希望能够做到以下几点:

“C-u xxx ...”

其中 xxx 是我最后一次放入 kill-ring 的整数(通过在我的缓冲区中杀死一个数字)。

这是我想与宏一起使用的东西,所以我不能手动输入那个整数。

那么我怎样才能弹出杀死环并(解析并)将弹出的数字传递给“C-u”?

请注意,我想将它与多个功能一起使用,所以我真的希望它能够像 Cu 一样工作(但我不想手动输入数字,而是希望从 kill ring 中获取它)。

【问题讨论】:

    标签: emacs arguments argument-passing


    【解决方案1】:

    这是一个粗略的尝试:

    (defun prefix-argument-from-kill-ring ()
      "Set the numeric argument for the following command to the
    number that was the previous kill."
      (interactive)
      (setq prefix-arg (list (string-to-number (current-kill 0)))))
    

    一个更有原则的实现会检查 kill 的文本,如果它不是一个数字,就做一些明智的事情。

    【讨论】:

      【解决方案2】:

      使用digit-argument作为模板,我写了这个,看起来效果不错:

      (defun yank-universal-digits (arg)
        (interactive "P")
        (let* ((digits (current-kill 0))
               (digits (if (string-match "\\`0*\\([1-9][0-9]*\\)\\'" digits)
                           (match-string 1 digits)
                         (error "Current kill is not a positive integer")))
               (num (string-to-number digits)))
          (cond ((integerp arg)
                 (setq prefix-arg (+ (* arg (expt 10 (length digits)))
                                     (* num (if (< arg 0) -1 +1)))))
                ((eq arg '-)
                 (setq prefix-arg (- num)))
                (t
                 (setq prefix-arg num)))
          (setq universal-argument-num-events (length (this-command-keys)))
          (save&set-overriding-map universal-argument-map)))
      
      (define-key universal-argument-map [?\C-y] 'yank-universal-digits)
      

      将被杀死的数字安排在 minibuffer 中,就像您直接键入它们一样作为练习。

      【讨论】:

      • 也给你+1!现在说实话,当我查看 simple.el 中的 digit-argument 代码时(我想),我感到迷茫,于是来到这里询问这应该如何完毕。你能解释一下你的解决方案与 gsg (除了整数检查)给出的解决方案有何不同吗?
      • 它与digit-argument 基本相同,除了该函数处理一个数字(存储在一个名为digit 的变量中)而我的处理可能是多位数字,我将其存储在变量num。由于num 可能大于 10,我需要将现有前缀乘以 10 的位数的幂(即 (expt 10 (length digits)) 表达式),而不是像 digit-argument 那样总是简单地 10。
      猜你喜欢
      • 2011-06-19
      • 2010-09-18
      • 1970-01-01
      • 2013-11-22
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多