Skip to content
An Emacs package for running demonstrations and presentations from within Emacs.
Branch: master
Clone or download
yisraeldov and howardabrams Updating the link for missing video (#17)
Learn you some Lisp for Great Good was missing on you tube, found another one but it is not very easy to see demo-it

Maybe there is a better version?
Latest commit 2760d2e Dec 19, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
demonstration Adding a forgotten function. Nov 3, 2016
example Minor formatting changes Oct 30, 2016
snippets Updating the yasnippet to match v2 updates Oct 21, 2016
.gitignore More start parameters seem like the least surprise Oct 21, 2016 Add Code of Conduct for Future Contribution Oct 21, 2016
demo-it-custom.el Add :faster keyword for quicker text entry. Jun 28, 2017
demo-it-extras.el Fix bug and expand the demo-it-highlight-dwim Jun 28, 2017
demo-it-present.el Clean programmatic interface Oct 21, 2016
demo-it-tests.el Cleaned up the presentation functions Oct 21, 2016
demo-it.el Having a read-only shell prompt made demo-it shell commands error (#13) Apr 4, 2018 Updated the `info` files. Nov 3, 2016
dir More info-specific updates Oct 21, 2016

At the end of each sprint, each of us demonstrate accomplishments. These reviews often incorporate the following trifecta:

  • Presentations explaining the technology and other frobnications
  • Source code, correctly highlighted and perhaps interactive
  • Executing the code, preferably in a shell to maintain nerd cred

During my sprint reviews, I noticed I used my org-mode-formatted files, eshell and source code buffers… always in Emacs. However, fat-fingering or mentally burping delayed the gratification for my audience while I laboriously typed. I solved this problem by predefining each “step” as an Emacs Lisp function, and had another function execute each step function when I hit an advance key (F12).

After I had amassed a small army of helper functions, I packaged it as demo-it, because I lack the imagination to come up with anything more clever.

See the following videos as examples of what can be done:

Click the following image for a quicker example:

Example and Demonstration

Using this project is a four step process:

  1. Load the library in your own Elisp source code file
  2. Create zero or more helper functions that “do things”, or use the functions provided by this project.
  3. Order the functions by calling (demo-it-create step-1 step-2 ...)
  4. Call demo-it-start to kick off the fun.

Press space for each step, or call demo-it-end to end earlier.

For instance:

(require 'demo-it)   ;; Load this library of functions

(defun my-demo-step/show-code ()
  "Helper demo function that displays some source code and
advances the presentation at one time."
  (demo-it-load-side-window "example/")

;; Order the functions and forms for this presentation:
(demo-it-create (demo-it-presentation "example/")
                 demo-it-presentation-return ; close file and advance
                (demo-it-run-in-eshell "python example/"))


Each “step” given to demo-it-create can be one of the following:

  • an expression typically calling a helper function
  • a name of a function to call that does multiple actions
  • a string referring to a key-binding to run
  • a property that affects demonstration behavior

This package has a collection of helping functions, that can either be called directly as part of an expression, or embedded in a demonstration step function. For a more complete example, see example.el or the other examples in the example directory.

Finally, read the documentation (which is available as an Info manual).

Historical Record

The initial release, while published on MELPA, was rather an ad hoc collection of functions, poorly organized and barely documented. Sorry about that. I really didn’t think any one would care enough to use it.

Version 2 of this project attempted to remedy those shortcomings, cleaning and standardizing the interface of functions. Also included is the following features:

  • Simplification of a demonstration’s construction. Originally each step essentially required a helper function, but now, we can specify full expressions directly into demo-it-create.
  • Default behavior is now based on customized preferences instead of hard-coded values. Functions still accept optional values to override those defaults. Also the demo-it-create macro accepts demo-level overrides of the customized preferences.
  • Described every function both online and as an Info manual, with lots of examples for the step functions.

Version 3 is a plan to have each step more repeatable. Currently, each step assumes a state built by the previous steps, which makes developing, debugging, and reversing difficult.

You can’t perform that action at this time.