进出口新的一般的XEmacs和linux,所以认为我是个新手。 我想知道是否有一个原因,elisp的不执行命令或立即命令。
我在我的init.el下面的代码:
(defun myClear ()
"Clears console output buffer (F5)"
(erase-buffer "*Shell Command Output*"))
(defun myMake ()
"Executes make (F6)"
(shell-command "make"))
(defun myClearMake ()
"Clears console output buffer before executing make (F7)"
(erase-buffer "*Shell Command Output*")
(shell-command "make"))
他们必然要键F5-F7。 击中F7不会产生相同的结果,按F5,再F6,其正常工作。
会发生什么事,而不是在于(擦除缓冲...)语句似乎被跳过,或(壳命令)前右也许执行。 由于壳命令擦除倾销外壳输出前的缓冲无论如何,它很难说。
我期待什么:控制台输出被清除。 这应该是可见的,而化妆仍在运行并没有产生的任何输出,但(这在我的情况下,是几秒钟)。
我不知道如何进一步测试,即使它看起来像一个共同的任务,我找不到什么合适的,或类似的。 也可以考虑,我不是只在获得提到的行为,但也理解我做错了什么兴趣。
上解释这种行为的elisp力学的任何链接/指针赞赏。 谢谢,Tasche
首先,我没有太多用于XEmacs的,而是Emacs的...可能会有差异。 但我可以使用Emacs重现你的问题,所以我希望Emacs的解决方案还将为XEmacs的工作。
emacs的不重新显示命令执行,这意味着按F5运行命令时的UI myClear
,然后重画显示在等待另一个输入端,然后myMake
当你打F6被执行。 在另一方面,当你按下F7,整个周期myClear
- myMake
执行,没有任何重新显示,使得erase-buffer
效果不可见。 您EED强制redisplay
后erase-buffer
看到它的效果。
下面是根据您所提供的代码的工作示例。
(defun myClear ()
"Clears console output buffer (F5)"
(interactive)
(with-current-buffer "*Shell Command Output*"
(erase-buffer)))
(defun myMake ()
"Executes make (F6)"
(interactive)
(shell-command "sleep 2; echo Hello World"))
(defun myClearMake ()
"Clears console output buffer before executing make (F7)"
(interactive)
(myClear)
(redisplay)
(myMake))
(global-set-key (kbd "<f5>") 'myClear)
(global-set-key (kbd "<f6>") 'myMake)
(global-set-key (kbd "<f7>") 'myClearMake)
请注意,我不得不这样做细微的调整(可能是由于的Emacs / XEmacs的区别是什么?)
还要注意的是一个更好的办法做的事情一样运行make在于使用的Mx compile
RET。 特别是,这会照顾在后台删除缓存为你,运行的进程(不挂的Emacs喜欢你的例子一样),并处理输出以检测错误/警告消息。