|
1 | 1 | from .code_actions import actions_manager
|
2 | 2 | from .code_actions import CodeActionOrCommand
|
3 | 3 | from .code_actions import CodeActionsByConfigName
|
| 4 | +from .core.constants import HOVER_ENABLED_KEY |
| 5 | +from .core.constants import HOVER_HIGHLIGHT_KEY |
| 6 | +from .core.constants import HOVER_PROVIDER_COUNT_KEY |
| 7 | +from .core.constants import SHOW_DEFINITIONS_KEY |
4 | 8 | from .core.open import lsp_range_from_uri_fragment
|
5 | 9 | from .core.open import open_file_uri
|
6 | 10 | from .core.open import open_in_browser
|
|
18 | 22 | from .core.sessions import SessionBufferProtocol
|
19 | 23 | from .core.settings import userprefs
|
20 | 24 | from .core.typing import List, Optional, Dict, Tuple, Sequence, Union
|
| 25 | +from .core.typing import cast |
21 | 26 | from .core.url import parse_uri
|
22 | 27 | from .core.views import diagnostic_severity
|
23 | 28 | from .core.views import first_selection_region
|
|
35 | 40 | from .core.views import text_document_position_params
|
36 | 41 | from .core.views import unpack_href_location
|
37 | 42 | from .core.views import update_lsp_popup
|
38 |
| -from .session_view import HOVER_HIGHLIGHT_KEY |
39 | 43 | from functools import partial
|
40 | 44 | from urllib.parse import urlparse
|
41 | 45 | import html
|
42 | 46 | import mdpopups
|
43 | 47 | import sublime
|
| 48 | +import sublime_plugin |
44 | 49 |
|
45 | 50 |
|
46 | 51 | SUBLIME_WORD_MASK = 515
|
@@ -385,3 +390,34 @@ def try_open_custom_uri_async(self, href: str) -> None:
|
385 | 390 | for session in self.sessions():
|
386 | 391 | if session.try_open_uri_async(href, r) is not None:
|
387 | 392 | return
|
| 393 | + |
| 394 | + |
| 395 | +class LspToggleHoverPopupsCommand(sublime_plugin.WindowCommand): |
| 396 | + |
| 397 | + def is_enabled(self) -> bool: |
| 398 | + view = self.window.active_view() |
| 399 | + if view: |
| 400 | + return self._has_hover_provider(view) |
| 401 | + return False |
| 402 | + |
| 403 | + def is_checked(self) -> bool: |
| 404 | + return bool(self.window.settings().get(HOVER_ENABLED_KEY, True)) |
| 405 | + |
| 406 | + def run(self) -> None: |
| 407 | + enable = not self.is_checked() |
| 408 | + self.window.settings().set(HOVER_ENABLED_KEY, enable) |
| 409 | + sublime.set_timeout_async(partial(self._update_views_async, enable)) |
| 410 | + |
| 411 | + def _has_hover_provider(self, view: sublime.View) -> bool: |
| 412 | + return cast(int, view.settings().get(HOVER_PROVIDER_COUNT_KEY, 0)) > 0 |
| 413 | + |
| 414 | + def _update_views_async(self, enable: bool) -> None: |
| 415 | + window_manager = windows.lookup(self.window) |
| 416 | + if not window_manager: |
| 417 | + return |
| 418 | + for session in window_manager.get_sessions(): |
| 419 | + for session_view in session.session_views_async(): |
| 420 | + if enable: |
| 421 | + session_view.view.settings().set(SHOW_DEFINITIONS_KEY, False) |
| 422 | + else: |
| 423 | + session_view.reset_show_definitions() |
0 commit comments