home

My NixOS systems configurations.
Log | Files | Refs | LICENSE

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