我总是使用Eshell与操作系统交互,因为它与Emacs无缝集成,支持处理(远程)TRAMP文件,并且在Windows上也很好用。在启动一个shell命令(比如一个耗时的构建任务)后,我经常会因为切换缓冲区而忘记跟踪任务的运行状态。由于Emacs的钩子机制,您可以将Emacs配置为在外部命令完成后调用elisp函数。我使用JohnWiegleys的awesomealert包来发送桌面通知:(require'alert)(defuneshell-command-alert(processstatus)"Send`alert'withseveritybasedonSTATUSwhenPROCESSfinished."(let*((cmd(process-命令进程))(buffer(进程-缓冲进程))(msg(格式"%s:%s"(mapconcat'identitycmd"")status)))(if(string-prefix-p"finished"status)(alertmsg:bufferbuffer:severity'normal)(alertmsg:bufferbuffer:severity'urgent))))(add-hook'eshell-kill-hook#'eshell-command-alert)alert规则可以以编程方式设置。在我的例子中,我只需要在相应的缓冲区不可见时收到通知:(alert-add-rule:status'(buried);onlysendalertwhenbuffernotvisible:mode'eshell-mode:style'notifications)这有效即使是流浪汉。以下屏幕截图显示了来自失败的make命令的Gnome桌面通知。
