pomo-cat.el
is a simple yet charming Pomodoro timer for Emacs.
Unlike many existing Pomodoro packages that rely on notifications,
mode-line displays, or logging, pomo-cat
places an adorable cat in the center
of your screen during breaks—either as an image, ASCII art, or in an independent window.
This playful approach helps you visually recognize rest periods and avoid overworking or skipping breaks due to overlooked alerts or distraction by timers.
Most existing Pomodoro timers for Emacs focus on features like:
- Desktop or mode-line notifications
- Logging work/break times
- Progress indicators
However, in actual use, we found:
- Notifications are easy to miss—especially when deeply focused.
- Mode-line timers divert attention unnecessarily.
- Logs are rarely reviewed.
Hence, the need for a visually engaging and unmistakable break indicator. This package was born to show a cat in the center of the screen during breaks, reminding you to truly “take a break.”
- Pomodoro timer with customizable durations
- Multiple display methods for break notifications:
- Independent window (dedicated Emacs frame) - visible even with other apps active
- GUI overlay (`posframe`) with optional cat images
- Terminal popup (`popon`) with ASCII art
- Fallback to message area
- Supports both short and long breaks
- Automatic center positioning on any screen size
- Normal window behavior - can be moved behind other windows
- Theme-aware colors that adapt to your Emacs configuration
- Lightweight and minimal, no persistent logging
- (GUI) Posframe - Overlay Display
- (Terminal) Popon - Terminal Display
- (GUI) Posframe + Custom Image
- (GUI) Dedicated Frame - Independent Window
The package is available on MELPA. Dependencies include posframe
and popon
.
(use-package pomo-cat
:ensure t)
;; Choose your preferred display method
(setq pomo-cat-display-method 'dedicated-frame) ; Independent window
;; (setq pomo-cat-display-method 'posframe) ; GUI overlay
;; (setq pomo-cat-display-method 'popon) ; Terminal popup
;; Start the timer
M-x pomo-cat-start
- `M-x pomo-cat-start`
- Start the Pomodoro timer
- `M-x pomo-cat-stop`
- Stop the timer and hide the cat
- `M-x pomo-cat-delay-break`
- Delay current break (during break periods)
- `M-x pomo-cat-stop-break`
- End current break immediately
Creates an independent Emacs window that:
- Appears in the center of your screen
- Remains visible even when other applications are active
- Behaves like a normal window (can be moved behind others with Alt+Tab)
- Perfect for multi-monitor setups and full-screen applications
- Uses only built-in Emacs functions (no external dependencies)
Displays an overlay within Emacs that:
- Shows on top of your current Emacs session
- Supports both ASCII art and custom images
- Requires the `posframe` package
- Best for single-monitor workflows
Shows a popup in terminal Emacs:
- ASCII art display in text-based environments
- Requires the `popon` package
- Ideal for terminal-only workflows
Use M-x customize-group RET pomo-cat RET
or set variables directly in your init file.
- `pomo-cat-work-duration-seconds`
-
Duration of a single Pomodoro work session, in seconds.
Default is 1500 seconds (25 minutes).
You can set it to a shorter value for testing, e.g.:
(setq pomo-cat-work-duration-seconds 60) ;; 1 minute work session
- `pomo-cat-break-duration-seconds`
- Duration of a short break after each work session, in seconds. Default is 300 seconds (5 minutes). These short breaks occur after each work cycle except the last one before a long break.
- `pomo-cat-long-break-duration-seconds`
- Duration of a long break (after multiple cycles), in seconds. Default is 1200 seconds (20 minutes). Useful for deeper rest after completing several Pomodoros.
- `pomo-cat-cycles-before-long-break`
-
Number of completed Pomodoro cycles before a long break is triggered.
Default is 4.
For example, with the default setting:
- You’ll work 4 times for 25 minutes
- Take 3 short breaks
- And then take a long break after the 4th cycle
- `pomo-cat-cat-image-path`
-
File path to a cat image (e.g., PNG) to display during breaks in GUI Emacs.
If this is nil or the image doesn’t exist, ASCII art will be shown instead.
Example:
(setq pomo-cat-cat-image-path "~/Pictures/cats/cute-cat.png")
- `pomo-cat-display-method`
-
Method used to show the cat on screen.
Available options:
- `’dedicated-frame`
- Creates an independent Emacs window
- `’posframe`
- Uses `posframe` for GUI overlay display with optional images
- `’popon` (default)
- Uses `popon` for terminal-based popup display
The display method automatically falls back to ASCII in message area if the selected method is unavailable.
;; Independent window visible with any application (setq pomo-cat-display-method 'dedicated-frame) ;; For overlay within Emacs (supports custom images) (setq pomo-cat-display-method 'posframe) ;; For terminal use (setq pomo-cat-display-method 'popon)
- `pomo-cat-get-focus`
-
Controls whether the break window receives focus when it appears.
- `nil` (default)
- Window appears but doesn’t steal focus (minimal interruption)
- `t`
- Window gets focus and brings Emacs to the front
;; Passive notification (default) (setq pomo-cat-get-focus nil) ;; Active notification (interrupts current work) (setq pomo-cat-get-focus t)
- `pomo-cat-ascii-cat`
-
A string of ASCII art to show when a cat image is not used or unavailable.
You can replace it with your own ASCII art:
(setq pomo-cat-ascii-cat " (=^・ω・^=) Take a break!")
Note: The dedicated frame feature requires no external dependencies—it uses only built-in Emacs functions.
The dedicated frame mode offers the most robust break notification experience:
;; Enable dedicated frame with optimal settings
(setq pomo-cat-display-method 'dedicated-frame
pomo-cat-get-focus nil) ; Non-intrusive notifications
;; The frame will:
;; - Appear in screen center automatically
;; - Be visible even with other apps active
;; - Allow normal window switching (Alt+Tab)
;; - Clean up automatically when break ends
The dedicated frame automatically adapts to your display configuration:
- Centers on your primary display
- Respects taskbars and system UI
- Works with various screen resolutions
- Supports multi-monitor workflows
Works seamlessly with different environments:
- Windows: Standard window controls and Alt+Tab
- macOS: Mission Control and Spaces compatibility
- Linux: GNOME, KDE, i3, and other window managers
If the cat doesn’t appear as expected:
;; Check your current display method
(message "Display method: %s" pomo-cat-display-method)
;; Verify dependencies are available
(message "Posframe available: %s" (featurep 'posframe))
(message "Popon available: %s" (featurep 'popon))
;; Test dedicated frame (no dependencies needed)
(setq pomo-cat-display-method 'dedicated-frame)
If windows behave unexpectedly:
;; Use passive notifications for minimal interruption
(setq pomo-cat-get-focus nil)
;; Or enable active notifications if you prefer
(setq pomo-cat-get-focus t)
MIT License.