diff --git a/docs/publish.rst b/docs/publish.rst index 197aa779..96d67d58 100644 --- a/docs/publish.rst +++ b/docs/publish.rst @@ -146,6 +146,12 @@ http://localhost:8000/:: invoke serve +To serve the generated site with automatic browser reloading every time a +change is detected, first ``pip install livereload``, then use the +following command:: + + invoke livereload + If during the ``pelican-quickstart`` process you answered "yes" when asked whether you want to upload your site via SSH, you can use the following command to publish your site via rsync over SSH:: diff --git a/pelican/tools/templates/tasks.py.jinja2 b/pelican/tools/templates/tasks.py.jinja2 index f022bfc0..ef48e968 100644 --- a/pelican/tools/templates/tasks.py.jinja2 +++ b/pelican/tools/templates/tasks.py.jinja2 @@ -8,6 +8,12 @@ import datetime from invoke import task from invoke.util import cd from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer +from pelican.settings import DEFAULT_CONFIG, get_settings_from_file + +SETTINGS = {} +SETTINGS.update(DEFAULT_CONFIG) +LOCAL_SETTINGS = get_settings_from_file('pelicanconf.py') +SETTINGS.update(LOCAL_SETTINGS) CONFIG = { # Local path configuration (can be absolute or relative to tasks.py) @@ -80,6 +86,20 @@ def preview(c): """Build production version of site""" c.run('pelican -s publishconf.py') +@task +def livereload(c): + """Automatically reload browser tab upon file modification.""" + from livereload import Server + build(c) + server = Server() + deploy_path = CONFIG['deploy_path'] + content_path = SETTINGS['PATH'] + content_file_extensions = ['.md', '.rst'] + for file_extension in content_file_extensions: + content_blob = '{0}/**/*{1}'.format(content_path, file_extension) + server.watch(content_blob, lambda: build(c)) + server.serve(root=deploy_path) + {% if cloudfiles %} @task def cf_upload(c):