The haskell-pdf-presenter package

[Tags: gpl, program]

The Haskell Pdf Presenter (hpdfp) is a tool for presenting PDF-based slide shows. It has many features and niceties that make delivering a presentation easier. For example, as a presenter, it is useful to see the next slide before it is shown to the audience as well as how much allotted time remains.

There are a lot of features that may not be immediately obvious so please be sure to look at the documentation. For help with the command line, use the --help flag. For help with the GUI, press the ? key when the program is running. The README contains a terse summary of all the features.

For more information and example uses, please visit the project home page.

[Skip to ReadMe]


Versions0.2.2, 0.2.3, 0.2.4, 0.2.5
Dependenciesbase (==4.*), bytestring (>=0.9), cairo, containers (>=0.1), directory (>=1.0), filepath (>=1.0), glib, gtk (>=0.12.2), old-locale, poppler (==0.12.2.*), template-haskell (>=2.2), time (>=, zlib (==0.5.*) [details]
Copyright(c) 2012-2013, Michael D. Adams
AuthorMichael D. Adams
MaintainerMichael D. Adams <>
CategoryApplication, Graphics, Image Viewer, PDF
Home page
Source repositoryhead: hg clone
this: hg clone -u v0.2.5
UploadedMon Jan 20 17:29:21 UTC 2014 by MichaelAdams
Downloads928 total (17 in last 30 days)
0 []
StatusDocs not available [build log]
Successful builds reported [all 6 reports]


Maintainers' corner

For package maintainers and hackage trustees

Readme for haskell-pdf-presenter-0.2.5

***                               ***
*** Haskell Pdf Presenter (hpdfp) ***
***                               ***

This application is a viewer for PDF-based presentations such as those
generated by Beamer.  Unlike standard PDF viewers it has features
specifically for presentations such as a visual clock/timer and a
preview showing the next slide to the person delivering the talk.

For basic use of the program, simply pass the path to the PDF as an
argument as in the following:

    $ hpdfp [filename]

For help with the command line use the "--help" flag.

For help with the GUI press the "?" key when the program is running.

There are a lot of features that may not be immediately obvious so
please be sure to look at those bits of documentation.

You can also visit the project home page for example use cases:

WARNING: This application intentionally disables both the screen saver
and automatic screen dimming.  This is to avoid having the screen saver
start in the middle of your presentation.

- Rendering
  - Slides are pre-rendered in the background
  - Pre-rendered slides are compressed to memory usage is low
      (e.g., my dissertation defense with 95 slides takes only 60MB at max resolution)
  - slide number or file name until rendered
  - Renders slide close to current slide first (at a rate of two forward per one backward).
  - Cache is filtered and wiped when the screen resizes
  - Since poppler is not thread safe (see,
    we avoid using a separate thread for rendering, but it is still done incrementally
    so the GUI is still responsive.

- Compatible with most remote clickers

- Disables screen saver when running in fullscreen mode
  - WARNING: This is done by programatically giggling the mouse by zero pixels (even when running in the background).
    This may lead to other programs thinking the mouse is constantly moving
    (e.g. a video player may not dim the background or hide the mouse).
    I haven't found any programs where this is an actual problem, but it is a possibility.

- Audience window
  - Mouse hides after ~3 seconds
  - Shows on top if there is only one monitor
  - Automatically placed on auxiliary monitor/projector if present
  - Both black and white video mute

- Presenter window
  - Meta-data:
    - A small progress bar is shown at the bottom while pre-rendering,
      but since pre-rendering is done in the background, the GUI is
      still be responsive and you do not have to wait for
      pre-rendering to complete.
    - Fonts are big (60pt = 5 * 12pt)
    - Resizeable
    - Timer:
      - Both stopped and paused mode:
        - Paused automatically starts on slide forward or back
        - Stopped says stopped until user explicitly changes it
      - Four different modes: count down, count up, 12 hour and 24 hour
      - Grows to fit size (useful for session chairs)
      - Colors: white, red (warning), purple (overtime)
          Yeah, these colors are a bit strange, but I've chosen them to
          be easily distinguishable even in peripheral vision or at a
          glance.  I don't know how well they work for color-blind
          people.  Feedback is welcome.
      - Double click to configure timer
        - Current remaining time
        - Initial time
        - Warning time
    - Slide counter
      - Double click to go to slide
    - Mute status
    - Timer status
      - Multiple modes: Count down, count up, wall clock (12 or 24 hr)
      - When paused (but not stopped) automatically goes to running if user
        goes forward or backward one slide.  Changing slide in other ways does not unpause.
      - NOTE: to start timer but stay on first slide, just hit the back key
    - Progress bar when doing rendering in the background
  - Preview
  - Thumbnails
    - Current slide highlighted
    - Tooltips show slide number (Currently disabled due to a bug in GTK)
    - Click to go to slide
    - Mouse wheel scrolls instead of changes slide

- Times specified in dialogues or command line are parsed according to
  the format "-* ((float:)? float:)? float" with whitespace
  allowed anywhere. The following are some examples.
    1:30:05     (1 hour, 30 min and 5 seconds)
      30:00     (30 min)
         90     (90 seconds)
          0     (0 seconds)
      -1:30     (negative 1 minute and 30 seconds = negative 90 seconds)
      1:0:0     (1 hour)
     1:-5:0     (1 hour minus 5 minutes = 55 minutes)
    1.5:0:0     (1.5 hours)

- Key bindings:
  (Note that the keys are far apart on a Qwerty keyboard and irreversible
  actions (e.g., resetting the timer) all use a modifier key.)

  - Help/About dialog: H, ?
  - Quit: Alt-F4, Ctrl-Q
  - Switching slides:
    - Forward slide and unpause (shift moves by 10): space, page down, enter, right arrow, down arrow
    - Backward slide and unpause (shift moves by 10): back space, page up, left arrow, up arrow
    - First slide: home
    - Last slide: end
    - Goto slide number: Ctrl-G, double-click slide number
    - History back: Alt-L, XF86Back
    - History forward: Alt-R, XF86Forward
  - Clock/timer control:
    - Toggle pause: P, pause
    - Toggle stop: Shift-P
    - Reset timer: C
    - Open timer dialog: Ctrl-C
  - Mute:
    - Toggle white: W
    - Toggle black: B
  - Presenter window:
    - Switch views: Tab
    - Change preview percentage: [, ], Shift-[ (minor), Shift-] (minor), = (standard stops)
      - Standard stops: 0, best-fit on left, 1/3, 1/2, 2/3, best-fit on right, 1
  - Files:
    - Reload file: Ctrl-R
    - Open file: Ctrl-O
    - Close file: Shift-Q
  - Window control:
    - Enter fullscreen: F, F11, Alt-Enter, Control-L
    - Exit fullscreen: Escape, F, F11, Alt-Enter, Control-L
    - Move between monitors: M, Shift-M (reverse)
    - Move presenter window between monitors: Ctrl-S, Shift-Ctrl-S (reverse)
    - Move audience window between monitors: Alt-S, Shift-Alt-S (reverse)

- Command line:
  - Zero or one files as argument
      (NOTE: Zero files is useful for creating a simple timer with no slides)
  - Options:
    -h, -?   --help                                   Display usage message
    -s INT   --slide=INT                              Initial slide number (default 1)
    -t TIME  --start-time=TIME, --starting-time=TIME  Start time (default 10:00)
    -w TIME  --warn-time=TIME, --warning-time=TIME    Warning time (default 5:00)
    -e TIME  --end-time=TIME, --ending-time=TIME      End time (default 0:00)
    -f       --fullscreen                             Start in full screen mode
    -p INT   --preview-percentage=INT                 Initial preview percentage (default 50)
             --presenter-monitor=INT                  Initial monitor for presenter window (default 0)
             --audience-monitor=INT                   Initial monitor for audience window (default 1)
             --video-mute=MODE                        Initial video mute mode: "black", "white" or "off" (default)
             --clock-mode=MODE                        Initial clock mode: "remaining" (default), "elapsed", "12hour" or "24hour"
             --timer-mode=MODE                        Initial timer mode: "play", "pause" (default) or "stop"
             --compression=[0-9]                      Compression level (default 1). 0 is none. 1 is fastest. 9 is best.

Inspired by

* pdfpc:

* pdf-presenter-console:

* pympress:

Known Bugs

If you
  (1) are in full screen mode,
  (2) are displaying to two monitors,
  (3) have the presenter toggled to show thumbnails, and
  (4) hover the mouse over the vertical scroll bar,
then the rendering will glitch and show older versions of the screen.
I don't know why this happens, but I'm guessing it is a bug in GTK.
A similar bug happens if you put tooltips on the thumbnails (which
are currently disabled to avoid that bug).  Any help in solving
this bug would be appreciated.