如题,我尝试写了一段代码
(shell)
(rename-buffer "name1")
(shell)
(rename-buffer "name2")
(shell)
(rename-buffer "name3")
然而当我用eval-buffer
运行这段代码的时候,程序停在第4行,并且返回
Buffer name ‘name1’ is in use
有没有懂elisp的给解释一下怎么解决?
如题,我尝试写了一段代码
(shell)
(rename-buffer "name1")
(shell)
(rename-buffer "name2")
(shell)
(rename-buffer "name3")
然而当我用eval-buffer
运行这段代码的时候,程序停在第4行,并且返回
Buffer name ‘name1’ is in use
有没有懂elisp的给解释一下怎么解决?
你的代码假设 shell
会把生成的 Buffer 设置成 Current Buffer,这个假设虽然很「重」(想象用户通过某种方式令 shell
在后台开启,而不需要显示它),但默认是对的,用 M-x eval-region
能正确执行,但是 M-x eval-buffer
会出现你提到的问题,可能是 eval-buffer
的 Bug,下面是一个重现的代码,eval-buffer
会执行第一段代码两次:
;; 第一段
(pop-to-buffer (get-buffer-create "*foo*"))
(message "==> hello")
(rename-buffer "111")
;; 第二段
(pop-to-buffer (get-buffer-create "*foo*"))
(message "==> world")
(rename-buffer "222")
更简单而靠谱的办法利用 shell
的参数 BUFFER
或者返回值。
嗯,用参数会比较简单,谢谢你。