【问题标题】:Interactive command for inserting the string returned by a function用于插入函数返回的字符串的交互式命令
【发布时间】:2011-10-07 13:07:04
【问题描述】:

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

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

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

更新:

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

【问题讨论】:

  • C-u M-x emacs-version 在 Emacs 24 中可以工作,C-u M-: 也是如此。此功能也存在于 Emacs 23(这是当前发布的版本)中。你用的是什么版本?
  • 哦,那是真的C-u M-x emacs-version 也适合我。我没有尝试过那个,只有emacs-uptime,我的错误。但是,如果 C-u M-x emacs-uptimeemacs-version 一起使用,为什么它不工作?

标签: emacs elisp


【解决方案1】:
(defun my-insert-command-value (command)
  "Insert the return value of the command."
  (interactive "*C(insert) M-x ")
  (print (call-interactively command) (current-buffer)))

【讨论】:

    【解决方案2】:

    emacs-uptime 被实现为仅将结果输出到 minibuffer

    (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 命令的结果。

    【讨论】:

      【解决方案3】:

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

      "评估 Emacs-Lisp 的 sexp EXPRESSION,并漂亮地打印它的值。 使用前缀 arg,将值插入到当前缓冲区的点。 带负前缀 arg,如果值是字符串,则插入它 进入没有双引号 (`"') 的缓冲区。"

      pp+.el

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多