diff --git a/MLPApi.py b/MLPApi.py index e8790f6..d958b76 100644 --- a/MLPApi.py +++ b/MLPApi.py @@ -11,17 +11,19 @@ from .escape_amp import * from .functions import * from .setting_names import * from .image_manager import CACHE_FILE +from random import randint as rnd __folder__ = os.path.dirname(__file__) STYLE_FILE = os.path.join(os.path.dirname(__folder__), 'User', 'MarkdownLivePreview.css') +# used to store the phantom's set +views = {} def plugin_loaded(): global DEFAULT_STYLE_FILE - DEFAULT_STYLE_FILE = sublime.load_resource('Packages/MarkdownLivePreview/' - 'default.css') + DEFAULT_STYLE_FILE = sublime.load_resource('Packages/MarkdownLivePreview/default.css') def get_preview_name(md_view): file_name = md_view.file_name() @@ -35,7 +37,7 @@ def create_preview(window, file_name): preview.set_name(get_preview_name(file_name)) preview.set_scratch(True) - preview.set_syntax_file('Packages/MarkdownLivePreview/.sublime/' + preview.set_syntax_file('Packages/MarkdownLivePreview/.sublime/' + \ 'MarkdownLivePreviewSyntax.hidden-tmLanguage') return preview @@ -45,6 +47,7 @@ def get_style(): return content + "pre code .space {color: var(--light-bg)}" def show_html(md_view, preview): + global views html = [] html.append(''.format(get_style())) html.append(pre_with_br(md2.markdown(get_view_content(md_view), @@ -65,14 +68,14 @@ def show_html(md_view, preview): html = html.replace(' espace;', '.') html = replace_img_src_base64(html, basepath=os.path.dirname( md_view.file_name())) - preview.erase_phantoms('markdown_preview') - preview.add_phantom('markdown_preview', - sublime.Region(-1), - html, - sublime.LAYOUT_BLOCK, - lambda href: sublime.run_command('open_url', - {'url': href})) + phantom_set = views.setdefault(preview.id(), + sublime.PhantomSet(preview, 'markdown_live_preview')) + phantom_set.update([sublime.Phantom(sublime.Region(0), html, sublime.LAYOUT_BLOCK, + lambda href: sublime.run_command('open_url', + {'url': href}))]) + + # lambda href: sublime.run_command('open_url', {'url': href}) # get the "ratio" of the markdown view's position. # 0 < y < 1 y = md_view.text_to_layout(md_view.sel()[0].begin())[1] / md_view.layout_extent()[1] @@ -89,3 +92,6 @@ def show_html(md_view, preview): def clear_cache(): """Removes the cache file""" os.remove(CACHE_FILE) + +def release_phantoms_set(): + global views diff --git a/MarkdownLivePreview.py b/MarkdownLivePreview.py index bbd2333..391880b 100644 --- a/MarkdownLivePreview.py +++ b/MarkdownLivePreview.py @@ -72,8 +72,8 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener): if (is_markdown_view(view) and get_settings().get('markdown_live_preview_on_open') and not vsettings.get(PREVIEW_ENABLED) - and vsettings.get('syntax') != 'Packages/MarkdownLivePreview/' - '.sublime/MarkdownLivePreviewSyntax' + and vsettings.get('syntax') != 'Packages/MarkdownLivePreview/' + \ + '.sublime/MarkdownLivePreviewSyntax' + \ '.hidden-tmLanguage'): sublime.run_command('new_markdown_live_preview') @@ -110,3 +110,8 @@ class MarkdownLivePreviewClearCacheCommand(sublime_plugin.ApplicationCommand): def run(self): clear_cache() + +class MarkdownLivePreviewReleasePhantomSetCommand(sublime_plugin.ApplicationCommand): + + def run(self): + release_phantoms_set() diff --git a/MarkdownLivePreview.tasks b/MarkdownLivePreview.tasks index d41b052..188d8f5 100644 --- a/MarkdownLivePreview.tasks +++ b/MarkdownLivePreview.tasks @@ -5,6 +5,7 @@ Fast: Medium: ☐ auto refresh preview if loading images ☐ use alt attribute for 404 error + ☐ fix custom css @bug Long: ☐ support hanchor (TOC) @big diff --git a/README.md b/README.md index e725849..7a42b39 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Note: MarkdownLivePreview will actualy look in this file for settings that aren' - `show_sidebar` - `show_menus` -They talk for themself, don't they? All of them takes a boolean (`true` or `false`). Note that those settings are *window* specific, not just view specific (that's why they aren't supported). It means that they'll affect the entire window, and every view in it. +They talk for themself, don't they? All of them takes a boolean (`true` or `false`). Note that those settings are *window* specific, not just view specific (that's why they aren't supported). It means that they'll affect the entire window, and every view in it. Here is an example of syntax specific settings for MarkdownLivePreviewSyntax: diff --git a/functions.py b/functions.py index e1d1edb..8a113b4 100644 --- a/functions.py +++ b/functions.py @@ -23,8 +23,8 @@ def replace_img_src_base64(html, basepath): path, end = get_content_till(html, '"', start=index + len(tag_start)) if ''.join(path).startswith('data:image/'): continue - if ''.join(path).startswith(tuple(get_settings().get('load_from_internet ' - '_when_starts'))): + if ''.join(path).startswith(tuple(get_settings().get('load_from_internet' + \ + '_when_starts', []))): image = ImageManager.get(''.join(path)) image = image or loading diff --git a/sample.md b/sample.md index a3c6ab0..79fc3a4 100644 --- a/sample.md +++ b/sample.md @@ -1,5 +1,8 @@ -dfsdfsdf +# sample -asdf +sdfdsf -asfd +![std](https://www.grafikart.fr/uploads/users/46570/2015/01/offtime-screens-11_1_.jpg) + +sdfd +sdf