El Gantt creates a Gantt calendar from your orgmode files. Block entries into the calendar are set using tags, and rows are designated by either categories or tags.
I am not a programmer, nor do I pretend to be one. This is designed to be a PROTOTYPE. It is guaranteed that you will encounter errors and problems trying to use this package. I have written this to the point where it works for me, and I know the quirks that cause problems enough to avoid them.
The code you will encounter is awful. I learned elisp while writing this package. I worked in very short bursts while doing my real job (lawyer). If it seemed to work, I used it.
I do not have time to work on this! I am hoping this will inspire someone to re-write this from scratch.
This should work with the sample.org
file that is in the TEST directory. To use it, you’ll have change line 180 so that org-map-entries
points to the sample file rather than using your agenda
files.
When I say I learned elisp while writing this, I mean that literally. I did not know anything, and so this is 100% amateur hackery.
This system operatese on tags or categories.
The default to use categories, which are set in a property drawer. This approach works best if your org file is heirarchical. For example
* Justin
:PROPERTIES:
:CATEGORY: Justin
:END:
** TODO Cut the grass
<2019-01-10 Thu>
** TODO mow the lawn
<2019-02-12 Tue>
** TODO submit TPS reports
DEADLINE: <2019-04-02 Tue>
In this example, all three tasks would be displayed in a row labeled “Justin,” since the CATEGORY property is inherited.
To add another row, start a new category:
* Juanita
:PROPERTIES:
:CATEGORY: Juanita
:END:
** TODO sharpen knives
<2019-07-25 Thu>
** TODO submit thesis for intial review
DEADLINE: <2019-09-08 Sun>
This will produce the following:
You can also use hashtags. To to this, set elgantt/use-hashtag
to non-nil. A tag that starts with a #
will substitute for the category.
The benefit of hashtags is that your file need not be hierarchical. For example, the following will pick up the take out the garbage
task, and put it on the proper line for Justinia. (Note the take that is marked on July 30.)
* Justin :#Justinia:
** TODO Cut the grass
<2019-01-10 Thu>
** TODO mow the lawn
<2019-02-12 Tue>
** TODO submit TPS reports
DEADLINE: <2019-04-02 Tue>
* Juanita :#Juanitan:
** TODO sharpen knives
<2019-07-25 Thu>
** TODO submit thesis for intial review
DEADLINE: <2019-09-08 Sun>
* An unrelated heading
** TODO take out the garbage :#Justinia:
<2019-07-30 Tue>
There are two ways to display a block of time
When using this method, the text of the heading of the start
tag is irrelevant.
* Justin
:PROPERTIES:
:CATEGORY: Justin
:END:
** TODO Cut the grass
<2019-01-10 Thu>
** TODO mow the lawn
<2019-02-12 Tue>
** start TPS reports :TPS_start:
<2019-02-19 Tue>
** TODO submit TPS reports :TPS_end:
DEADLINE: <2019-04-02 Tue>
You can also designate a block of time by adding a time range and using the _block
tag:
* Justin
:PROPERTIES:
:CATEGORY: Justin
:END:
** TODO Cut the grass
<2019-01-10 Thu>
** TODO mow the lawn
<2019-02-12 Tue>
** start TPS reports :TPS_start:
<2019-02-19 Tue>
** TODO submit TPS reports :TPS_end:
DEADLINE: <2019-04-02 Tue>
* Juanita
:PROPERTIES:
:CATEGORY: Juanita
:END:
** out of town :vacation_block:
<2019-03-01 Fri>--<2019-04-30 Tue>
** TODO sharpen knives
<2019-07-25 Thu>
** TODO submit thesis for intial review
DEADLINE: <2019-09-08 Sun>
The echo area will display the name of the heading, and the headline text at the point. For example, in the above calendar if the point was on Justin and April 2, the echo area shows:
Usual emacs keybindings, except:
Key | Command |
---|---|
space | Jump to point in org file |
Return | Open agenda for the date at point |
b, f | Jump to next entry on line |
I am pretty sure there are other features, but I have forgotten them due to the lag between when I stopped working on this and when I uploaded it.