-
Notifications
You must be signed in to change notification settings - Fork 4
/
idle-org-agenda.el
95 lines (75 loc) · 3 KB
/
idle-org-agenda.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
;;; idle-org-agenda.el --- Shows your agenda when editor is idle.
;; Copyright (C) 2010 John Wiegley
;; Author: John Wiegley <jwiegley@gmail.com>
;; Maintainer: Enis Özgen <mail@enisozgen.com>
;; Created: 18 Mar 2010
;; Modified: 24 Dec 2018
;; Version: 1.0
;; Keywords: org, org-mode, org-agenda, calendar
;; URL: https://github.com/enisozgen/idle-org-agenda
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 3, or (at
;; your option) any later version.
;; This program is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; Basically, if you don't touch Emacs `idle-org-agenda' will display your
;; org-agenda after certain time.
;; That can be useful to remember tasks after come back to work.
;; This project is comes from John Wiegley's mail at the gmane mailing list
;; http://article.gmane.org/gmane.emacs.orgmode/23047
;;
;; Please see README.md from the same repository for documentation.
;;; Code:
(require 'org-agenda)
(defgroup idle-org nil
"Tool that displays org-agenda when emacs is idle"
:group 'org-agenda)
(defcustom idle-org-agenda-interval 300
"Period of idle time period to run functions."
:type 'integer
:group 'idle-org-agenda)
(defcustom idle-org-agenda-key "a"
"Org-agenda key to choose spesific agenda."
:type 'string
:group 'idle-org-agenda)
(defun idle-org-agenda--jump-to-agenda ()
"Main functions show your defined agenda."
(let ((buf (get-buffer org-agenda-buffer-name))
wind)
(if buf
(if (setq wind (get-buffer-window buf))
(select-window wind)
(if (called-interactively-p)
(progn
(select-window (display-buffer buf t t))
(org-fit-window-to-buffer))
(with-selected-window (display-buffer buf)
(org-fit-window-to-buffer))))
(org-agenda nil idle-org-agenda-key))))
(defun idle-org-agenda--stop ()
"Stop idle-org-agenda."
(cancel-function-timers 'idle-org-agenda--jump-to-agenda))
(defun idle-org-agenda--start ()
"Start idle-org-agenda."
(run-with-idle-timer idle-org-agenda-interval t 'idle-org-agenda--jump-to-agenda))
(define-minor-mode idle-org-agenda-mode
"Toggle `idle-org-agenda-mode'
When it's enabled. If you don't touch emacs, after certain time emacs will show
your org-agenda"
nil
:lighter ""
:global t
:require 'idle-org-agenda
(if idle-org-agenda-mode
(idle-org-agenda--start)
(idle-org-agenda--stop)))
(provide 'idle-org-agenda)
;;; idle-org-agenda.el ends here