def on_hover(self, view, point, hover_zone): """Show popup indicating where other offscreen bracket is located.""" settings = sublime.load_settings('bh_core.sublime-settings') if ( GLOBAL_ENABLE and bh_popup.HOVER_SUPPORT and settings.get('show_offscreen_bracket_popup', True) and not view.settings().get('bracket_highlighter.ignore', False) ): # Find other bracket region = None index = None unmatched = False if hover_zone == sublime.HOVER_TEXT: clone_view = view.id() == view.settings().get('bracket_highlighter.clone', -1) locations_key = 'bracket_highlighter.clone_locations' if clone_view else 'bracket_highlighter.locations' locations = view.settings().get(locations_key, {}) for k, v in locations.get('unmatched', {}).items(): if v[0] <= point <= v[1]: unmatched = True break if not unmatched: for k, v in locations.get('open', {}).items(): if v[0] <= point <= v[1]: index = k break if index is None: for k, v in locations.get('close', {}).items(): if v[0] <= point <= v[1]: index = k break if index is not None: region = locations.get('open', {}).get(index) icon = locations.get('icon', {}).get(index) else: region = locations.get('close', {}).get(index) icon = locations.get('icon', {}).get(index) # Show other bracket text if unmatched: bh_popup.BhOffscreenPopup().show_unmatched_popup(view, point) elif region is not None: bh_popup.BhOffscreenPopup().show_popup(view, point, region, icon)
def run(self, edit, point=None, no_threshold=False): """Force popup.""" # Find other bracket region = None index = None unmatched = False between = None # Ensure only 1 point is set if point is not None: sels = self.view.sel() sels.clear() sels.add(sublime.Region(point)) # Search with no threshold if no_threshold: self.view.run_command("bh_key", {"lines": True}) # Get point if not specified if point is None: sels = self.view.sel() if len(sels) == 1 and sels[0].size() == 0: point = sels[0].begin() # Get relative bracket regions for point if point is not None: locations = self.view.settings().get( 'bracket_highlighter.locations', {}) for k, v in locations.get('unmatched', {}).items(): if v[0] <= point <= v[1]: unmatched = True break if not unmatched: for k, v in locations.get('open', {}).items(): if v[0] <= point <= v[1]: index = k between = None break elif v[0] <= point <= locations.get('close', {}).get(k)[1]: between = k if index is None: for k, v in locations.get('close', {}).items(): if v[0] <= point <= v[1]: index = k between = None break if index is not None: region = locations.get('open', {}).get(index) icon = locations.get('icon', {}).get(index) else: region = locations.get('close', {}).get(index) icon = locations.get('icon', {}).get(index) if between: region = locations.get('open', {}).get(between) region2 = locations.get('close', {}).get(between) icon = locations.get('icon', {}).get(between) bh_popup.BhOffscreenPopup().show_popup_between( self.view, point, region, region2, icon) elif region is not None: bh_popup.BhOffscreenPopup().show_popup(self.view, point, region, icon) elif not no_threshold: bh_popup.BhOffscreenPopup().show_unmatched_popup( self.view, point)