|
16 | 16 | import sublime
|
17 | 17 | from sublime_plugin import EventListener, TextCommand, ViewEventListener
|
18 | 18 |
|
19 |
| -from .lib.kernel import KernelConnection |
| 19 | +from .lib.kernel import MAX_PHANTOMS, KernelConnection |
20 | 20 | from .lib.utils import add_path, chain_callbacks, get_cell
|
21 | 21 |
|
22 | 22 | with add_path(os.path.join(os.path.dirname(__file__), "lib/client")):
|
@@ -334,6 +334,7 @@ class HeliumStartKernel(TextCommand):
|
334 | 334 | def run(self, edit, *, logger=HELIUM_LOGGER):
|
335 | 335 | """Command definition."""
|
336 | 336 | _start_kernel(sublime.active_window(), self.view)
|
| 337 | + self.view.run_command("helium_clear_all_cells") |
337 | 338 |
|
338 | 339 |
|
339 | 340 | # TODO: Make this an enum
|
@@ -482,6 +483,7 @@ class HeliumConnectKernel(TextCommand):
|
482 | 483 | def run(self, edit, *, logger=HELIUM_LOGGER):
|
483 | 484 | """Command definition."""
|
484 | 485 | _connect_kernel(sublime.active_window(), self.view, logger=logger)
|
| 486 | + self.view.run_command("helium_clear_all_cells") |
485 | 487 |
|
486 | 488 |
|
487 | 489 | @chain_callbacks
|
@@ -574,6 +576,7 @@ def is_visible(self, *, logger=HELIUM_LOGGER):
|
574 | 576 | def run(self, edit, *, logger=HELIUM_LOGGER):
|
575 | 577 | """Command definition."""
|
576 | 578 | _restart_kernel(sublime.active_window(), self.view, logger=logger)
|
| 579 | + self.view.run_command("helium_clear_all_cells") |
577 | 580 |
|
578 | 581 |
|
579 | 582 | @chain_callbacks
|
@@ -801,6 +804,56 @@ def run(self, edit, move_cursor=False, *, logger=HELIUM_LOGGER):
|
801 | 804 | sublime.set_timeout(lambda: self.view.show(pt), 500)
|
802 | 805 |
|
803 | 806 |
|
| 807 | +class HeliumClearAllCells(TextCommand): |
| 808 | + """Clear all phantoms""" |
| 809 | + |
| 810 | + def is_enabled(self, *, logger=HELIUM_LOGGER): |
| 811 | + try: |
| 812 | + kernel = ViewManager.get_kernel_for_view(self.view.buffer_id()) |
| 813 | + |
| 814 | + # if view has an attached kernel, return its status |
| 815 | + return kernel.is_alive() |
| 816 | + except KeyError: |
| 817 | + # if view doesn't have an attached kernel, check if view was created by |
| 818 | + # kernel |
| 819 | + parent_view = self._get_parent_view() |
| 820 | + return parent_view is not None |
| 821 | + |
| 822 | + def is_visible(self, *, logger=HELIUM_LOGGER): |
| 823 | + return self.is_enabled() |
| 824 | + |
| 825 | + def run(self, edit, *, logger=HELIUM_LOGGER): |
| 826 | + # get correct kernel |
| 827 | + try: |
| 828 | + kernel = ViewManager.get_kernel_for_view(self.view.buffer_id()) |
| 829 | + except KeyError: |
| 830 | + view = self._get_parent_view() |
| 831 | + kernel = ViewManager.get_kernel_for_view(view.buffer_id()) |
| 832 | + |
| 833 | + def cb(): |
| 834 | + if kernel._show_inline_output: |
| 835 | + for k in range(MAX_PHANTOMS): |
| 836 | + self.view.erase_phantom_by_id(k) |
| 837 | + else: |
| 838 | + kernel.get_view().close() |
| 839 | + kernel.activate_view() |
| 840 | + |
| 841 | + # clear the old phantoms async |
| 842 | + sublime.set_timeout_async(cb, 0) |
| 843 | + |
| 844 | + def _get_parent_view(self) -> sublime.View: |
| 845 | + for window in sublime.windows(): |
| 846 | + for view in window.views(): |
| 847 | + try: |
| 848 | + kernel = ViewManager.get_kernel_for_view(view.buffer_id()) |
| 849 | + except KeyError: |
| 850 | + continue |
| 851 | + |
| 852 | + if kernel.get_view() == self.view: |
| 853 | + return view |
| 854 | + return None |
| 855 | + |
| 856 | + |
804 | 857 | class StatusBar(object):
|
805 | 858 | """Status Bar with animation.
|
806 | 859 |
|
|
0 commit comments