restart from scratch
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
"keys": ["alt+m"],
|
"keys": ["alt+m"],
|
||||||
"command": "toggle_setting",
|
"command": "toggle_setting",
|
||||||
"args": {
|
"args": {
|
||||||
"setting": "markdown_preview_enabled"
|
"setting": "markdown_live_preview_enabled"
|
||||||
},
|
},
|
||||||
"context": [
|
"context": [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"caption": "MarkdownLivePreview: Toggle",
|
"caption": "MarkdownLivePreview: Toggle",
|
||||||
"command": "toggle_setting",
|
"command": "toggle_setting",
|
||||||
"args": {
|
"args": {
|
||||||
"setting": "markdown_preview_enabled"
|
"setting": "markdown_live_preview_enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
27
MLPApi.py
Normal file
27
MLPApi.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
import sublime
|
||||||
|
import sublime_plugin
|
||||||
|
|
||||||
|
from .functions import *
|
||||||
|
from .setting_names import *
|
||||||
|
|
||||||
|
def get_preview_name(md_view):
|
||||||
|
name = md_view.name() \
|
||||||
|
or os.path.basename(md_view.file_name()) \
|
||||||
|
or 'Untitled'
|
||||||
|
return name + '- Preview'
|
||||||
|
|
||||||
|
def create_preview(md_view):
|
||||||
|
window = md_view.window()
|
||||||
|
md_view_settings = md_view.settings()
|
||||||
|
|
||||||
|
preview = window.new_file()
|
||||||
|
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
|
||||||
52
MarkdownLivePreview.py
Normal file
52
MarkdownLivePreview.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
import sublime
|
||||||
|
import sublime_plugin
|
||||||
|
|
||||||
|
from .MLPApi import *
|
||||||
|
from .setting_names import *
|
||||||
|
from .functions import *
|
||||||
|
|
||||||
|
class MarkdownLivePreviewListener(sublime_plugin.EventListener):
|
||||||
|
|
||||||
|
def on_load(self, view):
|
||||||
|
if not is_markdown_view(view):
|
||||||
|
return
|
||||||
|
vsettings = view.settings()
|
||||||
|
|
||||||
|
def on_modified(self, md_view):
|
||||||
|
if not is_markdown_view(md_view):
|
||||||
|
return
|
||||||
|
window = md_view.window()
|
||||||
|
md_view_settings = md_view.settings()
|
||||||
|
if md_view_settings.get(PREVIEW_ENABLED) is not True:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not md_view_settings.get(PREVIEW_ID):
|
||||||
|
create_preview(md_view)
|
||||||
|
window.focus_view(md_view)
|
||||||
|
|
||||||
|
def on_pre_close(self, view):
|
||||||
|
vsettings = view.settings()
|
||||||
|
window = view.window()
|
||||||
|
if vsettings.get(IS_PREVIEW) is True:
|
||||||
|
if vsettings.get(IS_HIDDEN) is True:
|
||||||
|
return
|
||||||
|
mdvsettings = get_view_from_id(window, vsettings.get(MD_VIEW_ID))
|
||||||
|
if mdvsettings is None:
|
||||||
|
return
|
||||||
|
mdvsettings = mdvsettings.settings()
|
||||||
|
mdvsettings.erase(PREVIEW_ENABLED)
|
||||||
|
mdvsettings.erase(PREVIEW_ID)
|
||||||
|
return
|
||||||
|
|
||||||
|
id = vsettings.get(PREVIEW_ID)
|
||||||
|
|
||||||
|
if vsettings.get(PREVIEW_ENABLED) is True and id is not None:
|
||||||
|
preview = get_view_from_id(window, id)
|
||||||
|
preview_settings = preview.settings()
|
||||||
|
preview_settings.erase(IS_PREVIEW)
|
||||||
|
preview_settings.erase(MD_VIEW_ID)
|
||||||
|
sublime.set_timeout_async(lambda: preview.close(), 250)
|
||||||
@ -1,17 +1,16 @@
|
|||||||
Fast:
|
Fast:
|
||||||
|
|
||||||
☐ sync scroll @needsUpdate(because of images)
|
☐ sync scroll @needsUpdate(because of images)
|
||||||
☐ regive focus to the right markdown view
|
☐ cache image in object when used, so that it's faster @needsTest
|
||||||
☐ call settings listener on_new too - might be too heavy
|
☐ call settings listener on_new too - might be too heavy
|
||||||
☐ use alt attribute for 404 error
|
|
||||||
|
|
||||||
Medium:
|
Medium:
|
||||||
☐ auto refresh preview if loading images
|
☐ auto refresh preview if loading images
|
||||||
☐ cache image in object when used, so that it's faster @needsTest
|
☐ use alt attribute for 404 error
|
||||||
☐ use MarkdownLivePreview syntax, so we can use syntax's settings
|
☐ use MarkdownLivePreview syntax, so we can use syntax's settings
|
||||||
|
|
||||||
Long:
|
Long:
|
||||||
☐ fix #4
|
☐ fix #4 @high
|
||||||
☐ support hanchor (TOC) @big
|
☐ support hanchor (TOC) @big
|
||||||
|
|
||||||
Unknown:
|
Unknown:
|
||||||
@ -20,6 +19,7 @@ Unknown:
|
|||||||
|
|
||||||
___________________
|
___________________
|
||||||
Archive:
|
Archive:
|
||||||
|
✔ regive focus to the right markdown view @done Mon 02 Jan 2017 at 18:34 @project(Fast)
|
||||||
✔ try/except for 404 @done Mon 02 Jan 2017 at 18:03 @project(Fast)
|
✔ try/except for 404 @done Mon 02 Jan 2017 at 18:03 @project(Fast)
|
||||||
✔ fix bug when empty `src` @done Mon 02 Jan 2017 at 17:15 @project(Fast)
|
✔ fix bug when empty `src` @done Mon 02 Jan 2017 at 17:15 @project(Fast)
|
||||||
✔ preview.set_scratch(True) @done Mon 02 Jan 2017 at 16:58
|
✔ preview.set_scratch(True) @done Mon 02 Jan 2017 at 16:58
|
||||||
|
|||||||
19
devListener.py
Normal file
19
devListener.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
import sublime
|
||||||
|
import sublime_plugin
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
class MLPDevListener(sublime_plugin.EventListener):
|
||||||
|
|
||||||
|
def on_post_save(self, view):
|
||||||
|
if not (os.path.dirname(__file__) in view.file_name() and
|
||||||
|
view.file_name().endswith('.py')):
|
||||||
|
return
|
||||||
|
sublime.run_command('reload_plugin', {
|
||||||
|
'main': os.path.join(sublime.packages_path(),
|
||||||
|
'MarkdownLivePreview', 'md_in_popup.py'),
|
||||||
|
'scripts': ['image_manager', 'functions', 'MLPApi',
|
||||||
|
'setting_names'],
|
||||||
|
'quiet': True
|
||||||
|
})
|
||||||
@ -5,6 +5,9 @@ import sublime
|
|||||||
|
|
||||||
file404 = os.path.join(os.path.dirname(__file__), '404.png')
|
file404 = os.path.join(os.path.dirname(__file__), '404.png')
|
||||||
|
|
||||||
|
def is_markdown_view(view):
|
||||||
|
return 'markdown' in view.scope_name(0)
|
||||||
|
|
||||||
def to_base64(path=None, content=None):
|
def to_base64(path=None, content=None):
|
||||||
if path is None and content is None:
|
if path is None and content is None:
|
||||||
return to_base64(file404)
|
return to_base64(file404)
|
||||||
|
|||||||
@ -175,7 +175,7 @@ def show_html(md_view, preview):
|
|||||||
vector[1] += preview.line_height()
|
vector[1] += preview.line_height()
|
||||||
preview.set_viewport_position(vector, animate=False)
|
preview.set_viewport_position(vector, animate=False)
|
||||||
|
|
||||||
class MLPDevListener(sublime_plugin.EventListener):
|
class MLPDevListener:
|
||||||
|
|
||||||
def on_post_save(self, view):
|
def on_post_save(self, view):
|
||||||
if not (os.path.dirname(__file__) in view.file_name() and
|
if not (os.path.dirname(__file__) in view.file_name() and
|
||||||
@ -188,7 +188,8 @@ class MLPDevListener(sublime_plugin.EventListener):
|
|||||||
'quiet': True
|
'quiet': True
|
||||||
})
|
})
|
||||||
|
|
||||||
class MarkdownLivePReviewListener(sublime_plugin.EventListener):
|
# class MarkdownLivePReviewListener(sublime_plugin.EventListener):
|
||||||
|
class MarkdownLivePReviewListener:
|
||||||
|
|
||||||
def on_load(self, view):
|
def on_load(self, view):
|
||||||
settings = view.settings()
|
settings = view.settings()
|
||||||
@ -197,6 +198,31 @@ class MarkdownLivePReviewListener(sublime_plugin.EventListener):
|
|||||||
settings.add_on_change('markdown_preview_enabled',
|
settings.add_on_change('markdown_preview_enabled',
|
||||||
lambda: self.on_modified(view))
|
lambda: self.on_modified(view))
|
||||||
|
|
||||||
|
def on_deactivated_async(self, md_view):
|
||||||
|
md_view_settings = md_view.settings()
|
||||||
|
if md_view.window().active_view().settings()\
|
||||||
|
.get('is_markdown_preview'):
|
||||||
|
return
|
||||||
|
return
|
||||||
|
markdown_preview_enabled = md_view_settings.get(
|
||||||
|
'markdown_preview_enabled') is True
|
||||||
|
preview_id = md_view_settings.get('markdown_preview_id', None)
|
||||||
|
|
||||||
|
if not markdown_preview_enabled or not preview_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
get_view_from_id(md_view.window(), preview_id).close()
|
||||||
|
md_view_settings.erase('markdown_preview_id')
|
||||||
|
|
||||||
|
|
||||||
|
def on_activated(self, md_view):
|
||||||
|
md_view_settings = md_view.settings()
|
||||||
|
markdown_preview_enabled = md_view_settings.get(
|
||||||
|
'markdown_preview_enabled') is True
|
||||||
|
if markdown_preview_enabled:
|
||||||
|
return
|
||||||
|
create_preview(md_view.window(), md_view)
|
||||||
|
|
||||||
def on_modified(self, md_view):
|
def on_modified(self, md_view):
|
||||||
window = md_view.window()
|
window = md_view.window()
|
||||||
md_view_settings = md_view.settings()
|
md_view_settings = md_view.settings()
|
||||||
|
|||||||
@ -1,9 +1,5 @@
|
|||||||
# DuckDuckGo - The Search engine you'll fall in love with
|
# DuckDuckGo - The Search engine you'll fall in love with
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|
hello!
|
||||||
|
|
||||||
This is a test
|
|
||||||
|
|||||||
7
setting_names.py
Normal file
7
setting_names.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
PREVIEW_ENABLED = 'markdown_live_preview_enabled'
|
||||||
|
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'
|
||||||
Reference in New Issue
Block a user