about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--configs/shared/.emacs.d/init.el1
-rw-r--r--configs/shared/.emacs.d/wpc/alarm.el85
-rw-r--r--configs/shared/.emacs.d/wpc/productivity-timer.el22
3 files changed, 86 insertions, 22 deletions
diff --git a/configs/shared/.emacs.d/init.el b/configs/shared/.emacs.d/init.el
index 0d2bec7645a5..c5657c909027 100644
--- a/configs/shared/.emacs.d/init.el
+++ b/configs/shared/.emacs.d/init.el
@@ -28,6 +28,7 @@
 ;; TODO: Consider renaming entr.el.
 (require 'entr)
 (require 'scrot)
+(require 'alarm)
 
 ;; TODO: Reconcile kbd.el, keybindings.el, wpc-keybindings.el, keyboard.el.
 (require 'keybindings)
diff --git a/configs/shared/.emacs.d/wpc/alarm.el b/configs/shared/.emacs.d/wpc/alarm.el
new file mode 100644
index 000000000000..472101ebfb7a
--- /dev/null
+++ b/configs/shared/.emacs.d/wpc/alarm.el
@@ -0,0 +1,85 @@
+;;; alarm.el --- Commonly used intervals for setting alarms while working -*- lexical-binding: t -*-
+
+;; Author: William Carroll <wpcarro@gmail.com>
+;; Version: 0.0.1
+;; Package-Requires: ((emacs "24.1") (ivy "0.13.0"))
+
+;; This file is NOT part of GNU Emacs.
+
+;; The MIT License (MIT)
+;;
+;; Copyright (c) 2016 Al Scott
+;;
+;; Permission is hereby granted, free of charge, to any person obtaining a copy
+;; of this software and associated documentation files (the "Software"), to deal
+;; in the Software without restriction, including without limitation the rights
+;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+;; copies of the Software, and to permit persons to whom the Software is
+;; furnished to do so, subject to the following conditions:
+;;
+;; The above copyright notice and this permission notice shall be included in all
+;; copies or substantial portions of the Software.
+;;
+;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+;; SOFTWARE.
+
+;;; Commentary:
+;; Select common timer intervals with ivy and use `notifications-notify' to
+;; display a message when the timer completes.
+
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Dependencies
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(require 'ivy)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Library
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(defgroup alarm nil
+  "Schedule alarms to focus on a task."
+  :group 'emacs)
+
+(defcustom alarm-intervals
+  '(("1 minute" . 1)
+    ("2 minutes" . 2)
+    ("3 minutes" . 3)
+    ("4 minutes" . 4)
+    ("5 minutes" . 5)
+    ("10 minutes" . 10)
+    ("15 minutes" . 15)
+    ("20 minutes" . 20)
+    ("30 minutes" . 30)
+    ("45 minutes" . 45)
+    ("1 hour" . 60)
+    ("2 hours" . 120))
+  "Commonly used intervals for timer amounts in minutes."
+  :type '(alist :key-type string :value-type integer)
+  :group 'alarm)
+
+(defun alarm-ivy-schedule ()
+  "Use ivy to select and schedule an alarm for a given set of time intervals."
+  (interactive)
+  (let ((ivy-sort-functions-alist nil))
+    (ivy-read "Set timer for: "
+              alarm/intervals
+              :action (lambda (cell)
+                        (run-at-time
+                         (format "%s minutes" (cdr cell))
+                         nil
+                         (lambda ()
+                           (notifications-notify
+                            :title "productivity.el"
+                            :body (format "%s timer complete." (car cell)))))
+                        (message (format "%s timer scheduled." (car cell)))))))
+
+(provide 'alarm)
+;;; alarm.el ends here
diff --git a/configs/shared/.emacs.d/wpc/productivity-timer.el b/configs/shared/.emacs.d/wpc/productivity-timer.el
deleted file mode 100644
index 6d421dd69ed1..000000000000
--- a/configs/shared/.emacs.d/wpc/productivity-timer.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;;; productivity-timer.el --- Commonly used intervals for setting alarms while working -*- lexical-binding: t -*-
-;; Author: William Carroll <wpcarro@gmail.com>
-
-;;; Commentary:
-;; Select common timer intervals with dmenu and play an alarm sound when
-;; finished.
-;;
-;; This is heavily inspired by iOS's timer feature.
-
-
-;;; Code:
-
-(defconst productivity-timer/intervals
-  '(1 2 3 4 5 10 15 20 30 45 60 120)
-  "Commonly used intervals for timer amounts.")
-
-;; `sleep-for' doesn't seem to work.  Perhaps `sit-for' won't be any better.
-;; How can I use dunst to alert?
-;; `run-at-time' may be the most promising option
-
-(provide 'productivity-timer)
-;;; productivity-timer.el ends here