Compare commits

...

11 Commits

5 changed files with 50 additions and 6 deletions

View File

@ -20,6 +20,7 @@ from .markdown2html import markdown2html
MARKDOWN_VIEW_INFOS = "markdown_view_infos"
PREVIEW_VIEW_INFOS = "preview_view_infos"
SETTING_DELAY_BETWEEN_UPDATES = "delay_between_updates"
SETTING_FONT_SCALE = "font_scale"
resources = {}
@ -201,7 +202,12 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener):
# 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
# closes the markdown_view)
if time.time() - self.last_update < DELAY / 1000:
# Reload settings each time to catch changes
settings = get_settings()
delay = settings.get(SETTING_DELAY_BETWEEN_UPDATES, 100) # Provide default
font_scale = settings.get(SETTING_FONT_SCALE, 1.0) # Provide default
if time.time() - self.last_update < delay / 1000:
return
if markdown_view.buffer_id() == 0:
@ -213,15 +219,19 @@ class MarkdownLivePreviewListener(sublime_plugin.EventListener):
markdown = markdown_view.substr(total_region)
preview_view = markdown_view.window().active_view_in_group(1)
viewport_width = preview_view.viewport_extent()[0]
# 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
basepath = os.path.dirname(markdown_view.file_name())
basepath = os.path.dirname(markdown_view.file_name()) if markdown_view.file_name() else '.' # Handle unsaved files
html = markdown2html(
markdown,
basepath,
partial(self._update_preview, markdown_view),
resources,
viewport_width,
font_scale,
)
self.phantom_sets[markdown_view.id()].update(

View File

@ -1,4 +1,7 @@
{
// minimum number of milliseconds to wait before updating the preview again
"delay_between_updates": 100
"delay_between_updates": 100,
// scale factor for the font size relative to markdown settings
"font_scale": 1.0
}

7
channel.json Normal file
View File

@ -0,0 +1,7 @@
{
"$schema": "sublime://packagecontrol.io/schemas/channel",
"schema_version": "4.0.0",
"repositories": [
"https://git.0x42.cloud/christian.morpurgo/MarkdownLivePreview/raw/branch/master/repository.json"
]
}

View File

@ -25,7 +25,7 @@ markdowner = Markdown(extras=["fenced-code-blocks", "cuddled-lists"])
# does it stupidly throw them out? (we could implement something of our own)
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)
def markdown2html(markdown, basepath, re_render, resources, viewport_width):
def markdown2html(markdown, basepath, re_render, resources, viewport_width, font_scale=1.0):
""" converts the markdown to html, loads the images and puts in base64 for sublime
to understand them correctly. That means that we are responsible for loading the
images from the internet. Hence, we take in re_render, which is just a function we
@ -84,7 +84,11 @@ def markdown2html(markdown, basepath, re_render, resources, viewport_width):
# FIXME: highlight the code using Sublime's syntax
# FIXME: report that ST doesn't support <br/> but does work with <br />... WTF?
return "<style>\n{}\n</style>\n\n{}".format(resources["stylesheet"], soup).replace(
# Add font scaling CSS rule
font_scale_css = "body {{ font-size: {}em; }}\n".format(font_scale)
stylesheet = font_scale_css + resources["stylesheet"]
return "<style>\n{}\n</style>\n\n{}".format(stylesheet, soup).replace(
"<br/>", "<br />"
)
@ -218,4 +222,5 @@ def independent_markdown2html(markdown):
"stylesheet": "",
},
960,
1.0, # Add default font_scale for independent call
)

19
repository.json Normal file
View File

@ -0,0 +1,19 @@
{
"schema_version": "3.0.0",
"packages": [
{
"name": "MarkdownLivePreview-Fork",
"description": "My enhanced live-preview fork of MarkdownLivePreview",
"author": "Christian Morpurgo",
"homepage": "https://git.0x42.cloud/christian.morpurgo/MarkdownLivePreview",
"releases": [
{
"version": "4.0.0",
"url": "https://git.0x42.cloud/christian.morpurgo/MarkdownLivePreview/archive/v4.0.0.zip",
"date": "2025-04-24 00:00:00",
"sublime_text": "*"
}
]
}
]
}