Интерактивная команда для вставки строки, возвращаемой функцией - PullRequest
4 голосов
/ 26 сентября 2011

При оценке символических выражений elisp с помощью (eval-last-sexp), привязанного к C-x C-e, я могу просто набрать C-u перед этой командой, чтобы вставить результат выражения в текущий буфер.

Есть ли какой-то эквивалент при вызове функций в интерактивном режиме? Например, если я хочу вставить строку, возвращаемую (emacs-version) в текущий буфер, как мне это сделать? M-x emacs-version показывает только строку в минибуфере и вводит C-u до того, как M-x emacs-version также не будет работать.

Если такого эквивалента не существует, каков будет самый простой способ вставить строку, возвращаемую функцией, без предварительного ввода функции перед ее оценкой?

UPDATE:

C-u M-x emacs-version действительно действительно работает. Виноват. Но это не работает для emacs-uptime. Почему это не работает для этого?

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011
(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 голосов
/ 26 сентября 2011

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.

0 голосов
/ 07 октября 2011

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

"Оцените выражение Emacs-Lisp sexp EXPRESSION и распечатайте его значение. С префиксом arg вставьте значение в текущий буфер в точке. С отрицательным префиксом arg, если значение является строкой, вставьте ее в буфер без двойных кавычек (`" '). "

См. pp + .el .

...