2014-09-10 76 views
1

我想創建崇高的文本快捷方式,即執行以下操作:快捷方式,如果沒有REPL運行啓動REPL併發送至REPL

  • 如果R A REPL是開放的,發送所選文本到此REPL
  • else在新窗口中打開R REPL並將文本發送到此REPL。

我正在使用R-box。此包具有使用命令repl_send

 external_id = self.view.scope_name(0).split(" ")[0].split(".", 1)[1] 
     self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd}) 
     return 

這引發錯誤Python類RboxSendTextCommand「無法找到REPL爲`r`」當沒有REPL被打開。我已經試過然而,當沒有REPL [R窗口打開時會發生同樣的錯誤,以修改它

 try: 
      self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd}) 
     except: 
      self.view.window().run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"}) 
      self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd}) 
      return 
     else: 
      self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd}) 
      return 

。你會知道該怎麼做嗎?我不特別需要通過R-box腳本來做到這一點。

+0

首先,什麼是你的操作系統?其次,請您發佈您的R-Box設置(R-Box.sublime-settings)嗎? – longhua 2014-09-11 09:35:13

+0

你好。我在OS10.9.4上。通過R-Box設置是「App」:「SublimeREPL」,「auto_advance」:true,「auto_completions」:true。我的代碼真的很長 - 錯誤「無法找到REPL」是一個崇高的文本(即出現一個錯誤框),而不是Python中的一個。 – Matthew 2014-09-11 14:54:35

回答

1

首先,從SublimeREPL源代碼,如果沒有REPL R運行,它只是打印一條錯誤消息。它不會拋出任何錯誤。所以try...except...不會在這裏工作。

class ReplSend(sublime_plugin.TextCommand): 
    def run(self, edit, external_id, text, with_auto_postfix=True): 
     for rv in manager.find_repl(external_id): 
      ... 
     else: 
      sublime.error_message("Cannot find REPL for '{}'".format(external_id)) 

我不知道是否有更好的方法來做到這一點。但是,您可以通過其視圖名稱檢測REPL R.

if App == "SublimeREPL": 
     external_id = self.view.scope_name(0).split(" ")[0].split(".", 1)[1] 
     current_window = self.view.window() 
     found = False 
     repl_name = "*REPL* [%s]" % external_id 
     for w in sublime.windows(): 
      for v in w.views(): 
       if v.name() == repl_name: 
        found = True 
     if not found: 
      current_window.run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"}) 
     current_window.run_command("repl_send", {"external_id": external_id, "text": cmd}) 
     return 

打開REPL在新窗口:

sublime.run_command("new_window") 
    created_window = sublime.active_window() 
    created_window.run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"}) 
+0

是的,我知道它不起作用,因爲錯誤只是一個崇高的錯誤框 - 但我不知道該怎麼做。非常感謝。 – Matthew 2014-09-12 19:24:13

+0

任何機會,你會知道如何打開這個REPL窗口在新窗口,而不是一個新的標籤(雖然我可以選擇'「open_files_in_new_window」:其他所有的選項) – Matthew 2014-09-12 19:30:36

+0

你可以使用'sublime.run_command(「 new_window「)'創建一個新窗口,然後在其中打開REPL。 – longhua 2014-09-13 01:42:31