An interactive, terminal-based markdown presenter

Overview

Master Build Status Coverage Status PyPI Statistics Latest Release Documentation Status

Twitter Follow

lookatme

lookatme is an interactive, extensible, terminal-based markdown presentation tool.

TOC

Features

  • Markdown rendering
  • Live (input file modification time watching) and manual reloading
  • Live terminals embedded directly in slides
  • Syntax highlighting using Pygments
  • Loading external files into code blocks
  • Support for contrib extensions
  • Smart slide splitting

Tour

General tour

lookatme_tour

Embedded terminal example

terminal example

Sourcing external files example

file loader example

Navigating the Presentation

Action Keys Notes
Next Slide l j right space
Prev Slide h k left delete backspace
Quit q Q
Terminal Focus Click on the terminal
Exit Terminal ctrl+a and then a slide action
Vertically scroll within slide up/down or page up/page down

CLI Options

Usage: lookatme [OPTIONS] [INPUT_FILES]...

  lookatme - An interactive, terminal-based markdown presentation tool.

  See https://lookatme.readthedocs.io/en/v{{VERSION}} for documentation

Options:
  --debug
  -l, --log PATH
  -t, --theme [dark|light]
  -s, --style [default|emacs|friendly|colorful|autumn|murphy|manni|monokai|perldoc|pastie|borland|trac|native|fruity|bw|vim|vs|tango|rrt|xcode|igor|paraiso-light|paraiso-dark|lovelace|algol|algol_nu|arduino|rainbow_dash|abap|solarized-dark|solarized-light|sas|stata|stata-light|stata-dark|inkpot]
  --dump-styles                   Dump the resolved styles that will be used
                                  with the presentation to stdout

  --live, --live-reload           Watch the input filename for modifications
                                  and automatically reload

  -s, --safe                      Do not load any new extensions specified in
                                  the source markdown. Extensions specified
                                  via env var or -e are still loaded

  --no-ext-warn                   Load new extensions specified in the source
                                  markdown without warning

  -i, --ignore-ext-failure        Ignore load failures of extensions
  -e, --exts TEXT                 A comma-separated list of extension names to
                                  automatically load (LOOKATME_EXTS)

  --single, --one                 Render the source as a single slide
  --version                       Show the version and exit.
  --help                          Show this message and exit.

Known Extensions

Below is a list of known extensions for lookatme:

Extension Name Install Name Notes
qrcode lookatme.contrib.qrcode Renders QR codes from code blocks
image_ueberzug lookatme.contrib.image_ueberzug Renders images with ueberzug (Linux only)
render lookatme.contrib.render Renders supported code blocks (graphviz and mermaid-js) by calling an external program. requires an image-rendering extension

Documentation

See the documentation for details.

