在 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
上找到答案
我想定义一个函数来:
- 打开一个新缓冲区
- 将字符串打印到该缓冲区
- 当用户聚焦它并按下 'q'
时关闭缓冲区和 window
我试过的是
(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
我对 elisp 比较陌生,我不知道如何表达我的问题才能在 Google
上找到答案我想定义一个函数来:
- 打开一个新缓冲区
- 将字符串打印到该缓冲区
- 当用户聚焦它并按下 'q' 时关闭缓冲区和 window
我试过的是
(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 commanddescribe-bindings
如您所见,如果您输入 C-h k C-h b