2013-12-23 114 views
2

我正在尝试编写一个emacs函数,每5秒执行一次shell命令。但是,我无法暂停工作。以下是我的:sleep-for while while循环被忽略

(while '(test) 
    (insert (format "echo hello")) 
    (comint-send-input)) 
    (sleep-for 0 5000) 

我怀疑由于与Lisp功能评估相关的原因,睡眠被忽略。任何有关如何在每次命令评估后都会发生暂停的建议?

+2

也许'(comint-send-input))'从'sleep-for'偷走了最后一个paren? – mishadoff

+0

考虑使用'run-with-timer'而不是'sleep-for'。 – Tobias

+0

是的,移动paren。你也可以尝试在'comint-send-input'之前放置'sleep-for',而不是在之后(不要)。 – Drew

回答

2

正如评论中提到的那样,问题出在paren上。

此外,我刚刚尝试sit-for*scratch*,它比sleep-for执行更平滑。

(while 1 
    (insert "hello") 
    (sit-for 1)) 

但都锁定了Emacs,因为它是单线程的,所以你应该小心这种活动。

请考虑使用async包或类似的东西。

+0

+1,特别是针对异步推荐。 –