Comments
  • Build for the M1

    Build for the M1

    Describe the bug LookAtMe does not run on M1 Macs

    To Reproduce

    Install lookatme with pip

    python3 -m pip install lookatme
    

    Check the installed version

    lookatme --version
    

    Expected behavior โ€ฆto see the version

    Screenshots

    Traceback (most recent call last):
      File "/opt/homebrew/bin/lookatme", line 33, in <module>
        sys.exit(load_entry_point('lookatme===-VERSION-', 'console_scripts', 'lookatme')())
      File "/opt/homebrew/bin/lookatme", line 25, in importlib_load_entry_point
        return next(matches).load()
      File "/opt/homebrew/Cellar/[email protected]/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/metadata.py", line 77, in load
        module = import_module(match.group('module'))
      File "/opt/homebrew/Cellar/[email protected]/3.9.4/Frameworks/Python.framework/Versions/3.9/lib/python3.9/importlib/__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
      File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
      File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 790, in exec_module
      File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
      File "/opt/homebrew/lib/python3.9/site-packages/lookatme/__main__.py", line 17, in <module>
        import lookatme.tui
      File "/opt/homebrew/lib/python3.9/site-packages/lookatme/tui.py", line 16, in <module>
        from lookatme.contrib import shutdown_contribs, contrib_first
      File "/opt/homebrew/lib/python3.9/site-packages/lookatme/contrib/__init__.py", line 15, in <module>
        from . import file_loader
      File "/opt/homebrew/lib/python3.9/site-packages/lookatme/contrib/file_loader.py", line 42, in <module>
        class FileSchema(Schema):
      File "/opt/homebrew/lib/python3.9/site-packages/lookatme/contrib/file_loader.py", line 49, in FileSchema
        default=LineRange().dump(LineRange()),
      File "/opt/homebrew/lib/python3.9/site-packages/marshmallow/schema.py", line 547, in dump
        result = self._serialize(processed_obj, many=many)
      File "/opt/homebrew/lib/python3.9/site-packages/marshmallow/schema.py", line 515, in _serialize
        value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
      File "/opt/homebrew/lib/python3.9/site-packages/marshmallow/fields.py", line 318, in serialize
        return self._serialize(value, attr, obj, **kwargs)
      File "/opt/homebrew/lib/python3.9/site-packages/marshmallow/fields.py", line 898, in _serialize
        ret = self._format_num(value)  # type: _T
      File "/opt/homebrew/lib/python3.9/site-packages/marshmallow/fields.py", line 873, in _format_num
        return self.num_type(value)
    TypeError: int() argument must be a string, a bytes-like object or a number, not 'Integer'
    

    Environment (please complete the following information):

    • OS: OS X โ€”ย Big Sur
    • Lookatme Version [e.g. lookatme --version] ๐Ÿ‘ˆ๐Ÿพ ๐Ÿ‘ˆ๐Ÿพ ๐Ÿ‘ˆ๐Ÿพ this is the issue ๐Ÿ˜…

    Additional context n/a

    bug 
    opened by igbanam 14
  • Add support for progressive slides

    Add support for progressive slides

    This PR adds a way to separate a slide into multiple parts and show them progressively. Parts are separated by creating a ::: line.

    Here is an example. This presentation:

    # This is a normal slide
    
    With some content.
    
    ---
    
    # This is a multi-part slide
    
    - This is the first part.
    
    :::
    
    - And this is the second part.
    
    :::
    
    - Parts are separated by a `:::` paragraph.
    

    Looks like this:

    demo

    This feature provides a way to do #80, except numbered list won't work :/

    I picked ::: as the part delimiter because it looks similar to the --- slide delimiter and I felt it was unlikely to cause conflicts with real content, but I am happy to change it to anything else if you prefer.

    opened by agateau 13
  • Setting theme to

    Setting theme to "light" doesn't appear to do anything

    Describe the bug

    Setting theme to light/dark with -t light and -t dark doesn't seem to have any effect.

    Screenshots

    lookatme slides.md with dark background terminal:

    image

    lookatme slides.md with light background terminal:

    image

    lookatme -t light slides.md with light background terminal:

    image

    It sounded from the help text like -t light should make the colors more readable on a light background, but it doesn't seem to have any effect.

    Environment (please complete the following information):

    • OS: Arch Linux
    • Lookatme Version: 2.3.2
    • Terminal: Alacritty
    bug 
    opened by Hubro 10
  • Single Slide

    Single Slide

    Hi,

    Sorry if this was something obvious but I couldn't find it in the documentation, is it possible to have a single slide only?

    I use it this when I write documentation in MD and sometimes having to scroll through all the slides is a bit annoying.

    Thanks lp

    enhancement 
    opened by lanox 9
  • Crashes over SSH (both in and out of tmux)

    Crashes over SSH (both in and out of tmux)

    lookatme.log Describe the bug Loading the second slide in the examples/tour.md document causes lookatme to crash with the following error:

    Error rendering slide 2: 'DequeCommandTransmitter' object has no attribute 'transmitter'
    See /tmp/lookatme.log for traceback
    Aborted!
    

    I get that it's probably really weird to be using this over SSH, but my work laptop's display output doesn't work with my KVM, so I tend to just SSH into it from my desktop. I've attached a log after running lookatme --debug tour.md

    To Reproduce

    1. Connect to a remote host over SSH
    2. lookatme tour.md

    Expected behavior

    Either the slideshow should run (which given the Ueberzug and Terminal extensions is probably unrealistic) , or should gracefully handle errors caused by being run over SSH.

    Environment (please complete the following information):

    • OS: Arch Linux (btw)
    • Lookatme Version: 2.3.2 installed via pip

    lookatme.log

    bug 
    opened by garwil 6
  • Embedded terminal not working

    Embedded terminal not working

    Describe the bug A clear and concise description of what the bug is.

    To Reproduce

    Steps to reproduce the behavior:

    1. Go to examples cd examples/file_loader_ext
    2. Show the slide lookatme example.md

    Expected behavior A embedded terminal as in the screencast in the README.

    Screenshots What I see is:

    gscreenshot_2021-04-18-123604

    Environment (please complete the following information):

    • OS: arch (5.11.14-arch1-1)
    • Lookatme Version: 2.3.0

    Additional context My first time trying out lookatme so not sure I missed something

    bug 
    opened by AckslD 6
  • numbered lists don't seem to work

    numbered lists don't seem to work

    Describe the bug numbered lists are rendered as bullet lists

    To Reproduce

    • create a md file with
    1. a
    2. b
    3. c
    
    • run lookatme on it

    Expected behavior should render a numbered list

    Screenshots If applicable, add screenshots to help explain your problem. Screenshot from 2020-09-19 12-55-13

    Environment (please complete the following information):

    • OS: Linux 5.8.6-1-MANJARO
    • Lookatme Version: 1.2.0
    bug 
    opened by Incanus3 6
  • What do `lam` and `witnessme` provide that `lookatme` doesn't?

    What do `lam` and `witnessme` provide that `lookatme` doesn't?

    This isn't really a bug or a feature request. But, I noticed that building this package on NixOS as provided by nixpkgs introduces 3 binaries which seem referenced in your setup.py but which appear redundant, there. However, it appears that these nixpkgs build outputs have different SHAs, so they're different somehow.

    $ md5sum result/bin/*                                                
    27e4ed6a63db72685e78134d658c8030  result/bin/lam
    00061159564841356ae9f5a91fc2405a  result/bin/lookatme
    a5b7324681c66ed3a427fa48dc9b2f36  result/bin/witnessme
    

    Could you please shed some light on how they're different or why there are other outputs beyond only ./result/bin/lookatme?

    bug 
    opened by johnrichardrinehart 5
  • Unit test failures in 2.3.2

    Unit test failures in 2.3.2

    Describe the bug I'm trying to update the Debian package of lookatme to 2.3.2, but the build fails because of failing unit tests (with 2.3.0 it still succeeds):

    I: pybuild base:232: cd /home/reiner/Source/debian/lookatme/lookatme/.pybuild/cpython3_3.9_lookatme/build; python3.9 -m pytest tests
    ============================= test session starts ==============================
    platform linux -- Python 3.9.2, pytest-6.0.2, py-1.10.0, pluggy-0.13.0
    rootdir: /home/reiner/Source/debian/lookatme/lookatme
    plugins: cov-2.10.1, mock-1.10.4
    collected 31 items
    
    tests/test_cli.py ...                                                    [  9%]
    tests/test_contrib.py .                                                  [ 12%]
    tests/test_file_loader.py ....                                           [ 25%]
    tests/test_markdown.py ...........                                       [ 61%]
    tests/test_parse.py .....                                                [ 77%]
    tests/test_schemas.py .FF.                                               [ 90%]
    tests/test_table.py ...                                                  [100%]
    
    =================================== FAILURES ===================================
    __________________ test_sanity_check_that_errors_are_detected __________________
    
        def test_sanity_check_that_errors_are_detected():
            """Perform a sanity check that we can actually catch errors in generating
            the default schema values.
            """
            schema = MetaSchema()
        
            # force a discrepancy in the
            gend_default = MetaSchema().dump(None)
            gend_default["styles"]["padding"]["left"] = 100
        
            with pytest.raises(AssertionError) as excinfo:
    >           _validate_field_recursive("__root__.styles", schema.styles.nested(), gend_default['styles'])
    E           AttributeError: 'MetaSchema' object has no attribute 'styles'
    
    tests/test_schemas.py:64: AttributeError
    _____________________________ test_styles_defaults _____________________________
    
        def test_styles_defaults():
            """Ensure that style value defaults are generated correctly
            """
            schema = MetaSchema()
            gend_default = MetaSchema().dump(None)
    >       _validate_field_recursive("__root__.styles", schema.styles.nested(), gend_default['styles'])
    E       AttributeError: 'MetaSchema' object has no attribute 'styles'
    
    tests/test_schemas.py:73: AttributeError
    =============================== warnings summary ===============================
    /usr/lib/python3/dist-packages/marshmallow/fields.py:173: 72 warnings
      /usr/lib/python3/dist-packages/marshmallow/fields.py:173: RemovedInMarshmallow4Warning: The 'default' argument to fields is deprecated. Use 'dump_default' instead.
        warnings.warn(
    
    /usr/lib/python3/dist-packages/marshmallow/fields.py:181: 16 warnings
      /usr/lib/python3/dist-packages/marshmallow/fields.py:181: RemovedInMarshmallow4Warning: The 'missing' argument to fields is deprecated. Use 'load_default' instead.
        warnings.warn(
    
    /usr/lib/python3/dist-packages/marshmallow/fields.py:218
      /usr/lib/python3/dist-packages/marshmallow/fields.py:218: RemovedInMarshmallow4Warning: Passing field metadata as a keyword arg is deprecated. Use the explicit `metadata=...` argument instead.
        warnings.warn(
    
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
    .pybuild/cpython3_3.9_lookatme/build/tests/test_schemas.py::test_meta_defaults
      /usr/lib/python3/dist-packages/marshmallow/fields.py:438: RemovedInMarshmallow4Warning: The 'default' attribute of fields is deprecated. Use 'dump_default' instead.
        warnings.warn(
    
    -- Docs: https://docs.pytest.org/en/stable/warnings.html
    =========================== short test summary info ============================
    FAILED tests/test_schemas.py::test_sanity_check_that_errors_are_detected - At...
    FAILED tests/test_schemas.py::test_styles_defaults - AttributeError: 'MetaSch...
    ================== 2 failed, 29 passed, 98 warnings in 1.54s ===================
    E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd /home/reiner/Source/debian/lookatme/lookatme/.pybuild/cpython3_3.9_lookatme/build; python3.9 -m pytest tests
    

    Expected behavior Unit tests are passing.

    Environment (please complete the following information):

    • OS: Debian Linux (unstable)
    • Lookatme Version 2.3.2
    bug 
    opened by reinerh 5
  • Copyrighted image

    Copyrighted image

    Hi,

    I recently packaged lookatme for Debian, as I think it is a cool presentation tool. :-) I wanted to update the package now to the current release, but noticed that you have included the file examples/napoleon_dynamite.jpg, which is not freely licensed.
    Could you please replace it with some picture under a free license? This would make packaging easier, as I could re-use your released tarballs, instead of repacking them (and removing the image).

    bug 
    opened by reinerh 5
  • Resolve conflict between `-s` for `--style` and `-s` for `--safe`

    Resolve conflict between `-s` for `--style` and `-s` for `--safe`

    The -s option flag is used for both style and safe options. It seems the last use wins, so remove -s for style since it was declared first.

    Too bad Click does not complain about that.

    opened by agateau 4
  • 3.0 - screenshot/gif of lookatme slides via selenium/html output

    3.0 - screenshot/gif of lookatme slides via selenium/html output

    Describe the Feature Request ' A screenshot utility script should exist in bin/ that is part of the development tools for lookatme. It should be able to take slides and a series of keystrokes, and render a gif of the slides in action.

    E.g.

    bin/lookatme-screenshot test.md -o slides.gif --gif --keys scroll_down:3,j:1.5,j:1.5,j:1.5 --width X --height Y
    

    This should scroll to the bottom of the first slide over three seconds, and press "j" (or next slide") with a 1.5s delay in between.

    Additional notes

    One approach:

    1. Create presentation from markdown source
    2. Generate canvases after each keystroke
    3. Convert each canvas to raw html
    4. Load each html into chrome via selenium, with browser width/height set to the provided width/height
    5. Save screenshot of each html into a folder
    6. Create a gif with provided delays from the screenshots (maybe using ImageMagick's convert?)
    enhancement 
    opened by d0c-s4vage 0
  • 3.0 - Developer Documentation

    3.0 - Developer Documentation

    Describe the Feature Request

    Developer documentation should be added via the @tutor decorator, using the "Development" category (or something similar). These shouldn't be shown be default with lookatme --tutorial, but should be when explicitly searched for / pulled up.

    enhancement 
    opened by d0c-s4vage 0
  • 3.0 - Not all tokens from markdown-it-py are supported/handled

    3.0 - Not all tokens from markdown-it-py are supported/handled

    Describe the bug

    All tokens that are possibly produced form markdown-it-py should be supported.

    lookatme should have a unit test that validates that it can handle anything markdown-it-py can produce.

    bug 
    opened by d0c-s4vage 0
  • Update lookatme to use grapevine git tagging

    Update lookatme to use grapevine git tagging

    Describe the Feature Request

    I don't know if this has another name, but I like to think of it as a grapevine.

    Many aspects of lookatme are generated by the current state of the project:

    • The version number embedded in a few places
    • The current help text in the documentation
    • Changelog since the last version
    • etc.

    These shouldn't be something that actually require a separate commit to update, but should be dynamically inserted into the code, with the updated code itself being treated as an artifact (having placeholders for the version number, help text, etc. be replaced by their current values).

    It should go something like this:

        grapevine                  tag-the-current-state
    
           *                               *
           โ”‚ * v1.0.3                      โ”‚
           โ”œโ”€โ”˜                             *โ”€ v1.0.3
           *                               *
           โ”‚                               โ”‚
           โ”‚ * v1.0.2                      โ”‚
           โ”œโ”€โ”˜              vs             *โ”€ v1.0.2
           *                               *
           โ”‚                               โ”‚
           *                               *
           โ”‚ * v1.0.1                      โ”‚
           โ”œโ”€โ”˜                             *โ”€ v1.0.2
           โ”‚                               โ”‚
           *                               *
    

    Notice how the grapevine approach adds a separate commit that is not part of the main branch that contains the version of the code that has placeholders replaced with their current values.

    enhancement 
    opened by d0c-s4vage 0
  • 3.0 - New documentation

    3.0 - New documentation

    Describe the Feature Request

    Documentation for lookatme should be rendered using lookatme's tutorial. I'm thinking something like render each slide with a set width/height, convert the slide's canvas markup to html, add a table of contents from the slide titles.

    enhancement 
    opened by d0c-s4vage 0
Releases(v2.5.0)
  • v2.5.0(Oct 27, 2022)

    Adds the --tutorial CLI option.

    | type | PR/ticket | author | description | |--------:|----------------------------------------------------------|----------------------------------------------|-------------------------------------------| | feature | #169 | @d0c-s4vage | Adds the --tutorial CLI option | | bug | #168 | @d0c-s4vage | Adds documentation for progressive slides |

    Source code(tar.gz)
    Source code(zip)
  • v2.4.1(Oct 16, 2022)

    Bug fix - theme and style override precedence issues. The CLI params --theme and --style and other general style precedence issues are fixed.

    | type | PR/ticket | author | description | |-----:|---------------------------------------------------------|----------------------------------------------|-------------------------------------------------------------------| | bug | #123 | @d0c-s4vage | Fixes CLI --theme, --style, and general style override issues |

    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(Oct 3, 2022)

    Bug fixes, new features, new CI, getting ready for v3.0.

    | type | PR/ticket | author | description | |--------:|-----------------------------------------------------------|----------------------------------------------|------------------------------------------------------------------| | feature | !124 | @agateau | Adds support for progressive slides with <!-- stop --> markers | | bug | !125 | @agateau | Fixes conflicting CLI -s arguments | | bug | !133 | @AMDmi3 | Excludes tests dir from packages | | bug | #126 | @d0c-s4vage | Fix unit test failues | | bug | !141 | @corydodt | Fix click requirements range | | feature | !150 | @d0c-s4vage | New CI that uses GitHub actions | | bug | !151 | @d0c-s4vage | Fix linter errors |

    Source code(tar.gz)
    Source code(zip)
  • v2.3.0(Oct 23, 2020)

    Makes the user aware of any new, not-already-manually-approved extensions that the source markdown wants to load.

    Also checks all loaded extensions for a user_warnings function that returns a list of messages to display to the user before using the extension.

    Adds new -i, --safe, and --no-ext-warn command-line arguments.

    | type | ticket | description | |--------:|-----------------------------------------------------------|---------------------------------------------------------------| | feature | #109 | More robust extension handling, does not auto-load by default |

    Source code(tar.gz)
    Source code(zip)
  • v2.2.0(Oct 22, 2020)

    Removes copyrighted image, adds -e and --exts options

    | type | ticket | description | |--------:|-----------------------------------------------------------|-------------------------------------| | feature | #103 | Adds ability to pre-load extensions | | bug | #107 | Removes copyrighted image |

    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Oct 16, 2020)

    Adds customizable slide margins and paddings

    | type | ticket | description | |--------:|---------------------------------------------------------|---------------------------------------------| | feature | #95 | Make slide padding and margins customizable |

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Oct 10, 2020)

    Changes render_text to be able to support widgets instead of only text attributes. This is a breaking change to the interface of render_text. Plugins that relied on render_text will need to be updated.

    | type | ticket | description | |--------:|-----------------------------------------------------------|----------------------------------------------------------------| | feature | #101 | Inline render functions should be able to return urwid Widgets |

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Sep 22, 2020)

    Vertical scrolling on overflowed slides now works, added --single and --one command-line options and hrule rendering.

    | type | ticket | description | |--------:|---------------------------------------------------------|---------------------------------------------------------| | feature | #96 | Add new cmd-line option to force single slide rendering | | feature | #91 | Single slide | | feature | #29 | Slides should be vertically scrollable |

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Sep 19, 2020)

    Fixes numbered lists and general list formatting.

    | type | ticket | description | |-----:|---------------------------------------------------------|----------------------| | bug | #86 | Fixes numbered lists |

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Feb 28, 2020)

    Adds terminal-ex mode to embedded terminal code blocks.

    | type | ticket | description | |-----:|---------------------------------------------------------|-------------------------| | bug | #86 | Adds terminal-ex mode |

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Dec 27, 2019)

    Fixed keypress handling - pressing the "up" key works now

    | type | ticket | description | |-----:|---------------------------------------------------------|----------------------| | bug | #84 | Fixes keypress issue |

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Dec 19, 2019)

    Added file loader builtin extension

    | type | ticket | description | |--------:|---------------------------------------------------------|----------------------------| | feature | #81 | Adds file loader extension |

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Dec 15, 2019)

    Fixed unicode rendering inside Terminals

    | type | ticket | description | |-----:|---------------------------------------------------------|--------------------------| | bug | #78 | Unicode rendering errors |

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Dec 15, 2019)

    Fixed error handling. Code is pretty stable.

    | type | ticket | description | |-----:|---------------------------------------------------------|-----------------------| | bug | #75 | Better error handling |

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Dec 10, 2019)

    Adds version flag, license, code of conduct

    | type | ticket | description | |--------:|---------------------------------------------------------|--------------------------| | feature | #67 | Adds version flag | | feature | | Adds code of conduct | | bug | #66 | Adds missing license |

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Dec 7, 2019)

    Adds stylable meta field values (title, author, date) and smart slide splitting.

    | type | ticket | description | |--------:|---------------------------------------------------------|----------------------------| | feature | #14 | Adds stylable meta values | | feature | #30 | Adds smart slide splitting | | bug | #53 | Dump unicode styles YAML | | bug | #32 | Fix newline bug | | bug | #57 | Fix empty code block bug |

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Dec 7, 2019)

    Large efforts around contrib extensions and their documentation. Created the lookatme.contrib-template as well.

    | type | ticket | description | |--------:|---------------------------------------------------------|--------------------------------------------------------------| | feature | #23 | Adds contrib extension documentation | | feature | #46 | Lets inline markdown rendering be extensible | | feature | #54 | Changes the expected contrib namespace to lookatme.contrib |

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Dec 7, 2019)

    Major efforts include adding clickable links and gracefully handling invalid markdown code-block languages.

    | type | ticket | description | |--------:|---------------------------------------------------------|-----------------------------------| | feature | #16 | Added clickable links | | bug | #45 | Handle invalid code langs | | bug | #50 | Specify Python >= 3.3 requirement | |

    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Dec 7, 2019)

    Major efforts include: light theme, documentation

    | type | ticket | description | |--------:|---------------------------------------------------------|-------------------------------| | feature | #2 | Added documentation | | bug | #40 | Updated styling | | bug | #42 | Added code coverage | | bug | #37 | Added description to setup.py | | bug | #39 | Fixes pygments Urwid renderer |

    Source code(tar.gz)
    Source code(zip)
Owner
James Johnson
James Johnson
Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files

Mdformat is an opinionated Markdown formatter that can be used to enforce a consistent style in Markdown files. Mdformat is a Unix-style command-line tool as well as a Python library.

Executable Books 180 Jan 6, 2023
A markdown lexer and parser which gives the programmer atomic control over markdown parsing to html.

A markdown lexer and parser which gives the programmer atomic control over markdown parsing to html.

stonepresto 4 Aug 13, 2022
Livemark is a static page generator that extends Markdown with interactive charts, tables, and more.

Livermark This software is in the early stages and is not well-tested Livemark is a static site generator that extends Markdown with interactive chart

Frictionless Data 86 Dec 25, 2022
A lightweight and fast-to-use Markdown document generator based on Python

A lightweight and fast-to-use Markdown document generator based on Python

ๅฟซไน็š„่€้ผ ๅฎๅฎ 1 Jan 10, 2022
A minimal platform for Markdown-based blogs

madblog This project provides a minimal blogging platform based on Markdown files. Demos This project powers the following blogs: Platypush My persona

Fabio Manganiello 2 Aug 2, 2022
A fast yet powerful Python Markdown parser with renderers and plugins.

Mistune v2 A fast yet powerful Python Markdown parser with renderers and plugins. NOTE: This is the re-designed v2 of mistune. Check v1 branch for ear

Hsiaoming Yang 2.2k Jan 4, 2023
A Python implementation of John Gruberโ€™s Markdown with Extension support.

Python-Markdown This is a Python implementation of John Gruber's Markdown. It is almost completely compliant with the reference implementation, though

Python-Markdown 3.1k Dec 30, 2022
A Python implementation of John Gruberโ€™s Markdown with Extension support.

Python-Markdown This is a Python implementation of John Gruber's Markdown. It is almost completely compliant with the reference implementation, though

Python-Markdown 3.1k Dec 31, 2022
Static site generator that supports Markdown and reST syntax. Powered by Python.

Pelican Pelican is a static site generator, written in Python. Write content in reStructuredText or Markdown using your editor of choice Includes a si

Pelican dev team 11.3k Jan 5, 2023
Extensions for Python Markdown

PyMdown Extensions Extensions for Python Markdown. Documentation Extension documentation is found here: https://facelessuser.github.io/pymdown-extensi

Isaac Muse 685 Jan 1, 2023
markdown2: A fast and complete implementation of Markdown in Python

Markdown is a light text markup format and a processor to convert that to HTML. The originator describes it as follows: Markdown is a text-to-HTML con

Trent Mick 2.4k Dec 30, 2022
Convert HTML to Markdown-formatted text.

html2text html2text is a Python script that converts a page of HTML into clean, easy-to-read plain ASCII text. Better yet, that ASCII also happens to

Alireza Savand 1.3k Dec 31, 2022
Comprehensive Markdown plugin built for Django

Django MarkdownX Django MarkdownX is a comprehensive Markdown plugin built for Django, the renowned high-level Python web framework, with flexibility,

neutronX 740 Jan 8, 2023
Awesome Django Markdown Editor, supported for Bootstrap & Semantic-UI

martor Martor is a Markdown Editor plugin for Django, supported for Bootstrap & Semantic-UI. Features Live Preview Integrated with Ace Editor Supporte

null 659 Jan 4, 2023
Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed. Now in Python!

markdown-it-py Markdown parser done right. Follows the CommonMark spec for baseline parsing Configurable syntax: you can add new rules and even replac

Executable Books 398 Dec 24, 2022
A fast, extensible and spec-compliant Markdown parser in pure Python.

mistletoe mistletoe is a Markdown parser in pure Python, designed to be fast, spec-compliant and fully customizable. Apart from being the fastest Comm

Mi Yu 546 Jan 1, 2023
A super simple script which uses the GitHub API to convert your markdown files to GitHub styled HTML site.

A super simple script which uses the GitHub API to convert your markdown files to GitHub styled HTML site.

ร‡algan Aygรผn 213 Dec 22, 2022
Remarkable Markdown Debian Package Fix

Remarkable debian package fix For some reason the Debian package for remarkable markdown editor has not been made to install properly on Ubuntu 20.04

Eric Seifert 37 Jan 2, 2023
Read a list in markdown and do something with it!

Markdown List Reader A simple tool for reading lists in markdown. Usage Begin by running the mdr.py file and input either a markdown string with the -

Esteban Garcia 3 Sep 13, 2021