+
Skip to content

kn66/pomo-cat.el

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Overview

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.

Motivation

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.”

Features

  • 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

Screenshots

  • (GUI) Posframe - Overlay Display

    ./screenshots/gui-posframe-ascii.png

  • (Terminal) Popon - Terminal Display

    ./screenshots/terminal-popon.png

  • (GUI) Posframe + Custom Image

    ./screenshots/gui-posframe-image.png

  • (GUI) Dedicated Frame - Independent Window

    ./screenshots/gui-dedicated-frame.png

Installation

The package is available on MELPA. Dependencies include posframe and popon.

(use-package pomo-cat
  :ensure t)

Usage

Quick Start

;; 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

Commands

`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

Display Methods Explained

Dedicated Frame

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)

Posframe (GUI Overlay)

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

Popon (Terminal)

Shows a popup in terminal Emacs:

  • ASCII art display in text-based environments
  • Requires the `popon` package
  • Ideal for terminal-only workflows

Customization

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!")
    

Dependencies

Note: The dedicated frame feature requires no external dependencies—it uses only built-in Emacs functions.

Advanced Usage

Dedicated Frame Features

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

Multi-Monitor Support

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

Integration with Window Managers

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

Troubleshooting

Display Issues

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)

Focus Problems

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)

License

MIT License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载