有时我希望能够做到以下几点:
"C-u xxx ...“
其中xxx是我最后一次放入kill-ring中的整数(通过杀死我缓冲区中的一个数字)。
这是我想和宏一起使用的东西,所以我不能手动输入这个整数。
那么我如何弹出kill ring并(解析并)传递弹出到"C-u“的数字呢?
请注意,我想将它与几个函数一起使用,所以我真的希望它能像C-u一样工作(但我不需要手动输入数字,我希望它是从kill ring中获取的)。
发布于 2013-11-02 01:45:37
这是一个粗略的尝试:
(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的文本,并在它不是数字的情况下执行一些合理的操作。
发布于 2013-11-02 02:24:18
使用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中,就像您直接键入它们一样,这是一个练习。
https://stackoverflow.com/questions/19731876
复制相似问题