org-focus.el (1856B)
1 ;; From http://www.howardism.org/Technical/Emacs/focused-work.html 2 ;; Write something a bit similar, but better ? 3 4 (defvar vde/focus-timer nil "A timer reference for the vde/focus functions") 5 6 (defun vde/focus-countdown-timer (minutes fun) 7 (let ((the-future (* minutes 60))) 8 (run-at-time the-future nil fun))) 9 10 (defun vde/focus-begin () 11 "Start a concerted, focused effort, ala Pomodoro Technique. 12 We first clock into the current org-mode header (or last one), 13 start some music to indicate we are working, and set a timer. 14 15 Call `ha-focus-break' when finished." 16 (interactive) 17 (vde/focus-countdown-timer 25 'vde/focus-break) 18 (vde/focus--command "playerctl play-pause") 19 (vde/focus--command "notify-send 'Let's focus.'") 20 (vde/focus--command "swaync-client -d") 21 (if (eq major-mode 'org-mode) 22 (org-clock-in) 23 (org-clock-in-last))) 24 25 (defun vde/focus-break () 26 "Stop the focused time by stopping the music. 27 This also starts another break timer, that calls 28 `ha-focus-break-over' when finished." 29 (interactive) 30 (vde/focus-countdown-timer 5 'vde/focus-break-over) 31 (vde/focus--command "swaync-client -d") 32 (vde/focus--command "notify-send 'Let's take a break.'") 33 (vde/focus--command "playerctl play-pause") 34 (org-clock-out) 35 (message "Time to take a break.")) 36 37 (defun vde/focus-break-over () 38 "Message me to know that the break time is over. Notice that 39 this doesn't start anything automatically, as I may have simply 40 wandered off." 41 (vde/focus--command "notify-send 'Break is over.'")) 42 43 (defun vde/focus--command (command) 44 "Runs COMMAND by passing to the `command' command asynchronously." 45 (async-start-process "focus-os" "zsh" 'vde/focus--command-callback "-c" command)) 46 47 (defun vde/focus--command-callback (proc) 48 "Asynchronously called when the `osascript' process finishes." 49 (message "Finished calling command."))