]>
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
: