2013-05-08 34 views
2

SublimeText 2,它使用Python插件。我正在尝试增强我找到的现有插件。在Python中打印到Sublimetext状态栏?

基本上它是一个具有startstoppause功能和将打印时代使用此Sublimetext API调用状态栏的计时器插件...

sublime.status_message(TIMER)

我想怎么办在Status Bar中显示一些事实,表明Timer实际上已经启动并正在运行。事情是这样的......

sublime.status_message('Timer: on')

问题是,这只是短暂地显示了被解雇前的几秒钟我的状态栏消息。

因此,我正在寻找关于如何打印到状态栏并将其保持在长期的信息?

回答

3

您可以使用view.set_status(key, value)在状态栏中放置持久消息。但是,这是一个观点,而不是应用程序。如果您需要独立于视图的消息,则必须使用已激活和已停用的侦听器进行一些工作。或者,可以使用window.views()获取窗口中所有视图的数组,并将状态消息放置在所有视图上,以便在窗口中的所有视图上设置状态。然后,当你完成时,删除所有的状态消息。

+0

是的,我view.set_status(键,值)'昨天'发现和尝试了一堆不同的方法来得到它的工作在我现有的类或方法,没有运气,我认为然后我需要获得访问以某种方式到该视图类,以便您的帖子使现在更清晰。我几乎没有使用Python的经验,所以我不理解这一切,但是从我的其他经验中我已经能够得到它的某些工作。我认为听众是这里的解决方案,我会尝试一下,谢谢 – JasonDavis 2013-05-09 22:44:02

0

我还没有真正运行任何可以在状态栏中保留消息很长时间的插件。这可能是一个有意的设计决策,因此用户可以访问状态栏菜单,并且插件不会劫持需要显示的其他消息,例如光标位置。

查看ScopeHunter了解将消息打印到不同位置的选项。特别是通过用户设置,它可以打印到状态栏,剪贴板,面板和/或控制台日志。

1

请参考下面的代码。 这是一个在指定的时间段过期后清除状态的类,并且使用这个类,只需调用set_status()函数即可。

import time, threading 

class StatusDisplay: 
    def __init__(self): 
    self.timeout = 3 
    self.timer = None 

    def set_status(self, view, msg, overwrite): 
    self.cancel_timer() 
    self.view = view 
    if overwrite: 
     self.view.set_status("mytag", msg+'\n') 
    else: 
     self.view.set_status("mytag", msg) 
    self.start_timer() 

    def cancel_timer(self): 
    if self.timer != None: 
     self.timer.cancel() 

    def start_timer(self): 
    self.timer = threading.Timer(self.timeout, self.clear) 
    self.timer.start() 

    def clear(self): 
    print('clear message') 
    self.view.erase_status("mytag")