]>
git.rmz.io Git - dotfiles.git/blob - bin/org-agenda
4 from os
import path
, get_terminal_size
6 from datetime
import date
8 # TODO: read org location from config
9 org_glob
= '~/org/**.org'
10 org_todos
= ['TODO', 'WAITING', 'NEXT']
11 org_dones
= ['DONE', 'CANCELLED']
14 def org_is_archived(root
):
15 return "ARCHIVE" in root
.tags
18 def org_is_overdue(node
, end
=None):
19 if not node
.scheduled
:
22 if node
.todo
in org_dones
:
29 end
= orgparse
.date
.OrgDate(date
.today())
31 r
= orgparse
.date
.OrgDate(0, end
)
32 return node
.scheduled
.has_overlap(r
)
35 def org_is_scheduled(node
: orgparse
.node
, start
=None, end
=None):
36 if not node
.scheduled
:
39 if node
.todo
in org_dones
:
42 if start
is None and end
is None:
46 start
= orgparse
.date
.OrgDate(0)
51 r
= orgparse
.date
.OrgDate(start
, end
)
52 return node
.scheduled
.has_overlap(r
)
55 def format_tags(tags
):
58 return "".join([":{}:".format(t
) for t
in tags
])
62 [f
, _
] = path
.splitext(path
.basename(n
.env
.filename
))
63 [cols
, rows
] = get_terminal_size()
65 wh
= min(50, cols
- wf
)
67 print("{:<{wf}}{:<{wh}}{:>{wt}}".format(f
+":", "{} {}".format(n
.todo
, n
.heading
)[:wh
], format_tags(n
.tags
),
75 for org_file
in glob(path
.expanduser(org_glob
)):
76 with open(org_file
) as f
:
77 env
= orgparse
.node
.OrgEnv(todos
=org_todos
, dones
=org_dones
, filename
=org_file
)
78 root
= orgparse
.load(f
, env
=env
)
79 # print(root.env.all_todo_keys)
81 if org_is_archived(node
):
83 if org_is_overdue(node
, date
.today()):
84 nodes_overdue
.append(node
)
85 elif org_is_scheduled(node
, date
.today()):
86 nodes_today
.append(node
)
88 for n
in nodes_overdue
: