刷新命令xemacs的/ elisp的必要?(flush commands xemacs/elisp

2019-10-18 04:24发布

进出口新的一般的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

Answer 1:

首先,我没有太多用于XEmacs的,而是Emacs的...可能会有差异。 但我可以使用Emacs重现你的问题,所以我希望Emacs的解决方案还将为XEmacs的工作。

emacs的不重新显示命令执行,这意味着按F5运行命令时的UI myClear ,然后重画显示在等待另一个输入端,然后myMake当你打F6被执行。 在另一方面,当你按下F7,整个周期myClear - myMake执行,没有任何重新显示,使得erase-buffer效果不可见。 您EED强制redisplayerase-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喜欢你的例子一样),并处理输出以检测错误/警告消息。



文章来源: flush commands xemacs/elisp necessary?
标签: elisp xemacs