{"id":15630279,"url":"https://github.com/tatrix/pomidor","last_synced_at":"2025-07-19T10:07:40.280Z","repository":{"id":77895962,"uuid":"83997438","full_name":"TatriX/pomidor","owner":"TatriX","description":"Pomidor is a simple and cool pomodoro technique timer.","archived":false,"fork":false,"pushed_at":"2024-06-01T16:17:25.000Z","size":172,"stargazers_count":242,"open_issues_count":1,"forks_count":17,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-07-14T12:48:54.588Z","etag":null,"topics":["elisp","emacs","pomodoro","pomodoro-timer","productivity"],"latest_commit_sha":null,"homepage":"","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TatriX.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-05T19:48:39.000Z","updated_at":"2025-05-12T04:09:49.000Z","dependencies_parsed_at":"2024-08-05T06:14:51.624Z","dependency_job_id":null,"html_url":"https://github.com/TatriX/pomidor","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/TatriX/pomidor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TatriX%2Fpomidor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TatriX%2Fpomidor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TatriX%2Fpomidor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TatriX%2Fpomidor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TatriX","download_url":"https://codeload.github.com/TatriX/pomidor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TatriX%2Fpomidor/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265915142,"owners_count":23848491,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elisp","emacs","pomodoro","pomodoro-timer","productivity"],"created_at":"2024-10-03T10:31:15.780Z","updated_at":"2025-07-19T10:07:40.260Z","avatar_url":"https://github.com/TatriX.png","language":"Emacs Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pomidor [![MELPA](https://melpa.org/packages/pomidor-badge.svg)](https://melpa.org/#/pomidor)\n\nPomidor is a simple and cool [pomodoro technique](http://www.pomodorotechnique.com/) timer.\n\n![*pomidor* buffer](https://i.imgur.com/33A938J.png)\n\n## Installation\n\nIt's available on melpa:\n```\nM-x package-install pomidor\n```\n\nOr using [use-package](https://github.com/jwiegley/use-package) with global keybinding, disabled tick-tack sound and custom hook:\n```elisp\n(use-package pomidor\n  :bind ((\"\u003cf12\u003e\" . pomidor))\n  :config (setq pomidor-sound-tick nil\n                pomidor-sound-tack nil)\n  :hook (pomidor-mode . (lambda ()\n                          (display-line-numbers-mode -1) ; Emacs 26.1+\n                          (setq left-fringe-width 0 right-fringe-width 0)\n                          (setq left-margin-width 2 right-margin-width 0)\n                          ;; force fringe update\n                          (set-window-buffer nil (current-buffer)))))\n```\n\nOr clone the repo:\n```sh\ngit clone https://github.com/TatriX/pomidor ~/.emacs.d/pomidor\n```\nand add to your init file:\n```elisp\n(add-to-list 'load-path \"~/.emacs.d/pomidor/\")\n(require 'pomidor)\n\n```\n\n## Usage\n\nBind it to a key with the following command if you haven't done this with `use-package`:\n\n```elisp\n  (global-set-key (kbd \"\u003cf12\u003e\") #'pomidor)\n```\nOr run simply `M-x pomidor`\n\nWhen you start pomidor, you automatically begin your first\npomodoro. There is nothing to do at this point, except for work. You\ncan, of course, restart the pomodoro if you get distracted, but the\nprogram takes care of itself until the 25-minute mark is reached. At\nthis point the overwork period starts and lasts until you press\n`Space` to start break period.\n\nThen you can press `Space` (which asks for confirmation) or `Enter` to start a new period.\n\nAfter 5 minutes of break time, pomidor will start telling you that you\nshould finish your break. To snooze it just press `Space` and select\n`n`.\n\nThis cycle goes on forever.\n\nHowever, there are situations when you really cannot work in your next\npomidor session for a time hiatus, and you also do not want to lose\nthe track of what you already did.\n\nYou can use `h` (`pomidor-hold`) to put your current session on hold\nand when you want to get back to pomidor-land you use `H`\n(`pomidor-unhold`). The unhold function will create a new pomidor\nsession and you can continue the virtuous cycle.\n\n\n## History mode\n\nYou can save your pomodoro sessions in a file and compare your\nprogress through this methodology as time goes by.\n\nWhen you desire to save a session just do `M-x pomidor-save-session`,\nit will ask to close your pomidor and will save the current state to a\nfile defined by `pomidor-save-session-file` defaults to\n`~/.emacs.d/pomidor-sessions.json`.\n\nThe name of each session stored is the timestamp of the time you\nchoose to save the session.\n\nAfter that you can fire `M-x pomidor-history` to take a look at your\nsnapshots. You can press `n` (`pomidor-history-next`) or `p`\n(`pomidor-history-previous`) to navigate between the snapshots.\n\nCheck a demo of this feature at [here](https://youtu.be/BJTT7nILcsY).\n\n## Keybindings\n\n| Key   | Description             |\n|-------|-------------------------|\n| Enter | Start new pomodoro.     |\n| Space | Start a break.          |\n| R     | Resets the timer.       |\n| q     | Quit pomidor buffer.    |\n| Q     | Turns off pomidor.      |\n| h     | Put the session on hold |\n| H     | Resume on hold session  |\n\n\n## Customization\n\nYou can customize pomidor with `M-x customize-group RET pomidor` or just edit your `.emacs`.\n\nTo change timer duration:\n```elisp\n(setq pomidor-seconds (* 25 60)) ; 25 minutes for the work period\n(setq pomidor-break-seconds (* 5 60)) ; 5 minutes break time\n\n```\n\nTo change behavior of long breaks:\n``` elisp\n(setq pomidor-breaks-before-long 4) ; wait 4 short breaks before long break\n(setq pomidor-long-break-seconds (* 20 60)) ; 20 minutes long break time\n```\n\nTo disable or configure sounds:\n```elisp\n(setq pomidor-sound-tick nil ; nil to disable, defaults to `(expand-file-name (concat pomidor-dir \"tick.wav\"))`\n      pomidor-sound-tack nil ; \n      pomidor-sound-overwork (expand-file-name (concat pomidor-dir \"overwork.wav\"))\n\t  pomidor-sound-break-over (expand-file-name (concat (getenv \"HOME\") \"/Music/overwork.wav\")))\n```\n\nTo change appearance your can [(customize-face)](https://www.gnu.org/software/emacs/manual/html_node/emacs/Face-Customization.html), use your theme or use elisp:\n```elisp\n;; for a full list of available faces see `customize' or search for `defface' in the source code\n(set-face-attribute 'pomidor-break-face nil :foreground \"#00ff00\")\n(set-face-attribute 'pomidor-overwork-face nil :foreground \"#00abff\")\n(set-face-attribute 'pomidor-skip-face nil :foreground \"#abbac3\")\n(set-face-attribute 'pomidor-work-face nil :foreground \"#ff0000\")\n```\n\n## Sound\nIf your Emacs cannot play sounds you can provide your own function to do it:\n```elisp\n(setq pomidor-play-sound-file\n      (lambda (file)\n        (start-process \"my-pomidor-play-sound\"\n                       nil\n                       \"mplayer\"\n                       file)))\n```\n\n## Notifications\nBy default pomidor will show you an overwork notification once per minute.\nSee [alert](https://github.com/jwiegley/alert/) documentation to learn how to change alert settings.\n\nYou can change default notification style globally:\n```elisp\n(setq alert-default-style 'libnotify)\n;; or 'growl (see alert docs)\n```\n\nTo change notification you can set `pomidor-alert` variable (defaults to `pomidor-default-alert`):\n```elisp\n(setq pomidor-alert (lambda () (alert \"OMG!11\")))\n```\n\nAlso you can set `pomidor-update-hook` to do some work on every update.\n```elisp\n(defun my-pomidor-update-hook ()\n  (alert \"Zzz\"))\n\n(add-hook 'pomidor-update-hook #'my-pomidor-update-hook)\n```\n\nYou can adjust update interval by setting `pomidor-update-interval` variable\n```elisp\n(setq pomidor-update-interval 30) ; seconds\n```\n\n## Acknowledgments\nInspired by https://github.com/konr/tomatinho\n\nSounds from [freesound](http://www.freesound.org/people/InspectorJ/sounds/343130/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatrix%2Fpomidor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftatrix%2Fpomidor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftatrix%2Fpomidor/lists"}