*************************************
*** ***
*** 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:
http://michaeldadams.org/projects/haskell-pdf-presenter/
***********
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.
***********
================
Features
================
- 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 https://bugs.freedesktop.org/show_bug.cgi?id=50992),
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: http://davvil.github.com/pdfpc/
* pdf-presenter-console: http://westhoffswelt.de/projects/pdf_presenter_console.html
* pympress: http://pympress.org/
================
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.