From 3ad29ede3779f8a04e6dea0a1d027376dc8ebd76 Mon Sep 17 00:00:00 2001 From: Mathieu PATUREL Date: Wed, 4 Jan 2017 10:26:58 +1100 Subject: [PATCH] hide/show preview on focus working --- MLPApi.py | 17 ++++++++++- MarkdownLivePreview.py | 68 +++++++++++++++++++++++++++++++++++++++++- sample.md | 2 -- setting_names.py | 1 + 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/MLPApi.py b/MLPApi.py index d41d4f8..3937e3f 100644 --- a/MLPApi.py +++ b/MLPApi.py @@ -15,13 +15,28 @@ def get_preview_name(md_view): def create_preview(md_view): window = md_view.window() md_view_settings = md_view.settings() + md_view_settings.set(JUST_CREATED, True) preview = window.new_file() + preview.settings().set(IS_PREVIEW, True) preview.set_name(get_preview_name(md_view)) preview.set_scratch(True) - preview.settings().set(IS_PREVIEW, True) window.run_command('new_pane') # move to new group md_view_settings.set(PREVIEW_ID, preview.id()) return preview + +def hide_preview(md_view): + window = md_view.window() + if window is None: + return + mdvsettings = md_view.settings() + preview_id = mdvsettings.get(PREVIEW_ID) + mdvsettings.erase(PREVIEW_ID) + preview = get_view_from_id(window, preview_id) + if preview is None: + return print("MLPApi.py:35", '!!! preview is None', preview_id) + psettings = preview.settings() + psettings.set(IS_HIDDEN, True) + sublime.set_timeout(preview.close(), 250) diff --git a/MarkdownLivePreview.py b/MarkdownLivePreview.py index 9608424..b9eaee8 100644 --- a/MarkdownLivePreview.py +++ b/MarkdownLivePreview.py @@ -11,6 +11,10 @@ from .functions import * class MarkdownLivePreviewListener(sublime_plugin.EventListener): + def __init__(self, *args, **kwargs): + super(MarkdownLivePreviewListener, *args, **kwargs) + self.last_deactivated_view = None + def on_load(self, view): if not is_markdown_view(view): return @@ -25,7 +29,10 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): return if not md_view_settings.get(PREVIEW_ID): + print('normal, create preview') + MarkdownLivePreviewListener.md_view = md_view create_preview(md_view) + MarkdownLivePreviewListener.has_preview = True window.focus_view(md_view) def on_pre_close(self, view): @@ -46,7 +53,66 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): if vsettings.get(PREVIEW_ENABLED) is True and id is not None: preview = get_view_from_id(window, id) + if preview is None: + print('preview is None', id) preview_settings = preview.settings() preview_settings.erase(IS_PREVIEW) preview_settings.erase(MD_VIEW_ID) - sublime.set_timeout_async(lambda: preview.close(), 250) + sublime.set_timeout(lambda: preview.close(), 250) + + def on_deactivated(self, view): + self.last_deactivated_view = view + return + vsettings = view.settings() + if vsettings.get(IS_PREVIEW) is True: + return + if vsettings.get(PREVIEW_ENABLED): + id = vsettings.get(IS_PREVIEW) + if id is not None: + return + create_preview(view) + + + def on_activated(self, view): + vsettings = view.settings() + if vsettings.get(IS_PREVIEW) is True: + return + if vsettings.get(PREVIEW_ENABLED): + id = vsettings.get(PREVIEW_ID) + if vsettings.get(JUST_CREATED) is True: + vsettings.erase(JUST_CREATED) + print("MarkdownLivePreview.py:84", 'dont create, just created') + return + if id is not None: + print("MarkdownLivePreview.py:86", "dont create, already have a preview id") + return + print("MarkdownLivePreview.py:87", 'create preview') + return create_preview(view) + + if self.last_deactivated_view: + hide_preview(self.last_deactivated_view) + + + return + def just_created_preview(): + return MarkdownLivePreviewListener.just_created_preview + vsettings = view.settings() + if vsettings.get(PREVIEW_ENABLED) is True: + if vsettings.get(PREVIEW_ID) is not None: + print('return because already have a preview') + return + + # 'view' is the markdown view, which wasn't focus, so didn't have + # any preview + MarkdownLivePreviewListener.md_view = view + MarkdownLivePreviewListener.has_preview = True + print('create preview') + MarkdownLivePreviewListener.just_created_preview = True + create_preview(view) + elif vsettings.get(IS_PREVIEW) is True or just_created_preview(): + print('do nothing because focus view is the preview') + MarkdownLivePreviewListener.just_created_preview = False + elif MarkdownLivePreviewListener.has_preview: + print('hide preview', view.name().__repr__(), view.file_name()) + hide_preview(MarkdownLivePreviewListener.md_view) + MarkdownLivePreviewListener.has_preview = False diff --git a/sample.md b/sample.md index 58c1a7e..ae89070 100644 --- a/sample.md +++ b/sample.md @@ -1,5 +1,3 @@ # DuckDuckGo - The Search engine you'll fall in love with ![image](http://afterishtar.pl/images/100x100.gif) - -hello! diff --git a/setting_names.py b/setting_names.py index 1d1ad07..642ec52 100644 --- a/setting_names.py +++ b/setting_names.py @@ -5,3 +5,4 @@ PREVIEW_ID = 'markdown_live_preview_id' IS_PREVIEW = 'is_markdown_live_preview' IS_HIDDEN = 'is_hidden_markdown_live_preview' MD_VIEW_ID = 'markdown_live_preview_md_id' +JUST_CREATED = 'markdown_live_preview_just_created'