用于插入函数返回的字符串的交互式命令

时间:2011-09-26 12:04:49

标签: emacs elisp

在评估带有(eval-last-sexp)的elisp符号表达式时,绑定到C-x C-e,我可以在该命令之前键入C-u,将表达式的结果插入当前缓冲区。

交互式调用函数时是否有相同的功能?例如,如果我想将(emacs-version)返回的字符串插入当前缓冲区,我该怎么做? M-x emacs-version只显示迷你缓冲区中的字符串,并在M-x emacs-version之前输入C-u也不起作用。

如果没有这样的等价物,那么插入函数返回的字符串最简单的方法是什么,而不必在评估函数之前先键入函数?

更新:

C-u M-x emacs-version 确实实际上有效。我的错。但它不适用于emacs-uptime。怎么会对那个不起作用?

3 个答案:

答案 0 :(得分:3)

(defun my-insert-command-value (command)
  "Insert the return value of the command."
  (interactive "*C(insert) M-x ")
  (print (call-interactively command) (current-buffer)))

答案 1 :(得分:2)

emacs-uptime已实施,仅将结果输出到迷你缓冲区

(defun emacs-uptime (&optional format)
  (interactive)
  (let ((str
         (format-seconds (or format "%Y, %D, %H, %M, %z%S")
                         (float-time
                          (time-subtract (current-time) before-init-time)))))
    (if (called-interactively-p 'interactive)
        (message "%s" str)
      str)))

emacs-version具有以下代码,如果使用C-u

进行调用,则会打印输出
(if here
        (insert version-string)
      (if (called-interactively-p 'interactive)
          (message "%s" version-string)
        version-string))

如果要打印特定命令的结果(例如emacs-uptime),可以将其包装到insert结果到当前缓冲区(类似于emacs-version)。

但是,我不知道通用解决方案 - 如何输出任何Emacs命令的结果。

答案 2 :(得分:0)

C-u M-x pp-eval-expression RET (emacs-uptime) RET

“评估Emacs-Lisp sexp EXPRESSION,并打印其值。 使用前缀arg,将值插入到当前缓冲区中。  使用负前缀arg,如果值是字符串,则插入它  进入缓冲区而没有双引号(“”)。“

请参阅pp+.el