SkillAgentSearch skills...

Dslide

Present anything Emacs can do with programmable, extensible, configurable slides & presentation steps made from org mode headings

Install / Use

/learn @positron-solutions/Dslide
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

<!-- !!!THIS FILE HAS BEEN GENERATED!!! Edit README.org -->

<a id="org022ed0d"></a>

Domain Specific sLIDEs

https://github.com/positron-solutions/dslide/assets/73710933/06a66e42-a172-48ba-968f-5f5b1989a868

<a href="https://melpa.org/#/dslide"><img src="https://melpa.org/packages/dslide-badge.svg" alt="melpa package"></a> <a href="https://stable.melpa.org/#/dslide"><img src="https://stable.melpa.org/packages/dslide-badge.svg" alt="melpa stable package"></a> <a href="https://elpa.nongnu.org/nongnu-devel/dslide.html"><img src="https://elpa.nongnu.org/nongnu-devel/dslide.svg"></a> <a href="https://elpa.nongnu.org/nongnu/dslide.html"><img src="https://elpa.nongnu.org/nongnu/dslide.svg" alt="Non-GNU ELPA"></a>

<a id="orge34b71f"></a>

Programmable Org Presentation 🦄

  • Per-element configurable behavior through extensible actions
  • Script steps in your presentation with Org babel blocks
  • Incorporate anything Emacs does with keyboard macro playback
  • Convenient API for quickly writing reliable custom actions for reuse
  • Decent out-of-the-box results with existing org documents

<a id="orgc2a4f79"></a>

Status 💹

Everything in ./test/demo.org is maintained. File issues.

  • Still pre-1.0. See the version 1.0 feature roadmap. Read the NEWS.org file for changes.
  • Expect less markup over time. Old markup should warn.
  • Accepting PR's. Read the manual section on hacking.

Emojis indicate work-in-progress 🚧, intended deprecation ⛔, or experimental features 🧪.

Subscribe to Positron's YouTube for updates and related demonstrations.

Installation

;; From MELPA or ELPA
(use-package dslide)

;; package-vc
(package-vc-install
 '(dslide
   :url "https://github.com/positron-solutions/dslide.git"))

;; using elpaca's with explicit recipe
(use-package dslide
    :ensure (dslide :host github
                    :repo "positron-solutions/dslide"))

;; straight with explicit recipe
(use-package dslide
    :straight (dslide :type git :host github
                      :repo "positron-solutions/dslide"))

;; or use manual load-path & require, you brave yak shaver

Try It Out

Clone the repo and then open the ./test/demo.org file. Call dslide-deck-start. The presentation will explain everything else while demonstrating Dslide.

You will need VLC installed and the Master of Ceremonies package to successfully run all examples, but you can skip them in the contents view or start at point on other examples to go around them.

Features

Simple User Interface

Fully programmable sequences behind a two-button presentation interface:

  • dslide-deck-forward
  • dslide-deck-backward

The default dslide-mode-map uses arrow keys. Left and right are dslide-deck-forward and dslide-deck-backward. Up is dslide-deck-start and will show the contents. Down is dslide-deck-stop and will stop the slide show.

Contents Navigation

Call dslide-contents to show a contents overview. Calling dslide-deck-forward and dslide-deck-backward in the contents can quickly move through headings. Call dslide-deck-start again to resume the presentation from that point.

Narrate While Presenting

Check out dslide-deck-develop. You can see your hidden comments and the approximate progress indications. Babel actions will highlight blocks as they execute, showing you what just happened.

Hide Markup

By default, the dslide-action-hide-markup action is configured in dslide-default-actions. Looks clean out of the box. Commented and :noslide: or :noexport: headings are filtered. Todos and tags are hidden.

Independent Buffer State

The actual display is done in an indirect buffer. Your hooks and customizations for presentation will not pollute your editing buffer. Dirty state will not pile up in your presentation buffer, greatly increasing reliability even if your custom Elisp scripting is sloppy 💩.

Table of Contents

<a id="orgd426bd0"></a>

Creating ✏️

Documents should "just work" and obtain decent results.

  • Add behavior to elements by enabling and configuring actions
  • Add custom behavior with babel blocks and keyboard macros
  • Create custom actions to use different kinds of data in reusable ways

<a id="org5f30c9b"></a>

Actions 🪄

Actions add behavior to your content. They can be configured per-slide and in some cases per-element.

There are two kinds of actions:

  • Section actions: work on the content in the heading's section. They use the dslide-action base class and prefix.
  • Slide actions: display the slide, usually by narrowing, and then handle the child headings, either inline or as independent slides. They use the dslide-slide-action base class and prefix.

To browse all actions, because they are all EIEIO classes, you can use eieio-browse and see the actions descend from dslide-action.

+--dslide-stateful-sequence
     +--dslide-action
          +--dslide-action-propertize
          +--dslide-action-image
          +--dslide-action-babel
          +--dslide-action-kmacro
          +--dslide-action-item-reveal
          +--dslide-action-hide-markup
          +--dslide-slide-action
               +--dslide-slide-action-every-child
               +--dslide-slide-action-inline
               +--dslide-slide-action-child
               +--dslide-slide-action-flat

<a id="org9458a69"></a>

Enabling Actions 🚦

Most actions are enabled by scanning for the right content. The babel action is used on babel blocks. The image action is used on image links. Some actions, especially slide actions, must be explicitly enabled. The markup used to enable actions can also be where they are configured.

  • Per-Element

    Some actions, such as dslide-action-propertize, can't decide which elements to operate on or what to do with those elements. They are both enabled and configured per-element by using an affiliated keyword.

    #+attr_dslide_propertize: face '(:foreground "#ff0000")
    This text will be red
    

    🚧 This is the preferred style of configuration moving forward.

    ℹ️ Affiliated keywords must have the attr prefix or they will not apply to the content they precede. Affiliated keywords cannot be attached to headings, which must use their property drawer to attach data.

  • Keyword

    For some actions, the configuration is the content. They use a keyword. The value of the keyword is the content for the action. As elsewhere, use plist :key value style configuration.

    #+dslide_kmacro: :keys "M-x a n i m a t e <return>"
    
  • Property Drawer

    Some actions run on every element of the heading before you even see the content. Since there may be no associated content to attach them to, they can only be configured in the property drawer. Slide actions are always configured this way.

    * Inline Children
    :PROPERTIES:
    :DSLIDE_SLIDE_ACTION: dslide-slide-action-child :header nil
    :DSLIDE_ACTIONS: dslide-action-item-reveal :inline t
    :END:
    - You won't believe these animations
    - This is the world's greatest presentation software
      + But mainly because it integrates with all you programming tools
    
    • DSLIDE_SLIDE_ACTION: Accepts one slide action and its :key value configuration
    • DSLIDE_ACTIONS: Can be used to list multiple action classes and their :key value configurations.

    The dslide-action-hide-markup action only runs when entering a slide, to hide markup before you see anything. 🚧 It will be configurable in the property drawer. Right now it checks dslide-hide-markup-types.

    🚧 These actions can currently only be configured in the

View on GitHub
GitHub Stars282
CategoryDevelopment
Updated13d ago
Forks4

Languages

Emacs Lisp

Security Score

95/100

Audited on Mar 16, 2026

No findings