在 Emacs Elisp 函数中如何打开一个新缓冲区 window,向其中打印一个字符串,然后使用键盘按下 'q' 关闭它?

In an Emacs Elisp function how to open a new buffer window, print a string to it, then close it with the keyboard press 'q'?

我对 elisp 比较陌生,我不知道如何表达我的问题才能在 Google

上找到答案

我想定义一个函数来:

我试过的是

(defun test ()
    (switch-to-buffer-other-window "*test*")
    (erase-buffer)
    (insert "hello from *test*")
    (kill-this-buffer))

(test)

但这并不像我想要的那样工作。

为清楚起见,这是我希望该函数执行的操作的图像分解:

初始设置

函数test被执行

焦点保留在初始缓冲区上,然后名为 *test* 的缓冲区成为焦点并在键盘上按下 q

window 配置现在没有 *test* 并且焦点 returns 到初始缓冲区

我计划使用此功能将我的个人键绑定打印到 *test* 缓冲区中,这样我就不必打开我的 .emacs 来查看它们

您可能正在寻找宏 with-help-window:

(defun test ()
  (interactive)
  (with-help-window "*test*"
    (princ "hello from test")))

如果您希望能够使用 insert 而不是 princ,那么您可以使用这个:

(defun test ()
  (interactive)
  (with-help-window "*test*"
    (with-current-buffer "*test*"
      (princ "hello from test"))))

(如果您使用的是没有 with-help-window 的旧 Emacs,那么您可以使用 with-output-to-temp-buffer。)

interactive只是为了方便测试。)

你说:

I plan on using this function to print my personal keybindings

试试 C-h b 怎么样?

C-h b runs the command describe-bindings

如您所见,如果您输入 C-h k C-h b