def reassign(self, view):
        v = view.settings()
        v.clear_on_change("checkbounce_grammar_monitor")
        on = v.get("enable_checkbounce_grammar")
        vid = view.id()

        if not vid in self.prev_syntax:
            self.prev_syntax[vid] = v.get("syntax")
        elif self.prev_syntax[vid] != v.get("syntax"):
            GrammarChecker.remove(view.id())
            view.erase_status('checkbounce')
            GrammarChecker.assign(view, self.finish)

        if on != self.on:
            self.on = on
            GrammarChecker.remove(view.id())
            sublime.set_timeout(lambda: view.erase_status('checkbounce-grammar'), 0)
            GrammarChecker.assign(view, self.finish)
            GrammarChecker.reload()
            self.on_modified(view)

        if not on:
            GrammarChecker.remove(view.id())
            sublime.set_timeout(lambda: view.erase_status('checkbounce-grammar'), 0)

        v.add_on_change("checkbounce_grammar_monitor", lambda: self.reassign(view))
 def on_close(self, view):
     vid = view.id()
     view.settings().clear_on_change("checkbounce_grammar_monitor")
     if vid in self.loaded:
         GrammarChecker.remove(vid)
         self.loaded.remove(vid)