Terminal tool for presenting Markdown-powered slide decks.
- Write slides in the Markdown with extended syntax.
- Show code snippets in fenced code blocks.
- Syntax highlight code for over 200 languages.
- Create Markdown tables with advanced formatting.
- Align slide content with familiar CSS syntax.
- Add margin around content for all or a single slide.
- Track progress through the slides with a pager.
- Display a footer at the bottom of every slide.
- Apply custom symbols and style theme to content.
- Auto reload presentation when a file with slides changes.
Slideck will work with any version of Ruby greater than or equal to 2.0. Read Installing Ruby guide to choose the best installation method.
Once Ruby is set up, install the slideck with:
$ gem install slideckOpen a text file and start writing slides in Markdown. Begin the document by adding configuration for all slides in YAML format. Then to denote a slide, separate its content with three dashes. Use the same configuration settings to override the global settings for a slide. To do so, specify settings with YAML flow mappings after the slide separator.
Here's a sample of a few slides with global and slide-specific configuration settings:
align: center margin: 2 5 footer: align: center bottom text: Footer content --- margin: 0 # Welcome to Slideck ## Built with TTY Toolkit --- align: center top # Code Block ```ruby puts "Welcome to Slideck" ``` --- theme: {list: magenta} # Unordered List - Item 1 - Item 2 - Item 3 --- symbols: ascii # Table | A | B | C | |---|---|---| | a | b | c | | a | b | c | | a | b | c | --- {pager: false, footer: false} # The EndTo start presenting, for example, slides.md file in a terminal:
$ slideck slides.mdUse the -h or --help flag to see help about available presentation controls and options:
$ slideck --helpUse the -w or --watch flag to automatically reload the presentation with any update to the slides.md file:
$ slideck slides.md --watchConfiguration options can be global or slide-specific.
Add global configuration options in YAML format at the beginning of a document.
For example, to configure alignment and margin for all slides:
align: center margin: 2 5 --- First Slide --- Second Slide ---Use YAML flow mappings syntax to change the global configuration for a given slide. This format is a series of key/value pairs separated by commas and surrounded by curly braces. The semicolon with space follows a key and splits it from value. Braces are optional for a single key/value pair. A slide-specific configuration follows three dashes and needs to be on the same line.
For example, to override alignment and margin for a given slide:
align: center margin: 2 5 --- margin: 0 First Slide --- {align: center top, margin: 1 3} Second Slide ---Slideck draws the slide's content from the left top of the terminal screen by default. It positions the pager at the bottom right corner. When given, the footer ends up at the bottom left corner. Use the :align configuration to change the default positioning of content, footer and pager.
The align configuration takes either one or two values. The first value specifies the horizontal alignment out of left, center and right. The second value describes vertical alignment out of the top, center and bottom. Skipping the second value will default the vertical alignment to the center. Use a space, comma or both to separate two values.
For example, to position content at the top center of the screen on every slide:
align: center topOr use shorthand to place content at the center left on every slide:
align: leftUse the same configuration to change the alignment for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to place a given slide at the bottom left:
--- align: left bottomSlideck doesn't show the footer by default. Use the :footer configuration to add content to the bottom left of the screen for every slide.
For example, to display a footer on every slide:
footer: Footer contentThe footer supports Markdown syntax:
footer: **bold** contentThe footer can also span more than one line:
footer: "first line\nsecond line\nthird line"Use the :align key to change the footer alignment and the :text key to specify its content.
For example, to specify a global footer at the bottom center of every slide:
footer: align: center bottom text: Footer contentUse the same configuration to change the footer for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to place a footer at the bottom center of the screen:
--- footer: {align: center bottom, text: Footer content}Or, use a false value to hide a footer for a single slide:
--- footer: falseThe margin specifies a distance from all four sides of the terminal screen. It follows CSS rules and can have one, two, three or four integer values. Use a space or comma to separate each integer value.
The following are all possible ways to specify a margin:
margin: 1 # the same margin of 1 for all sides margin: 1 2 # 1 to the top and bottom, and 2 to the left and right margin: 1 2 3 # 1 to the top, 2 to the left and right, and 3 to the bottom margin: 1 2 3 4 # 1 to the top, 2 to the right, 3 to the bottom, 4 to the leftOr, specify a margin with explicit side names:
margin: top: 1 right: 2 bottom: 3 left: 4Like shorthand notation, specify names only for the configured sides.
For example, to add only the top margin and leave all the other sides with their default values:
margin: top: 1Use the same configuration to change the margin for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to zero out the margin for a given slide:
--- margin: 0Slideck displays the pager in the bottom right corner of the terminal screen. The display format is %<page>d / %<total>d, where the first placeholder represents the current slide and the second is the total number of slides.
For example, to change the pager display:
pager: "Page %<page>d of %<total>d"The pager supports Markdown syntax:
pager: "**Bold** %<total> pages"The pager can also span more than one line:
pager: "Page\n%<page>d\nof\n%<total>d"Use the :align key to change the pager alignment and the :text key to specify its content.
For example, to place the pager at the bottom center of every slide:
pager: align: center bottom text: "Page %<page>d of %<total>d"Or, use a false value to hide a pager on all slides:
pager: falseUse the same configuration to change the pager for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to place a pager at the bottom center of a given slide:
--- pager: {align: center bottom, text: "Page %<page>d of %<total>d"}Or, use a false value to hide a pager for a single slide:
--- pager: falseSlideck decorates Markdown elements with unicode symbols by default. Use the :symbols configuration to change the display of decorative characters. It takes either a single value or key/value pairs. The single value specifies a character set out of ascii or unicode. The key/value pairs accept the :base and :override keys. Like a single value, the :base key takes either ascii or unicode.
For example, to change the default symbols for all slides to ascii:
symbols: asciiOr, use the :base key to specify the ascii character set:
symbols: base: asciiThe :override key accepts key/value pairs, where the key is a symbol name and the value is a decorative character. Please see the tty-markdown for a complete list of symbols.
For example, to change the :bullet symbol for every slide:
symbols: override: bullet: xUse the same configuration to change the symbols for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to change a character set to ascii for a single slide:
--- symbols: asciiOr, to change the :bullet symbol for a single slide:
--- symbols: {override: {bullet: x}}Slideck displays Markdown elements with a default style theme. Use the :theme configuration to change individual element styles. It takes key/value pairs where the key is the element name, and the value is a single style or list of styles. Please see the tty-markdown for a complete list of element names and their styles.
For example, to change em, link and list element styles for every slide:
theme: em: blue link: cyan list: magentaUse the same configuration to change the theme for a single slide. It needs to follow after the slide separator and be on the same line.
For example, to change em, link and list element styles for a single slide:
--- theme: {em: blue, link: cyan, list: magenta}After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/piotrmurach/slideck. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.
The gem is available as open source under the terms of the GNU Affero General Public License v3.0.
Everyone interacting in the Slideck project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.
Copyright (c) 2022 Piotr Murach. See LICENSE.txt for further details.