网网腾科技feat: initial commit
d5a81bebAdd on 2 days agoHistory
"""Sublime Markdown Preview Plugin Entry Point."""

import sublime
import sublime_plugin

from .commands.open_preview import SmpOpenPreviewCommand
from .commands.close_preview import SmpClosePreviewCommand
from .commands.refresh_preview import (
    SmpRefreshPreviewCommand,
    SmpCopyAllCommand,
    SmpCopyTextCommand,
    SmpCopyCodeCommand,
    SmpCopyTableCommand,
)
from .commands.toggle_preview import SmpTogglePreviewCommand
from .commands.export_html import SmpExportHtmlCommand
from .commands.open_toc import SmpOpenTocCommand
from .preview.manager import PreviewManager

__all__ = [
    "SmpOpenPreviewCommand",
    "SmpClosePreviewCommand",
    "SmpRefreshPreviewCommand",
    "SmpCopyAllCommand",
    "SmpCopyTextCommand",
    "SmpCopyCodeCommand",
    "SmpCopyTableCommand",
    "SmpTogglePreviewCommand",
    "SmpExportHtmlCommand",
    "SmpOpenTocCommand",
    "SmpEventListener",
]


class SmpEventListener(sublime_plugin.EventListener):
    """Listens for editor modifications and lifecycle events to trigger preview updates."""

    def on_modified_async(self, view: sublime.View):
        manager = PreviewManager.get_instance()
        if manager.has_session(view.id()):
            manager.schedule_render(view)

    def on_post_save_async(self, view: sublime.View):
        manager = PreviewManager.get_instance()
        if manager.has_session(view.id()):
            manager.render_view(view, force=True)

    def on_activated_async(self, view: sublime.View):
        manager = PreviewManager.get_instance()
        manager.on_view_activated(view)

    def on_selection_modified_async(self, view: sublime.View):
        manager = PreviewManager.get_instance()
        if manager.has_session(view.id()):
            manager.sync_scroll(view)

    def on_close(self, view: sublime.View):
        manager = PreviewManager.get_instance()
        manager.on_view_closed(view)