From cc5d737c16182d4029b631f485709bf1131fae27 Mon Sep 17 00:00:00 2001 From: Christian Morpurgo Date: Fri, 25 Apr 2025 10:00:03 +0200 Subject: [PATCH] add logging for debugging --- MarkdownLivePreview.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/MarkdownLivePreview.py b/MarkdownLivePreview.py index 704aaf3..8d2616f 100644 --- a/MarkdownLivePreview.py +++ b/MarkdownLivePreview.py @@ -62,6 +62,7 @@ class MdlpInsertCommand(sublime_plugin.TextCommand): class OpenMarkdownPreviewCommand(sublime_plugin.TextCommand): def run(self, edit): + print("--- MarkdownLivePreview: OpenMarkdownPreviewCommand running ---") """ If the file is saved exists on disk, we close it, and reopen it in a new window. Otherwise, we copy the content, erase it all (to close the file without a dialog) and re-insert it into a new view into a new window """ @@ -69,6 +70,7 @@ class OpenMarkdownPreviewCommand(sublime_plugin.TextCommand): original_view = self.view original_window_id = original_view.window().id() file_name = original_view.file_name() + print("--- MarkdownLivePreview: Original view ID: {}, File: {}, Window ID: {} ---".format(original_view.id(), file_name, original_window_id)) syntax_file = original_view.settings().get("syntax") @@ -87,9 +89,11 @@ class OpenMarkdownPreviewCommand(sublime_plugin.TextCommand): # If the file isn't saved, we still need the content for the new view total_region = sublime.Region(0, original_view.size()) content = original_view.substr(total_region) + print("--- MarkdownLivePreview: Unsaved file, content length: {} ---".format(len(content))) # instead of making a new window, grab your existing one: preview_window = original_view.window() + print("--- MarkdownLivePreview: Using existing window ID: {} ---".format(preview_window.id())) preview_window.run_command( "set_layout", @@ -105,20 +109,25 @@ class OpenMarkdownPreviewCommand(sublime_plugin.TextCommand): preview_view.set_scratch(True) preview_view.settings().set(PREVIEW_VIEW_INFOS, {}) preview_view.set_name("Preview") + print("--- MarkdownLivePreview: Created preview_view ID: {} ---".format(preview_view.id())) # FIXME: hide number lines on preview preview_window.focus_group(0) if file_name: markdown_view = preview_window.open_file(file_name) + print("--- MarkdownLivePreview: Opened markdown_view ID: {} for file: {} ---".format(markdown_view.id(), file_name)) else: markdown_view = preview_window.new_file() markdown_view.run_command("mdlp_insert", {"point": 0, "string": content}) markdown_view.set_scratch(True) + print("--- MarkdownLivePreview: Created new markdown_view ID: {} for unsaved content ---".format(markdown_view.id())) markdown_view.set_syntax_file(syntax_file) markdown_view.settings().set( MARKDOWN_VIEW_INFOS, {"original_window_id": original_window_id, "preview_view_id": preview_view.id(),}, ) + infos_to_log = markdown_view.settings().get(MARKDOWN_VIEW_INFOS) + print("--- MarkdownLivePreview: Stored infos on markdown_view {}: {} ---".format(markdown_view.id(), infos_to_log)) def is_enabled(self): # FIXME: is this the best way there is to check if the current syntax is markdown? @@ -160,17 +169,23 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): def on_load_async(self, markdown_view): infos = markdown_view.settings().get(MARKDOWN_VIEW_INFOS) if not infos: + # print("--- MarkdownLivePreview: on_load_async ignored for view {} - no infos ---".format(markdown_view.id())) # Optional: very verbose return + print("--- MarkdownLivePreview: on_load_async triggered for markdown_view {} ---".format(markdown_view.id())) preview_view_id = infos.get("preview_view_id") if not preview_view_id: + print("--- MarkdownLivePreview: ERROR in on_load_async: No preview_view_id found in infos: {} ---".format(infos)) return # Should not happen if setup was correct preview_view = sublime.View(preview_view_id) if not preview_view.is_valid(): + print("--- MarkdownLivePreview: ERROR in on_load_async: Preview view {} is no longer valid ---".format(preview_view_id)) return # Preview view was closed before loading finished + print("--- MarkdownLivePreview: on_load_async found valid preview_view {} ---".format(preview_view.id())) self.phantom_sets[markdown_view.id()] = sublime.PhantomSet(preview_view) + print("--- MarkdownLivePreview: PhantomSet created for preview_view {} ---".format(preview_view.id())) self._update_preview(markdown_view) def on_close(self, markdown_view): @@ -215,14 +230,17 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): # @min_time_between_call(.5) def on_modified_async(self, markdown_view): + # print("--- MarkdownLivePreview: on_modified_async triggered for view {} ---".format(markdown_view.id())) # Optional: very verbose infos = markdown_view.settings().get(MARKDOWN_VIEW_INFOS) if not infos: return + print("--- MarkdownLivePreview: Scheduling update for markdown_view {} ---".format(markdown_view.id())) # we schedule an update, which won't run if an sublime.set_timeout(partial(self._update_preview, markdown_view), DELAY) def _update_preview(self, markdown_view): + print("--- MarkdownLivePreview: _update_preview called for markdown_view {} ---".format(markdown_view.id())) # if the buffer id is 0, that means that the markdown_view has been closed # This check is needed since a this function is used as a callback for when images # are loaded from the internet (ie. it could finish loading *after* the user @@ -234,39 +252,50 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): print("--- MarkdownLivePreview: Using font_scale: {} ---".format(font_scale)) if time.time() - self.last_update < delay / 1000: + print("--- MarkdownLivePreview: Update skipped for view {} due to time delay ---".format(markdown_view.id())) return if markdown_view.buffer_id() == 0: + print("--- MarkdownLivePreview: Update skipped for view {}: buffer_id is 0 (view closed) ---".format(markdown_view.id())) return # Check if the phantom set still exists for this view ID if markdown_view.id() not in self.phantom_sets: + print("--- MarkdownLivePreview: Update skipped for view {}: No phantom set found ---".format(markdown_view.id())) # View might have been closed between modification and update return + print("--- MarkdownLivePreview: Update proceeding for view {} ---".format(markdown_view.id())) self.last_update = time.time() total_region = sublime.Region(0, markdown_view.size()) markdown = markdown_view.substr(total_region) + print("--- MarkdownLivePreview: Read markdown content (length: {}) ---".format(len(markdown))) infos = markdown_view.settings().get(MARKDOWN_VIEW_INFOS) if not infos: + print("--- MarkdownLivePreview: ERROR in _update_preview: No infos found for view {} ---".format(markdown_view.id())) return # Should not happen preview_view_id = infos.get("preview_view_id") if not preview_view_id: + print("--- MarkdownLivePreview: ERROR in _update_preview: No preview_view_id found in infos: {} ---".format(infos)) return # Should not happen preview_view = sublime.View(preview_view_id) if not preview_view.is_valid(): + print("--- MarkdownLivePreview: ERROR in _update_preview: Preview view {} is no longer valid ---".format(preview_view_id)) return # Preview view was closed + print("--- MarkdownLivePreview: Found valid preview_view {} for update ---".format(preview_view.id())) # Get viewport_width, default to a large value if view isn't ready viewport_extent = preview_view.viewport_extent() viewport_width = viewport_extent[0] if viewport_extent else 1024 + print("--- MarkdownLivePreview: Viewport width: {} ---".format(viewport_width)) basepath = os.path.dirname(markdown_view.file_name()) if markdown_view.file_name() else '.' # Handle unsaved files + print("--- MarkdownLivePreview: Calling markdown2html with basepath: {} ---".format(basepath)) html = markdown2html( markdown, basepath, @@ -276,6 +305,10 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): font_scale, ) + # Truncate HTML safely for logging + html_preview = html[:100].replace('\n', ' ') # Avoid breaking log lines + print("--- MarkdownLivePreview: Generated HTML (starts with): {}... ---".format(html_preview)) + self.phantom_sets[markdown_view.id()].update( [ sublime.Phantom( @@ -286,6 +319,7 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): ) ] ) + print("--- MarkdownLivePreview: Updated phantoms in preview_view {} ---".format(preview_view.id())) def get_settings():