2013-05-08 63 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")