290c970b56155a692113558ce51084af875bb7a5
[worg.git] / users / org-effectiveness.el
1 ;;; org-effectiveness.el --- Measuring the personal effectiveness
2
3 ;; Copyright (C) 2013 Free Software Foundation, Inc.
4
5 ;; Author: David Arroyo Men√©ndez <davidam@es.gnu.org>
6 ;; Keywords: effectiveness, plot
7 ;; Homepage: http://orgmode.org
8 ;;
9 ;; This file is not part of GNU Emacs, yet.
10 ;;
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation, either version 3 of the License, or
14 ;; (at your option) any later version.
15
16 ;; GNU Emacs is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
23 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
24 ;;
25 ;;; Commentary:
26
27 ;; This file implements functions to measure the effectiveness in org.
28 ;; Org-mode doesn't load this module by default - if this is not what
29 ;; you want, configure the variable `org-modules'. Thanks to #emacs-es
30 ;; irc channel for your support.
31
32 ;;; Code:
33
34 (defun org-count-keyword(keyword)
35   "Print a message with the number of keyword outline in the current buffer"
36   (interactive "sKeyword: ")
37   (goto-char (point-min))
38   (message "Number of %s: %d" keyword (count-matches (concat "* " keyword)))
39   (goto-char (mark)))
40
41 (defun org-count-todo()
42   "Print a message with the number of todo tasks in the current buffer"
43   (interactive)
44   (goto-char (point-min))
45   (message "Number of TODO: %d" (count-matches "* TODO"))
46   (goto-char (mark)))
47                                                                              
48 (defun org-count-done()
49   "Print a message with the number of done tasks in the current buffer"
50   (interactive)
51   (goto-char (point-min))
52   (message "Number of DONE: %d" (count-matches "* DONE"))
53   (goto-char (mark)))
54
55 (defun org-count-canceled()
56   "Print a message with the number of canceled tasks in the current buffer"
57   (interactive)
58   (goto-char (point-min))
59   (message "Number of Canceled: %d" (count-matches "* CANCELED"))
60   (goto-char (mark)))
61
62 (defun org-effectiveness()
63   "Returns the effectiveness in the current org file"
64   (interactive)
65   (goto-char (point-min))
66   (setq done (float (count-matches "* DONE")))
67   (setq canc (float (count-matches "* CANCELED")))
68   (setq effectiveness (* 100 (/ done (+ done canc))))
69   (message "Effectiveness: %f" effectiveness)
70   (goto-char (mark)))
71
72 (defun org-keywords-in-date(keyword date)
73   (interactive "sKeyword: \nsDate: " keyword date)
74   (setq count (count-matches (concat keyword ".*\n.*" date)))
75   (message (concat "%sS: %d" keyword count)))
76
77 (defun org-dones-in-date(date)
78    (interactive "sGive me a date: " date)
79    (setq count (count-matches (concat "DONE.*\n.*" date)))
80    (message "DONES: %d" count))
81
82 (defun org-todos-in-date(date)
83    (interactive "sGive me a date: " date)
84    (setq count (count-matches (concat "TODO.*\n.*" date)))
85    (message "TODOS: %d" count))
86
87 (defun org-canceled-in-date(date)
88    (interactive "sGive me a date: " date)
89    (setq count (count-matches (concat "TODO.*\n.*" date)))
90    (message "CANCELEDS: %d" count))
91
92 (defun org-effectiveness-in-date(date)
93   (interactive "sGive me a date: " date)
94   (goto-char (point-min))
95 ;;  (message "Tareas Hechas: %d" (float (count-matches "TODO.*\n.*11-16")))
96   (setq done (float (count-matches (concat "* DONE.*\n.*" date))))
97   (setq canc (float (count-matches (concat "* CANCELED.*\n.*" date))))
98   (if (and (= done canc) (zerop done))
99       (setq effectiveness 0)
100     (setq effectiveness (* 100 (/ done (+ done canc)))))
101   (message "Effectiveness: %d " effectiveness)
102   (goto-char (mark)))
103
104 (provide 'org-effectiveness)