Configuration file

Pympress has a number of options available from its configuration file.

This file is usually located in:

  • ~/.config/pympress on Linux,

  • %APPDATA%/pympress.ini on Windows,

  • ~/Library/Preferences/pympress on macOS,

  • in the top-level of the pympress install directory for portable installations.

The path to the currently used configuration file can be checked in the Help > About information window.


The shortcuts are parsed using Gtk.accelerator_parse():

The format looks like “<Control>a” or “<Shift><Alt>F1” or “<Release>z” (the last one is for key release).

The parser is fairly liberal and allows lower or upper case, and also abbreviations such as “<Ctl>” and “<Ctrl>”. Key names are parsed using Gdk.keyval_from_name(). For character keys the name is not the symbol, but the lowercase name, e.g. one would use “<Ctrl>minus” instead of “<Ctrl>-”.

This means that any value in this list of key constants is valid (removing the initial Gdk.KEY_ part). You can verify that this value is parsed correctly from the Help > Shortcuts information window.


The panes (current slide, next slide, notes, annotations, etc.) can be rearranged arbitrarily by setting the entries of the layout section in the configuration file. Here are a couple examples of layouts, with Cu the current slide, No the notes half of the slide, Nx the next slide:

  • All-horizontal layout:

    | Cu | No | Nx |


    notes = {"children": ["current", "notes", "next"], "proportions": [0.33, 0.33, 0.33], "orientation": "horizontal", "resizeable": true}
  • All-vertical layout:

    | Cu |
    | No |
    | Nx |


    notes = {"children": ["current", "notes", "next"], "proportions": [0.33, 0.33, 0.33], "orientation": "vertical", "resizeable": true}
  • Vertical layout with horizontally divided top pane:

    | Cu | No |
    |    Nx   |


    notes = {"children": [
      			{"children": ["current", "notes"], "proportions": [0.5, 0.5], "orientation": "horizontal", "resizeable": true},
      		], "proportions": [0.5, 0.5], "orientation": "vertical", "resizeable": true}
  • Horizontal layout with horizontally divided right pane:

    |    | Nx |
    + Cu +----+
    |    | No |


    notes = {"children": [
      			{"children": ["next", "notes"], "proportions": [0.5, 0.5], "orientation": "vertical", "resizeable": true}
      		], "proportions": [0.5, 0.5], "orientation": "horizontal", "resizeable": true}

And so on. You can play with the items, their nesting, their order, and the orientation in which a set of widgets appears.

For each entry the widgets (strings that are leaves of “children” nodes in this representation) must be:

  • for notes: “current”, “notes”, “next”

  • for plain: “current”, “next” and “annotations” (the annotations widget is toggled with the A key by default)

  • for highlight: same as plain with “highlight” instead of “current”

A few further remarks:

  • If you set “resizeable” to false, the panes won’t be resizeable dynamically with a handle in the middle

  • “proportions” are normalized, and saved on exit if you resize panes during the execution. If you set them to 4 and 1, the panes will be 4 / (4 + 1) = 20% and 1 / (4 + 1) = 100%, so the ini will contain something like 0.2 and 0.8 after executing pympress.