No description
Find a file
2021-11-04 22:30:37 +03:00
img docs: more docs & screenshot 2021-11-04 22:30:37 +03:00
.gitignore initial commit 2021-11-03 22:02:06 +03:00
Cask initial commit 2021-11-03 22:02:06 +03:00
LICENSE initial commit 2021-11-03 22:02:06 +03:00
pomm.el docs: more docs & screenshot 2021-11-04 22:30:37 +03:00
README.org docs: more docs & screenshot 2021-11-04 22:30:37 +03:00

Yet another implementation of a pomodoro timer for Emacs.

/hiro/pomm.el/media/commit/e290e28d995ceb3781dd44dc6c66c97ebb65e255/img/screenshot.png

This particular package features:

  • Managing the timer with the excellent transient.el.
  • Persistent state between Emacs sessions. The timer state isn't reset if you close Emacs. Also, the state file can be synchronized between machines.

None of the available alternatives were doing quite what I wanted, and the idea of the timer is quite simple, so I figured I'd implement one myself.

Setup

While the package is available only in this repository, one way to install is to clone the repository, add the package to the load-path and load it with require:

(require 'pomm)

My preferred way is use-package with straight.el:

(use-package pomm
  :straight (:host github :repo "SqrtMinusOne/pomm.el")
  :commands (pomm))

The package requires Emacs 27.1 because the time API of the previous versions is kinda crazy and 27.1 has time-convert.

Alerts

The package sends alerts via alert.el. The default style of alert is a plain message, but if you want an actual notification, set alert-default-style accordingly:

(setq alert-default-style 'libnotify)

Modeline

If you want the timer to display in the modeline, add the following code to your config:

(add-to-list 'mode-line-misc-info '(:eval pomm-current-mode-line-string))
(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
(add-hook 'pomm-on-tick-hook 'force-mode-line-update)
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string)
(add-hook 'pomm-on-status-changed-hook 'force-mode-line-update)

This is quite verbose, but as I don't use this feature, I want to avoid adding an unnecessary load to my Emacs.

Polybar module

If you want to display the Pomodoro status in something like polybar, you can add the following lines to your config:

(add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
(add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string)

Create a script like this:

if ps -e | grep emacs >> /dev/null; then
    emacsclient --eval "pomm-current-mode-line-string" | xargs echo -e
fi

And add a polybar module definition to your polybar config:

[module/pomm]
type = custom/script
exec = /home/pavel/bin/polybar/pomm.sh
interval = 1

State file location

The package stores the current state to a file by the path pomm-state-file-location, which is emacs.d/pomm by default. Set it to wherever you like.

Usage

Run M-x pomm to open the transient buffer.

The listed commands are rather self-descriptive and match the Pomodoro ideology.

The timer can have 3 states:

  • Stopped. Can be started with "s" or M-x pomm-start. A new iteration of the timer will be started.
  • Paused. Can be continuted with "s" / M-x pomm-start or stopped competely with "S" / M-x pomm-stop.
  • Running. Can be paused with "p" / M-x pomm-pause or stopped with "S" / M-x pomm-stop.

The state of the timer can be reset with "R" or M-x pomm-reset.

"U" updates the transient buffer. The update is manual because I didn't figure out how to automate this, and I think this is not really necessary.

Some settings are available in the transient buffer, but you can customize the relevant variables to make them permanent. Check M-x customize-group pomm for more information.

Alternatives

There is a number of packages with a similar purpose, here are some:

Be sure to check those out if this one doesn't quite fit your workflow!

P.S.

The package name is not an abbreviation. I just hope it doesn't mean something horrible in some language I don't know.