diff --git a/pympress-1.8.1.tar.gz b/pympress-1.8.1.tar.gz new file mode 100644 index 0000000..7417b92 Binary files /dev/null and b/pympress-1.8.1.tar.gz differ diff --git a/pympress.yaml b/pympress.yaml new file mode 100644 index 0000000..31889b9 --- /dev/null +++ b/pympress.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: https://github.com/Cimbali/pympress/ +tag_prefix: "v" +separator: "." diff --git a/python3-pympress.spec b/python3-pympress.spec new file mode 100644 index 0000000..7cc0134 --- /dev/null +++ b/python3-pympress.spec @@ -0,0 +1,341 @@ +%define normalize() %(echo %* | tr "[:upper:]_ " "[:lower:]--") +%{?!py3_dist:%define py3_dist() (python%{python3_version}dist(%{normalize %1}) or python3-%1)} + + +Summary: A simple and powerful dual-screen PDF reader designed for presentations +Name: python3-pympress +Version: 1.8.1 +Release: 1 +Source0: pympress-1.8.1.tar.gz +License: GPL-2.0-or-later +Prefix: %{_prefix} +BuildArch: noarch +Vendor: Cimbali, Thomas Jost, Christof Rath, Epithumia +Url: https://github.com/Cimbali/pympress/ +Requires: python(abi) = %{python3_version} +Provides: python%{python3_version}dist(pympress) = 1.8.1 +BuildRequires: findutils grep python3-devel +%if %{?!rhel:8}%{?rhel} >= 8 +Requires: (%{py3_dist pygobject} or python3-gobject) +%else +Requires: python3%{suffix:%{python3_version}}-gobject +%endif +%if 0%{?suse_version} +Requires: gtk3 libpoppler-glib8 libgdk_pixbuf-2_0-0 gstreamer gstreamer-plugins-base gstreamer-plugins-good gstreamer-plugins-good-gtk libgstvideo-1_0-0 +Recommends: gstreamer-plugins-ugly gstreamer-plugins-bad +%endif +%if 0%{?mdkversion}%{?mga_version} +Requires: gtk+3.0 (libpoppler-glib8 or lib64poppler-glib8) (libgdk_pixbuf2.0 or libgdk_pixbuf2.0_0) libgstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good +Recommends: gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad +%endif +%if 0%{?suse_version}%{?mga_version}%{?mdkversion} +Requires: typelib(cairo) typelib(GLib) typelib(DBus) typelib(DBusGLib) typelib(GObject) typelib(Gdk) typelib(GdkPixbuf) typelib(Gio) typelib(Gtk) typelib(Poppler) typelib(Gst) typelib(GstAllocators) typelib(GstApp) typelib(GstAudio) typelib(GstVideo) typelib(GstGL) +Recommends: typelib(GstMpegts) typelib(GstWebRTC) typelib(GstBadAudio) typelib(GstCodecs) +%endif +BuildRequires: python3-setuptools >= 40.8.0, python3-wheel +Requires: gobject-introspection %{py3_dist watchdog} +Requires: python(abi) >= 3.4 + +%description +# ![Pympress logo](https://raw.githubusercontent.com/Cimbali/pympress/master/pympress/share/pixmaps/pympress-32.png) What is Pympress? + +Pympress is a PDF presentation tool designed for dual-screen setups such as presentations and public talks. +Highly configurable, fully-featured, and portable + +It comes with many great features ([more below](#functionalities)): +- supports embedded gifs (out of the box), videos, and audios (with VLC or Gstreamer integration) +- text annotations displayed in the presenter window +- natively supports beamer's *notes on second screen*, as well as Libreoffice notes pages! + +Pympress is a free software, distributed under the terms of the GPL license (version 2 or, at your option, any later version). + +Pympress was originally created and maintained by [Schnouki](https://github.com/Schnouki), on [his repo](https://github.com/Schnouki/pympress). + +Here is what the 2 screen setup looks like, with a big notes slide next to 2 small slides (current and next) on the presenter side: +![A screenshot with Pympress’ 2 screens](https://pympress.github.io/resources/pympress-screenshot.png) + +# Usage + +## Opening a file +Simply start Pympress and it will ask you what file you want to open. +You can also start pympress from the command line with a file to open like so: +`pympress slides.pdf` +or +`python3 -m pympress slides.pdf` + +## Functionalities + +All functionalities are available from the menus of the window with slide previews. Don't be afraid to experiment with them! + +Keyboard shortcuts are also listed in these menus. Some more usual shortcuts are often available, for example `Ctrl`+`L`, and `F11` also toggle fullscreen, though the main shortcut is just `F`. + +A few of the fancier functionalities are listed here: +- **Two-screen display**: See on your laptop or tablet display the current slide, the next slide, the talk time and wall-clock time, and annotations (either PDF annotations, beamer notes on second slide, or Libreoffice notes pages). + The position of the beamer or Libreoffice notes in the slide is detected automatically and can be overridden via a menu option. + + If you do not want to use second-slide beamer notes but prefer to have notes on their own pages, you can enable auto-detection of these notes. + Use the following snippet that prefixes the page labels with `notes:` on notes pages: + ```latex + \addtobeamertemplate{note page}{}{\thispdfpagelabel{notes:\insertframenumber}} + ``` +- **Media support**: supports playing video, audio, and gif files embedded in (or linked from) the PDF file, with optional start/end times and looping. +- **Highlight mode**: Allows one to draw freehand on the slide currently on screen. +- **Go To Slide**: To jump to a selected slide without flashing through the whole presentation on the projector, press `G` or click the "current slide" box. + Using `J` or clicking the slide label will allow you to navigate slide labels instead of page numbers, useful e.g. for multi-page slides from beamer `\pause`. + + A spin box will appear, and you will be able to navigate through your slides in the presenter window only by scrolling your mouse, with the `Home`/`Up`/`Down`/`End` keys, + with the + and - buttons of the spin box, or simply by typing in the number of the slide. Press `Enter` to validate going to the new slide or `Esc` to cancel. + +- **Deck Overview**: Pressing `D` will open an overview of your whole slide deck, and any slide can be opened from can simply clicking it. +- **Software pointer**: Clicking on the slide (in either window) while holding `ctrl` down will display a software laser pointer on the slide. Or press `L` to permanently switch on the laser pointer. +- **Talk time breakdown**: The `Presentation > Timing Breakdown` menu item displays a breakdown of how much time was spent on each slide, with a hierarchical breakdown per chapters/sections/etc. if available in the PDF. +- **Automatic file reloading**: If the file is modified, pympress will reload it (and preserve the current slide, current time, etc.) +- **Big button mode**: Add big buttons (duh) for touch displays. +- **Swap screens**: If Pympress mixed up which screen is the projector and which is not, press `S` +- **Automatic full screen**: pympress will automatically put the content window fullscreen on your non-primay screen when: + - connecting a second screen, + - extending your desktop to a second screen that was mirroring your main screen, + - when starting pympress on a two-screen display. + To disable this behaviour, untick “Content fullscreen” under the “Starting configuration” menu. +- **Estimated talk time**: Click the `Time estimation` box and set your planned talk duration. The color will allow you to see at a glance how much time you have left. +- **Adjust screen centering**: If your slides' form factor doesn't fit the projectors' and you don't want the slide centered in the window, use the "Screen Center" option in the "Presentation" menu. +- **Resize Current/Next slide**: You can drag the bar between both slides on the Presenter window to adjust their relative sizes to your liking. +- **Caching**: For efficiency, Pympress caches rendered pages (up to 200 by default). If this is too memory consuming for you, you can change this number in the configuration file. +- **Configurability**: Your preferences are saved in a configuration file, and many options are accessible there directly. These include: + - Customisable key bindings (or shortcuts), + - Configurable layout of the presenter window, with 1 to 16 next slides preview + - and many more. + + See the [configuration file documentation](docs/options.md) for more details, +- **Editable PDF annotations**: Annotations can be added, removed, or changed, and the modified PDF files can be saved +- **Automatic next slide and looping** + +## Command line arguments + +- `-h, --help`: Shows a list of all command line arguments. +- `-t mm[:ss], --talk-time=mm[:ss]`: The estimated (intended) talk time in minutes and optionally seconds. +- `-n position, --notes=position`: Set the position of notes on the pdf page (none, left, right, top, or bottom). Overrides the detection from the file. +- `--log=level`: Set level of verbosity in log file (DEBUG, INFO, WARNING, ERROR). + +## Media and autoplay + +To enable media playback, you need to have either: +- Gstreamer installed (enabled by default), with plugins gstreamer-good/-bad/-ugly based on which codecs you need, or +- VLC installed (and the python-vlc module), with `enabled = on` under the `[vlc]` section of your config file. + +On macOS, issues with the gstreamer brew formula may require users to set `GST_PLUGIN_SYSTEM_PATH` manually. For default homebrew configurations the value should be `/opt/homebrew/lib/gstreamer-1.0/`. Make sure to set this environmental variable globally, or pympress might not pick it up. + +To produce PDFs with media inclusion, the ideal method is to use beamer’s multimedia package, always with `\movie`: + +```latex +\documentclass{beamer} +\usepackage{multimedia} + +\begin{frame}{Just a mp4 here} + \centering + \movie[width=0.3\textwidth]{\includegraphics[width=0.9\textwidth]{frame1.png}}{movie.mp4} + + \movie[width=0.3\textwidth]{}{animation.gif} + + \movie[width=0.3\textwidth]{}{ding.ogg} +\end{frame} +``` + +If you desire autoplay, ensure you have pympress ≥ 1.7.0 and poppler ≥ 21.04, and use the `movie15` package as follows: + +```latex +\documentclass{beamer} +\usepackage{movie15} +\begin{document} + +\begin{frame} + \begin{center} + \includemovie[attach=false,autoplay,text={%% + \includegraphics{files/mailto.png}%% + }]{0.4\linewidth}{0.3\linewidth}{files/random.mpg} + \end{center} +\end{frame} + +\end{document} +``` + +# Dependencies + +Pympress relies on: +* Python (version ≥ 3.4, python 2.7 is supported only until pympress 1.5.1, and 3.x < 3.4 until v1.6.4). +* [Poppler](http://poppler.freedesktop.org/), the PDF rendering library. +* [Gtk+ 3](http://www.gtk.org/), a toolkit for creating graphical user interfaces, and [its dependencies](https://www.gtk.org/overview.php), specifically: + * [Cairo](https://www.cairographics.org/) (and python bindings for cairo), the graphics library which is used to pre-render and draw over PDF pages. + * Gdk, a lower-level graphics library to handle icons. +* [PyGi, the python bindings for Gtk+3](https://wiki.gnome.org/Projects/PyGObject). PyGi is also known as *pygobject3*, just *pygobject* or *python3-gi*. + * Introspection bindings for poppler may be shipped separately, ensure you have those as well (`typelib-1_0-Poppler-0_18` on OpenSUSE, `gir1.2-poppler-0.18` on Ubuntu) +* optionally [VLC](https://www.videolan.org/vlc/), to play videos (with the same bitness as Python) + and the [python-vlc](https://pypi.org/project/python-vlc/) bindings. +* optionally Gstreamer to play videos (which is a Gtk library) + +### On linux platforms +The dependencies are often installed by default, or easily available through your package or software manager. +For example, on ubuntu, you can run the following as root to make sure you have all the prerequisites *assuming you use python3*: + +```sh +apt-get install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gi python3-cairo python3-gi-cairo gobject-introspection libgirepository-1.0-1 libgirepository1.0-dev gir1.2-gtk-3.0 gir1.2-poppler-0.18 +``` + +Different distributions might have different package naming conventions, for example the equivalent on OpenSUSE would be: + +```sh +zypper install python3 python3-pip libgtk-3-0 libpoppler-glib8 libcairo2 python3-gobject python3-gobject-Gdk python3-cairo python3-gobject-cairo typelib-1_0-GdkPixbuf-2_0 typelib-1_0-Gtk-3_0 typelib-1_0-Poppler-0_18 +``` + +On CentOS/RHEL/Fedora the dependencies would be: + +```sh +yum install python36 python3-pip gtk3 poppler-glib cairo gdk-pixbuf2 python3-gobject python3-cairo +``` + +And on Arch Linux: + +```sh +pacman -S --needed python python-pip gtk3 poppler cairo gobject-introspection poppler-glib python-gobject gst-plugin-gtk +``` + + +### On macOS + +Dependencies can be installed using [Homebrew](https://brew.sh/): + +```sh +brew install --only-dependencies pympress +``` + +### On windows +The [binary installer for windows](#installing-) comes with pympress and all its dependencies packaged. + +Alternately, in order to install from pypi or from source on windows, there are two ways to get the dependencies: + +1. using MSYS2 (replace x86_64 with i686 if you're using a 32 bit machine). + + **Warning:** this can take a substantial amount of disk size as it requires a full software distribution and building platform. + + ```sh + pacman -S --needed mingw-w64-x86_64-gtk3 mingw-w64-x86_64-cairo mingw-w64-x86_64-poppler mingw-w64-x86_64-python3 mingw-w64-x86_64-vlc python3-pip mingw-w64-x86_64-python3-pip mingw-w64-x86_64-python3-gobject mingw-w64-x86_64-python3-cairo + ``` + + This is also the strategy used to automate [builds on appveyor](https://github.com/Cimbali/pympress/tree/master/scripts/build_msi_mingw.sh). + +2. Using PyGobjectWin32. *Be sure to check the supported Python versions (up to 3.4 at the time of writing)*, they appear in the FEATURES list in the linked page. + - Install native [python for windows](https://www.python.org/downloads/windows/) + - Get GTK+3, Poppler and their python bindings by executing [the PyGi installer](https://sourceforge.net/projects/pygobjectwin32/). Be sure to tick all the necessary dependencies in the installer (Poppler, Cairo, Gdk-Pixbuf). + +Alternately, you can build your Gtk+3 stack from source using MSVC, see [the Gnome wiki](https://wiki.gnome.org/Projects/GTK+/Win32/MSVCCompilationOfGTKStack) and [this python script that compiles the whole Gtk+3 stack](https://github.com/wingtk/gvsbuild/). +This strategy has not been used successfully yet, due to problems building Poppler with its introspection bidings (i.e. typelib) − see [#109](https://github.com/Cimbali/pympress/issues/109). + +# Contributing + +Feel free to clone this repo and use it, modify it, redistribute it, etc, under the GPLv2+. +A [number of contributors](https://github.com/Cimbali/pympress/graphs/contributors) have taken part in the development of pympress and submitted pull requests to improve it. + +**Be respectful of everyone and keep this community friendly, welcoming, and harrasment-free. +Abusive behaviour will not be tolerated, and can be reported by email at me@cimba.li − wrongdoers may be permanently banned.** + +Pympress has inline sphinx documentation ([Google style](http://www.sphinx-doc.org/en/latest/ext/example_google.html), contains rst syntax), and the [docs generated from it are hosted on the github pages of this repo](https://pympress.github.io/). + +## Translations + +![Chinese (simplified)](https://img.shields.io/poeditor/progress/301055/zh-Hans?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%A8%%F0%%9F%%87%%B3%%20Chinese%%20%%28simplified%%29) +![Chinese (traditional)](https://img.shields.io/poeditor/progress/301055/zh-Hant?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%A8%%F0%%9F%%87%%B3%%20Chinese%%20%%28traditional%%29) +![Czech](https://img.shields.io/poeditor/progress/301055/cs?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%A8%%F0%%9F%%87%%BF%%20Czech) +![Hindi](https://img.shields.io/poeditor/progress/301055/hi?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%AE%%F0%%9F%%87%%B3%%20Hindi) +![Italian](https://img.shields.io/poeditor/progress/301055/it?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%AE%%F0%%9F%%87%%B9%%20Italian) +![Japanese](https://img.shields.io/poeditor/progress/301055/ja?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%AF%%F0%%9F%%87%%B5%%20Japanese) +![Polish](https://img.shields.io/poeditor/progress/301055/pl?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%B5%%F0%%9F%%87%%B1%%20Polish) +![French](https://img.shields.io/poeditor/progress/301055/fr?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%AB%%F0%%9F%%87%%B7%%20French) +![German](https://img.shields.io/poeditor/progress/301055/de?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%A9%%F0%%9F%%87%%AA%%20German) +![Spanish](https://img.shields.io/poeditor/progress/301055/es?token=7a666b44c0985d16a7b59748f488275c&label=%%F0%%9F%%87%%AA%%F0%%9F%%87%%B8%%20Spanish) + + +We thank the many contributors of translations: +Agnieszka, +atsuyaw, +Cherrywoods, +Dongwang, +Estel-f, +Fabio Pagnotta, +Ferdinand Fichtner, +Frederik. blome, +FriedrichFröbel, +He. yifan. xs, +Jaroslav Svoboda, +Jeertmans, +Karen Zhang, +Kristýna, +Leonvincenterd, +LogCreative, +Lorenzo. pacchiardi, +Luis Sibaja, +Marcin Dohnalik, +marquitul, +Morfit, +Mzn, +Nico, +Ogawa, +Paul, +Pierre BERTHOU, +polaksta, +Saulpierotti, +Shebangmed, +susobaco, +Tapia, +Tejas, +Timo Zhang, +Tkoyama010, +Toton95, +Vojta Netrh, +Vulpeculus, +and Cimbali. + +If you also want to add or contribute to a translation, check [pympress’ page on POEditor](https://poeditor.com/join/project/nKfRxeN8pS). +Note that old strings are kept and tagged `removed`, to give context and keep continuity between translations of succcessive versions. +This means `removed` strings are unused and do not need translating. + +## Packages + +Official releases are made to [PyPI](https://pypi.org/) and with [github releases](https://github.com/Cimbali/pympress/releases). +The community maintains a number of other packages or recipes to install pympress (see [Install section](#installing-)). Any additions welcome. + + + + +%prep +%setup -n pympress-1.8.1 + +%build +%py3_build + +%install +%py3_install + +echo %{python3_sitelib}/pympress > INSTALLED_FILES +echo %{python3_sitelib}/pympress-1.8.1-py%{python3_version}.egg-info >> INSTALLED_FILES + + +find "%{buildroot}%{_prefix}" -wholename "%{buildroot}%{python3_sitelib}" -prune -o -name 'pympress*' -printf '%{_prefix}/%%P\n' -prune >> INSTALLED_FILES +for f in pympress; do chmod 0755 "%{buildroot}%{_bindir}/$f"; echo "%{_bindir}/$f"; done | (grep -vxFf INSTALLED_FILES || :) >> INSTALLED_FILES + +%find_lang pympress && cat pympress.lang >> INSTALLED_FILES || : +find "%{buildroot}%{_prefix}" -wholename "%{buildroot}%{python3_sitelib}" -prune -o -name 'io.github.pympress.*' -printf '%{_prefix}/%%P\n' -prune >> INSTALLED_FILES + +%post +if [ $1 -gt 1 ]; then +find "%{python3_sitelib}" -maxdepth 1 -name 'pympress-1.5.*' -print0 | xargs -0 --no-run-if-empty rm -r +fi + +%files -f INSTALLED_FILES + +%license LICENSE.txt + +%defattr(-,root,root) + +%changelog +* Fri May 26 2023 wangtaozhi - 1.8.1-1 +- Package init