├── LICENSE
├── README.org
├── examples
└── examples.org
├── images
└── screenshots
│ ├── habit-statistics.png
│ ├── org-heatmap-habit-calendar.gif
│ └── org-heatmap-habit-overview.gif
└── org-heatmap.el
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.org:
--------------------------------------------------------------------------------
1 | #+TITLE: org-heatmap
2 |
3 | * Introduction
4 | :PROPERTIES:
5 | :TOC: ignore
6 | :END:
7 | Org-heatmap is an Emacs package for Org-mode users to keep track of their task
8 | consistency in a visual manner. It presents an overview heatmap on Org-mode
9 | agendas or Calendar, providing visual representation of task completions and
10 | task statistics.
11 | * Contents
12 | :PROPERTIES:
13 | :TOC: this
14 | :END:
15 | - [[#screenshots][Screenshots]]
16 | - [[#installation][Installation]]
17 | - [[#usage][Usage]]
18 | - [[#functions][Functions]]
19 | - [[#variables][Variables]]
20 | - [[#examples][Examples]]
21 | - [[#todos][TODOs]]
22 | * Screenshots
23 | :PROPERTIES:
24 | :TOC: 0
25 | :END:
26 | Show habit completion overview in org agenda buffer.
27 |
28 | [[images/screenshots/org-heatmap-habit-overview.gif]]
29 |
30 | Display habit heatmap in Calendar
31 |
32 | [[images/screenshots/org-heatmap-habit-calendar.gif]]
33 |
34 | Add habit statistics after habits: (current streak, max streak and total done number).
35 |
36 | [[images/screenshots/habit-statistics.png]]
37 | * Installation
38 | :PROPERTIES:
39 | :TOC: 0
40 | :END:
41 | You must also install these packages:
42 |
43 | + Emacs >= 28.2
44 | + =emacsql= >= 3.1.1
45 | + =org-mode= >= 9.6
46 |
47 | ps. I have not tested in the lower versions of the mentioned packages.
48 |
49 | Then put org-heatmap.el in your load-path, and eval:
50 | #+begin_src emacs-lisp
51 | (use-package org-habit
52 | :custom
53 | (org-habit-graph-column 1)
54 | (org-habit-preceding-days 10)
55 | (org-habit-following-days 1)
56 | (org-habit-show-habits-only-for-today nil))
57 |
58 | (use-package org-heatmap
59 | :init
60 | (add-to-list 'load-path "/path-to/emacsql/")
61 | (add-to-list 'load-path "/path-to/org-heatmap/")
62 | (require 'org-heatmap)
63 | :after (org)
64 | :custom
65 | (org-agenda-files '("/path-to/org-heatmap/examples/examples.org"))
66 | (org-heatmap-db-location "/path-to/org-heatmap/examples/org-heatmap.db")
67 | :config
68 | (org-heatmap-mode))
69 | #+end_src
70 | * Usage
71 | :PROPERTIES:
72 | :TOC: 1
73 | :END:
74 | ** Functions
75 |
76 | *Note*: When you run these functions for the first time, you may experience some
77 | lag (the lag time depends on the length of your habits record).
78 |
79 | - =org-heatmap-habit-draw-overview=
80 |
81 | Draw an overview heatmap for the habit at point. When your cursor is on a
82 | habit in =org-agenda-mode=, you can call this function or press =h= to generate a
83 | heatmap for the habit. Call this function or press =h= again will erase the
84 | heatmap.
85 |
86 | You can hover your mouse over a rectangle, and you will see the time you spent
87 | on the habit on that day. Clicking the rectangle will redirect you to an
88 | agenda view of that day.
89 |
90 |
91 | *Note*: This function uses =org-heatmap-rectangle= to draw heatmap, and for
92 | different fonts, the display effect may vary. The font used in the screenshots
93 | is =Cascadia Mono=. You can choose suitable characters based on the font you are
94 | using.
95 |
96 | - =org-heatmap-calendar=
97 |
98 | Display a three-month Gregorian calendar. Add highlights indicating the
99 | activities on the current calendar date.
100 |
101 | Whenever you complete a task (when a item is changed to DONE in org-mode.),
102 | the activity counter for the day will increase by one and update the database.
103 | You can use =org-heatmap-calendar= to generate a heatmap of your everyday
104 | activity, and use built-in functions such as =org-calendar-goto-agenda= to see
105 | details.
106 |
107 | - =org-heatmap-habit-calendar=
108 |
109 | Like =org-heatmap-calendar=, display a three-month Gregorian calendar for the
110 | habit at point.
111 |
112 | Add highlights indicating the times spent on the habit on the current calendar
113 | date.
114 |
115 | Whenever you complete a habit (when a item is changed to DONE in org-mode.),
116 | org-heatmap will record the time you spent on this habit today and write it to
117 | the database. You can use this command to generate a heatmap of your
118 | everyday time spent, and use built-in functions such as =org-calendar-goto-agenda=
119 | to see details.
120 |
121 | - =org-heatmap-calendar-query=
122 |
123 | In =Calendar-mode= with org-heatmap highlights, you can use this function (bound
124 | to =f= in =calendar-mode=) to get information about the activities on the current calendar date.
125 |
126 | When used with =org-heatmap-calendar=, it shows how many items are done on the
127 | current calendar date.
128 |
129 | When used with =org-heatmap-habit-calendar=, it shows how many times is spent on
130 | the habit on the current calendar date.
131 |
132 | - =org-heatmap-adjust=
133 |
134 | Change the number of done items on the current calendar date, used with
135 | =org-heatmap-calendar= (bound to =j= in =calendar-mdoe=).
136 |
137 | *Note* that this function is not applied to =org-heatmap-habit-calendar= for now.
138 | - =org-heatmap-db--drop=
139 |
140 | Delete a table from org-heatmap database.
141 | ** Variables
142 | - =org-heatmap-rectangle=
143 |
144 | Characters used to draw overview heatmap.
145 |
146 | When your overview heatmap is not displayed ideally, you can consider changing
147 | to suitable characters.
148 |
149 | - =org-heatmap-enable-habit-statics=
150 |
151 | Whether to shoaw habit statics.
152 |
153 | Add three data after the habit entry: (current streak, max streak and total
154 | done number).
155 |
156 | *Note*: If you want to chage this variable, please set it before loading
157 | org-heatmap or use =setopt=.
158 |
159 | - =org-heatmap-threshold=
160 |
161 | Choose a different face based on the threshold arrived.
162 |
163 | - =org-heatmap-db-location=
164 |
165 | Default database location.
166 | * TODOs
167 | - [ ] Speed up database writes
168 | - [ ] Add project management
169 | - [ ] Record more data
170 | - [ ] Support for more complex database operations
171 | - [ ] Support for more data display modes
172 |
--------------------------------------------------------------------------------
/examples/examples.org:
--------------------------------------------------------------------------------
1 | * TODO Habit A
2 | SCHEDULED: <2023-06-29 Thu .+1d>
3 | :PROPERTIES:
4 | :STYLE: habit
5 | :LAST_REPEAT: [2023-06-28 Wed 12:30]
6 | :END:
7 | :LOGBOOK:
8 | - State "DONE" from "STARTED" [2023-06-28 Wed 12:30]
9 | - State "STARTED" from "TODO" [2023-06-28 Wed 11:54]
10 | CLOCK: [2023-06-28 Wed 11:54]--[2023-06-28 Wed 12:30]
11 | - State "DONE" from "STARTED" [2023-06-27 Tue 12:30]
12 | - State "STARTED" from "TODO" [2023-06-27 Tue 12:26]
13 | CLOCK: [2023-06-27 Tue 12:26]--[2023-06-27 Tue 12:30]
14 | - State "DONE" from "STARTED" [2023-06-26 Mon 12:30]
15 | - State "STARTED" from "TODO" [2023-06-26 Mon 12:17]
16 | CLOCK: [2023-06-25 Sun 11:47]--[2023-06-25 Sun 12:30]
17 | - State "DONE" from "STARTED" [2023-06-24 Sat 12:30]
18 | - State "STARTED" from "TODO" [2023-06-24 Sat 11:46]
19 | CLOCK: [2023-06-24 Sat 11:46]--[2023-06-24 Sat 12:30]
20 | - State "DONE" from "STARTED" [2023-06-22 Thu 12:30]
21 | - State "STARTED" from "TODO" [2023-06-22 Thu 12:04]
22 | CLOCK: [2023-06-22 Thu 12:04]--[2023-06-22 Thu 12:30]
23 | - State "DONE" from "STARTED" [2023-06-21 Wed 12:30]
24 | - State "STARTED" from "TODO" [2023-06-21 Wed 12:02]
25 | CLOCK: [2023-06-21 Wed 12:02]--[2023-06-21 Wed 12:30]
26 | - State "DONE" from "STARTED" [2023-06-20 Tue 12:30]
27 | - State "STARTED" from "TODO" [2023-06-20 Tue 11:56]
28 | CLOCK: [2023-06-20 Tue 11:56]--[2023-06-20 Tue 12:30]
29 | - State "DONE" from "STARTED" [2023-06-19 Mon 12:30]
30 | - State "STARTED" from "TODO" [2023-06-19 Mon 11:58]
31 | CLOCK: [2023-06-19 Mon 11:58]--[2023-06-19 Mon 12:30]
32 | - State "DONE" from "STARTED" [2023-06-18 Sun 12:30]
33 | - State "STARTED" from "TODO" [2023-06-18 Sun 11:44]
34 | CLOCK: [2023-06-18 Sun 11:44]--[2023-06-18 Sun 12:30]
35 | - State "DONE" from "STARTED" [2023-06-17 Sat 12:30]
36 | - State "STARTED" from "TODO" [2023-06-17 Sat 11:50]
37 | CLOCK: [2023-06-17 Sat 11:50]--[2023-06-17 Sat 12:30]
38 | - State "DONE" from "STARTED" [2023-06-16 Fri 12:30]
39 | - State "STARTED" from "TODO" [2023-06-16 Fri 11:21]
40 | CLOCK: [2023-06-16 Fri 11:21]--[2023-06-16 Fri 12:30]
41 | - State "DONE" from "STARTED" [2023-06-15 Thu 12:30]
42 | - State "STARTED" from "TODO" [2023-06-15 Thu 11:54]
43 | CLOCK: [2023-06-15 Thu 11:54]--[2023-06-15 Thu 12:30]
44 | - State "DONE" from "STARTED" [2023-06-14 Wed 12:30]
45 | - State "STARTED" from "TODO" [2023-06-14 Wed 11:28]
46 | CLOCK: [2023-06-14 Wed 11:28]--[2023-06-14 Wed 12:30]
47 | - State "DONE" from "STARTED" [2023-06-13 Tue 12:30]
48 | - State "STARTED" from "TODO" [2023-06-13 Tue 11:58]
49 | CLOCK: [2023-06-13 Tue 11:58]--[2023-06-13 Tue 12:30]
50 | - State "DONE" from "STARTED" [2023-06-12 Mon 12:30]
51 | - State "STARTED" from "TODO" [2023-06-12 Mon 12:09]
52 | CLOCK: [2023-06-12 Mon 12:09]--[2023-06-12 Mon 12:30]
53 | - State "DONE" from "STARTED" [2023-06-11 Sun 12:30]
54 | - State "STARTED" from "TODO" [2023-06-11 Sun 12:12]
55 | CLOCK: [2023-06-11 Sun 12:12]--[2023-06-11 Sun 12:30]
56 | - State "DONE" from "STARTED" [2023-06-10 Sat 12:30]
57 | - State "STARTED" from "TODO" [2023-06-10 Sat 12:25]
58 | CLOCK: [2023-06-10 Sat 12:25]--[2023-06-10 Sat 12:30]
59 | - State "DONE" from "STARTED" [2023-06-09 Fri 12:30]
60 | - State "STARTED" from "TODO" [2023-06-09 Fri 11:45]
61 | CLOCK: [2023-06-09 Fri 11:45]--[2023-06-09 Fri 12:30]
62 | - State "DONE" from "STARTED" [2023-06-08 Thu 12:30]
63 | - State "STARTED" from "TODO" [2023-06-08 Thu 11:29]
64 | CLOCK: [2023-06-08 Thu 11:29]--[2023-06-08 Thu 12:30]
65 | - State "DONE" from "STARTED" [2023-06-07 Wed 12:30]
66 | - State "STARTED" from "TODO" [2023-06-07 Wed 11:58]
67 | CLOCK: [2023-06-07 Wed 11:58]--[2023-06-07 Wed 12:30]
68 | - State "DONE" from "STARTED" [2023-06-06 Tue 12:30]
69 | - State "STARTED" from "TODO" [2023-06-06 Tue 12:23]
70 | CLOCK: [2023-06-06 Tue 12:23]--[2023-06-06 Tue 12:30]
71 | - State "DONE" from "STARTED" [2023-06-05 Mon 12:30]
72 | - State "STARTED" from "TODO" [2023-06-05 Mon 11:42]
73 | CLOCK: [2023-06-05 Mon 11:42]--[2023-06-05 Mon 12:30]
74 | - State "DONE" from "STARTED" [2023-06-03 Sat 12:30]
75 | - State "STARTED" from "TODO" [2023-06-03 Sat 12:27]
76 | CLOCK: [2023-06-03 Sat 12:27]--[2023-06-03 Sat 12:30]
77 | - State "DONE" from "STARTED" [2023-06-02 Fri 12:30]
78 | - State "STARTED" from "TODO" [2023-06-02 Fri 12:30]
79 | CLOCK: [2023-06-02 Fri 12:30]--[2023-06-02 Fri 12:30]
80 | - State "DONE" from "STARTED" [2023-06-01 Thu 12:30]
81 | - State "STARTED" from "TODO" [2023-06-01 Thu 11:59]
82 | CLOCK: [2023-06-01 Thu 11:59]--[2023-06-01 Thu 12:30]
83 | - State "DONE" from "STARTED" [2023-05-31 Wed 12:30]
84 | - State "STARTED" from "TODO" [2023-05-31 Wed 12:18]
85 | CLOCK: [2023-05-31 Wed 12:18]--[2023-05-31 Wed 12:30]
86 | - State "DONE" from "STARTED" [2023-05-30 Tue 12:30]
87 | - State "STARTED" from "TODO" [2023-05-30 Tue 11:51]
88 | CLOCK: [2023-05-30 Tue 11:51]--[2023-05-30 Tue 12:30]
89 | - State "DONE" from "STARTED" [2023-05-29 Mon 12:30]
90 | - State "STARTED" from "TODO" [2023-05-29 Mon 12:13]
91 | CLOCK: [2023-05-29 Mon 12:13]--[2023-05-29 Mon 12:30]
92 | - State "DONE" from "STARTED" [2023-05-28 Sun 12:30]
93 | - State "STARTED" from "TODO" [2023-05-28 Sun 11:27]
94 | CLOCK: [2023-05-28 Sun 11:27]--[2023-05-28 Sun 12:30]
95 | - State "DONE" from "STARTED" [2023-05-27 Sat 12:30]
96 | - State "STARTED" from "TODO" [2023-05-27 Sat 11:43]
97 | CLOCK: [2023-05-27 Sat 11:43]--[2023-05-27 Sat 12:30]
98 | - State "DONE" from "STARTED" [2023-05-26 Fri 12:30]
99 | - State "STARTED" from "TODO" [2023-05-26 Fri 11:35]
100 | CLOCK: [2023-05-26 Fri 11:35]--[2023-05-26 Fri 12:30]
101 | - State "DONE" from "STARTED" [2023-05-25 Thu 12:30]
102 | - State "STARTED" from "TODO" [2023-05-25 Thu 12:23]
103 | CLOCK: [2023-05-25 Thu 12:23]--[2023-05-25 Thu 12:30]
104 | - State "DONE" from "STARTED" [2023-05-24 Wed 12:30]
105 | - State "STARTED" from "TODO" [2023-05-24 Wed 12:18]
106 | CLOCK: [2023-05-24 Wed 12:18]--[2023-05-24 Wed 12:30]
107 | - State "DONE" from "STARTED" [2023-05-23 Tue 12:30]
108 | - State "STARTED" from "TODO" [2023-05-23 Tue 11:29]
109 | CLOCK: [2023-05-23 Tue 11:29]--[2023-05-23 Tue 12:30]
110 | - State "DONE" from "STARTED" [2023-05-22 Mon 12:30]
111 | - State "STARTED" from "TODO" [2023-05-22 Mon 11:48]
112 | CLOCK: [2023-05-22 Mon 11:48]--[2023-05-22 Mon 12:30]
113 | - State "DONE" from "STARTED" [2023-05-21 Sun 12:30]
114 | - State "STARTED" from "TODO" [2023-05-21 Sun 11:53]
115 | CLOCK: [2023-05-21 Sun 11:53]--[2023-05-21 Sun 12:30]
116 | - State "DONE" from "STARTED" [2023-05-20 Sat 12:30]
117 | - State "STARTED" from "TODO" [2023-05-20 Sat 12:26]
118 | CLOCK: [2023-05-20 Sat 12:26]--[2023-05-20 Sat 12:30]
119 | - State "DONE" from "STARTED" [2023-05-19 Fri 12:30]
120 | - State "STARTED" from "TODO" [2023-05-19 Fri 12:21]
121 | CLOCK: [2023-05-19 Fri 12:21]--[2023-05-19 Fri 12:30]
122 | - State "DONE" from "STARTED" [2023-05-18 Thu 12:30]
123 | - State "STARTED" from "TODO" [2023-05-18 Thu 11:49]
124 | CLOCK: [2023-05-18 Thu 11:49]--[2023-05-18 Thu 12:30]
125 | - State "DONE" from "STARTED" [2023-05-17 Wed 12:30]
126 | - State "STARTED" from "TODO" [2023-05-17 Wed 12:04]
127 | CLOCK: [2023-05-17 Wed 12:04]--[2023-05-17 Wed 12:30]
128 | - State "DONE" from "STARTED" [2023-05-16 Tue 12:30]
129 | - State "STARTED" from "TODO" [2023-05-16 Tue 12:28]
130 | CLOCK: [2023-05-16 Tue 12:28]--[2023-05-16 Tue 12:30]
131 | - State "DONE" from "STARTED" [2023-05-15 Mon 12:30]
132 | - State "STARTED" from "TODO" [2023-05-15 Mon 11:35]
133 | CLOCK: [2023-05-15 Mon 11:35]--[2023-05-15 Mon 12:30]
134 | - State "DONE" from "STARTED" [2023-05-14 Sun 12:30]
135 | - State "STARTED" from "TODO" [2023-05-14 Sun 11:48]
136 | CLOCK: [2023-05-14 Sun 11:48]--[2023-05-14 Sun 12:30]
137 | - State "DONE" from "STARTED" [2023-05-13 Sat 12:30]
138 | - State "STARTED" from "TODO" [2023-05-13 Sat 12:28]
139 | CLOCK: [2023-05-13 Sat 12:28]--[2023-05-13 Sat 12:30]
140 | - State "DONE" from "STARTED" [2023-05-12 Fri 12:30]
141 | - State "STARTED" from "TODO" [2023-05-12 Fri 11:35]
142 | CLOCK: [2023-05-12 Fri 11:35]--[2023-05-12 Fri 12:30]
143 | - State "DONE" from "STARTED" [2023-05-11 Thu 12:30]
144 | - State "STARTED" from "TODO" [2023-05-11 Thu 12:02]
145 | CLOCK: [2023-05-11 Thu 12:02]--[2023-05-11 Thu 12:30]
146 | - State "DONE" from "STARTED" [2023-05-10 Wed 12:30]
147 | - State "STARTED" from "TODO" [2023-05-10 Wed 12:16]
148 | CLOCK: [2023-05-10 Wed 12:16]--[2023-05-10 Wed 12:30]
149 | - State "DONE" from "STARTED" [2023-05-09 Tue 12:30]
150 | - State "STARTED" from "TODO" [2023-05-09 Tue 12:03]
151 | CLOCK: [2023-05-09 Tue 12:03]--[2023-05-09 Tue 12:30]
152 | - State "DONE" from "STARTED" [2023-05-08 Mon 12:30]
153 | - State "STARTED" from "TODO" [2023-05-08 Mon 12:14]
154 | CLOCK: [2023-05-08 Mon 12:14]--[2023-05-08 Mon 12:30]
155 | - State "DONE" from "STARTED" [2023-05-07 Sun 12:30]
156 | - State "STARTED" from "TODO" [2023-05-07 Sun 11:53]
157 | CLOCK: [2023-05-07 Sun 11:53]--[2023-05-07 Sun 12:30]
158 | - State "DONE" from "STARTED" [2023-05-06 Sat 12:30]
159 | - State "STARTED" from "TODO" [2023-05-06 Sat 11:25]
160 | CLOCK: [2023-05-06 Sat 11:25]--[2023-05-06 Sat 12:30]
161 | - State "DONE" from "STARTED" [2023-05-05 Fri 12:30]
162 | - State "STARTED" from "TODO" [2023-05-05 Fri 12:00]
163 | CLOCK: [2023-05-05 Fri 12:00]--[2023-05-05 Fri 12:30]
164 | - State "DONE" from "STARTED" [2023-05-04 Thu 12:30]
165 | - State "STARTED" from "TODO" [2023-05-04 Thu 11:47]
166 | CLOCK: [2023-05-04 Thu 11:47]--[2023-05-04 Thu 12:30]
167 | - State "DONE" from "STARTED" [2023-05-03 Wed 12:30]
168 | - State "STARTED" from "TODO" [2023-05-03 Wed 11:52]
169 | CLOCK: [2023-05-03 Wed 11:52]--[2023-05-03 Wed 12:30]
170 | - State "DONE" from "STARTED" [2023-05-02 Tue 12:30]
171 | - State "STARTED" from "TODO" [2023-05-02 Tue 12:13]
172 | CLOCK: [2023-05-02 Tue 12:13]--[2023-05-02 Tue 12:30]
173 | - State "DONE" from "STARTED" [2023-05-01 Mon 12:30]
174 | - State "STARTED" from "TODO" [2023-05-01 Mon 12:03]
175 | CLOCK: [2023-05-01 Mon 12:03]--[2023-05-01 Mon 12:30]
176 | - State "DONE" from "STARTED" [2023-04-30 Sun 12:30]
177 | - State "STARTED" from "TODO" [2023-04-30 Sun 11:57]
178 | CLOCK: [2023-04-30 Sun 11:57]--[2023-04-30 Sun 12:30]
179 | - State "DONE" from "STARTED" [2023-04-29 Sat 12:30]
180 | - State "STARTED" from "TODO" [2023-04-29 Sat 12:19]
181 | CLOCK: [2023-04-29 Sat 12:19]--[2023-04-29 Sat 12:30]
182 | - State "DONE" from "STARTED" [2023-04-28 Fri 12:30]
183 | - State "STARTED" from "TODO" [2023-04-28 Fri 11:23]
184 | CLOCK: [2023-04-28 Fri 11:23]--[2023-04-28 Fri 12:30]
185 | - State "DONE" from "STARTED" [2023-04-27 Thu 12:30]
186 | - State "STARTED" from "TODO" [2023-04-27 Thu 12:08]
187 | CLOCK: [2023-04-27 Thu 12:08]--[2023-04-27 Thu 12:30]
188 | - State "DONE" from "STARTED" [2023-04-26 Wed 12:30]
189 | - State "STARTED" from "TODO" [2023-04-26 Wed 11:51]
190 | CLOCK: [2023-04-26 Wed 11:51]--[2023-04-26 Wed 12:30]
191 | - State "DONE" from "STARTED" [2023-04-25 Tue 12:30]
192 | - State "STARTED" from "TODO" [2023-04-25 Tue 11:37]
193 | CLOCK: [2023-04-25 Tue 11:37]--[2023-04-25 Tue 12:30]
194 | - State "DONE" from "STARTED" [2023-04-24 Mon 12:30]
195 | - State "STARTED" from "TODO" [2023-04-24 Mon 12:07]
196 | CLOCK: [2023-04-24 Mon 12:07]--[2023-04-24 Mon 12:30]
197 | - State "DONE" from "STARTED" [2023-04-23 Sun 12:30]
198 | - State "STARTED" from "TODO" [2023-04-23 Sun 12:03]
199 | CLOCK: [2023-04-23 Sun 12:03]--[2023-04-23 Sun 12:30]
200 | - State "DONE" from "STARTED" [2023-04-22 Sat 12:30]
201 | - State "STARTED" from "TODO" [2023-04-22 Sat 12:23]
202 | CLOCK: [2023-04-22 Sat 12:23]--[2023-04-22 Sat 12:30]
203 | - State "DONE" from "STARTED" [2023-04-21 Fri 12:30]
204 | - State "STARTED" from "TODO" [2023-04-21 Fri 12:18]
205 | CLOCK: [2023-04-21 Fri 12:18]--[2023-04-21 Fri 12:30]
206 | - State "DONE" from "STARTED" [2023-04-20 Thu 12:30]
207 | - State "STARTED" from "TODO" [2023-04-20 Thu 11:36]
208 | CLOCK: [2023-04-20 Thu 11:36]--[2023-04-20 Thu 12:30]
209 | - State "DONE" from "STARTED" [2023-04-19 Wed 12:30]
210 | - State "STARTED" from "TODO" [2023-04-19 Wed 11:30]
211 | CLOCK: [2023-04-19 Wed 11:30]--[2023-04-19 Wed 12:30]
212 | - State "DONE" from "STARTED" [2023-04-15 Sat 12:30]
213 | - State "STARTED" from "TODO" [2023-04-15 Sat 11:23]
214 | CLOCK: [2023-04-15 Sat 11:23]--[2023-04-15 Sat 12:30]
215 | - State "DONE" from "STARTED" [2023-04-14 Fri 12:30]
216 | - State "STARTED" from "TODO" [2023-04-14 Fri 12:03]
217 | CLOCK: [2023-04-14 Fri 12:03]--[2023-04-14 Fri 12:30]
218 | - State "DONE" from "STARTED" [2023-04-13 Thu 12:30]
219 | - State "STARTED" from "TODO" [2023-04-13 Thu 11:54]
220 | CLOCK: [2023-04-13 Thu 11:54]--[2023-04-13 Thu 12:30]
221 | - State "DONE" from "STARTED" [2023-04-12 Wed 12:30]
222 | - State "STARTED" from "TODO" [2023-04-12 Wed 11:59]
223 | CLOCK: [2023-04-12 Wed 11:59]--[2023-04-12 Wed 12:30]
224 | - State "DONE" from "STARTED" [2023-04-11 Tue 12:30]
225 | - State "STARTED" from "TODO" [2023-04-11 Tue 11:52]
226 | CLOCK: [2023-04-11 Tue 11:52]--[2023-04-11 Tue 12:30]
227 | - State "DONE" from "STARTED" [2023-04-10 Mon 12:30]
228 | - State "STARTED" from "TODO" [2023-04-10 Mon 11:27]
229 | CLOCK: [2023-04-10 Mon 11:27]--[2023-04-10 Mon 12:30]
230 | - State "DONE" from "STARTED" [2023-04-09 Sun 12:30]
231 | - State "STARTED" from "TODO" [2023-04-09 Sun 12:16]
232 | CLOCK: [2023-04-09 Sun 12:16]--[2023-04-09 Sun 12:30]
233 | - State "DONE" from "STARTED" [2023-04-08 Sat 12:30]
234 | - State "STARTED" from "TODO" [2023-04-08 Sat 11:52]
235 | CLOCK: [2023-04-08 Sat 11:52]--[2023-04-08 Sat 12:30]
236 | - State "DONE" from "STARTED" [2023-04-07 Fri 12:30]
237 | - State "STARTED" from "TODO" [2023-04-07 Fri 11:59]
238 | CLOCK: [2023-04-07 Fri 11:59]--[2023-04-07 Fri 12:30]
239 | - State "DONE" from "STARTED" [2023-04-06 Thu 12:30]
240 | - State "STARTED" from "TODO" [2023-04-06 Thu 11:27]
241 | CLOCK: [2023-04-06 Thu 11:27]--[2023-04-06 Thu 12:30]
242 | - State "DONE" from "STARTED" [2023-04-05 Wed 12:30]
243 | - State "STARTED" from "TODO" [2023-04-05 Wed 11:34]
244 | CLOCK: [2023-04-05 Wed 11:34]--[2023-04-05 Wed 12:30]
245 | - State "DONE" from "STARTED" [2023-04-04 Tue 12:30]
246 | - State "STARTED" from "TODO" [2023-04-04 Tue 12:03]
247 | CLOCK: [2023-04-04 Tue 12:03]--[2023-04-04 Tue 12:30]
248 | - State "DONE" from "STARTED" [2023-04-03 Mon 12:30]
249 | - State "STARTED" from "TODO" [2023-04-03 Mon 11:26]
250 | CLOCK: [2023-04-03 Mon 11:26]--[2023-04-03 Mon 12:30]
251 | - State "DONE" from "STARTED" [2023-04-02 Sun 12:30]
252 | - State "STARTED" from "TODO" [2023-04-02 Sun 11:55]
253 | CLOCK: [2023-04-02 Sun 11:55]--[2023-04-02 Sun 12:30]
254 | - State "DONE" from "STARTED" [2023-04-01 Sat 12:30]
255 | - State "STARTED" from "TODO" [2023-04-01 Sat 11:50]
256 | CLOCK: [2023-04-01 Sat 11:50]--[2023-04-01 Sat 12:30]
257 | - State "DONE" from "STARTED" [2023-03-31 Fri 12:30]
258 | - State "STARTED" from "TODO" [2023-03-31 Fri 12:21]
259 | CLOCK: [2023-03-31 Fri 12:21]--[2023-03-31 Fri 12:30]
260 | - State "DONE" from "STARTED" [2023-03-30 Thu 12:30]
261 | - State "STARTED" from "TODO" [2023-03-30 Thu 11:23]
262 | CLOCK: [2023-03-30 Thu 11:23]--[2023-03-30 Thu 12:30]
263 | - State "DONE" from "STARTED" [2023-03-29 Wed 12:30]
264 | - State "STARTED" from "TODO" [2023-03-29 Wed 11:37]
265 | CLOCK: [2023-03-29 Wed 11:37]--[2023-03-29 Wed 12:30]
266 | - State "DONE" from "STARTED" [2023-03-28 Tue 12:30]
267 | - State "STARTED" from "TODO" [2023-03-28 Tue 11:39]
268 | CLOCK: [2023-03-28 Tue 11:39]--[2023-03-28 Tue 12:30]
269 | - State "DONE" from "STARTED" [2023-03-27 Mon 12:30]
270 | - State "STARTED" from "TODO" [2023-03-27 Mon 12:05]
271 | CLOCK: [2023-03-27 Mon 12:05]--[2023-03-27 Mon 12:30]
272 | - State "DONE" from "STARTED" [2023-03-26 Sun 12:30]
273 | - State "STARTED" from "TODO" [2023-03-26 Sun 12:03]
274 | CLOCK: [2023-03-26 Sun 12:03]--[2023-03-26 Sun 12:30]
275 | - State "DONE" from "STARTED" [2023-03-25 Sat 12:30]
276 | - State "STARTED" from "TODO" [2023-03-25 Sat 11:45]
277 | CLOCK: [2023-03-25 Sat 11:45]--[2023-03-25 Sat 12:30]
278 | - State "DONE" from "STARTED" [2023-03-24 Fri 12:30]
279 | - State "STARTED" from "TODO" [2023-03-24 Fri 12:13]
280 | CLOCK: [2023-03-24 Fri 12:13]--[2023-03-24 Fri 12:30]
281 | - State "DONE" from "STARTED" [2023-03-23 Thu 12:30]
282 | - State "STARTED" from "TODO" [2023-03-23 Thu 12:12]
283 | CLOCK: [2023-03-23 Thu 12:12]--[2023-03-23 Thu 12:30]
284 | - State "DONE" from "STARTED" [2023-03-22 Wed 12:30]
285 | - State "STARTED" from "TODO" [2023-03-22 Wed 11:39]
286 | CLOCK: [2023-03-22 Wed 11:39]--[2023-03-22 Wed 12:30]
287 | - State "DONE" from "STARTED" [2023-03-21 Tue 12:30]
288 | - State "STARTED" from "TODO" [2023-03-21 Tue 11:45]
289 | CLOCK: [2023-03-21 Tue 11:45]--[2023-03-21 Tue 12:30]
290 | - State "DONE" from "STARTED" [2023-03-20 Mon 12:30]
291 | - State "STARTED" from "TODO" [2023-03-20 Mon 11:24]
292 | CLOCK: [2023-03-20 Mon 11:24]--[2023-03-20 Mon 12:30]
293 | - State "DONE" from "STARTED" [2023-03-19 Sun 12:30]
294 | - State "STARTED" from "TODO" [2023-03-19 Sun 11:29]
295 | CLOCK: [2023-03-19 Sun 11:29]--[2023-03-19 Sun 12:30]
296 | - State "DONE" from "STARTED" [2023-03-18 Sat 12:30]
297 | - State "STARTED" from "TODO" [2023-03-18 Sat 11:25]
298 | CLOCK: [2023-03-18 Sat 11:25]--[2023-03-18 Sat 12:30]
299 | - State "DONE" from "STARTED" [2023-03-17 Fri 12:30]
300 | - State "STARTED" from "TODO" [2023-03-17 Fri 11:46]
301 | CLOCK: [2023-03-17 Fri 11:46]--[2023-03-17 Fri 12:30]
302 | - State "DONE" from "STARTED" [2023-03-16 Thu 12:30]
303 | - State "STARTED" from "TODO" [2023-03-16 Thu 11:52]
304 | CLOCK: [2023-03-16 Thu 11:52]--[2023-03-16 Thu 12:30]
305 | - State "DONE" from "STARTED" [2023-03-15 Wed 12:30]
306 | - State "STARTED" from "TODO" [2023-03-15 Wed 11:49]
307 | CLOCK: [2023-03-15 Wed 11:49]--[2023-03-15 Wed 12:30]
308 | - State "DONE" from "STARTED" [2023-03-14 Tue 12:30]
309 | - State "STARTED" from "TODO" [2023-03-14 Tue 12:05]
310 | CLOCK: [2023-03-14 Tue 12:05]--[2023-03-14 Tue 12:30]
311 | - State "DONE" from "STARTED" [2023-03-13 Mon 12:30]
312 | - State "STARTED" from "TODO" [2023-03-13 Mon 12:03]
313 | CLOCK: [2023-03-13 Mon 12:03]--[2023-03-13 Mon 12:30]
314 | - State "DONE" from "STARTED" [2023-03-12 Sun 12:30]
315 | - State "STARTED" from "TODO" [2023-03-12 Sun 11:55]
316 | CLOCK: [2023-03-12 Sun 11:55]--[2023-03-12 Sun 12:30]
317 | - State "DONE" from "STARTED" [2023-03-11 Sat 12:30]
318 | - State "STARTED" from "TODO" [2023-03-11 Sat 11:35]
319 | CLOCK: [2023-03-11 Sat 11:35]--[2023-03-11 Sat 12:30]
320 | - State "DONE" from "STARTED" [2023-03-10 Fri 12:30]
321 | - State "STARTED" from "TODO" [2023-03-10 Fri 12:15]
322 | CLOCK: [2023-03-10 Fri 12:15]--[2023-03-10 Fri 12:30]
323 | - State "DONE" from "STARTED" [2023-03-09 Thu 12:30]
324 | - State "STARTED" from "TODO" [2023-03-09 Thu 12:27]
325 | CLOCK: [2023-03-09 Thu 12:27]--[2023-03-09 Thu 12:30]
326 | - State "DONE" from "STARTED" [2023-03-08 Wed 12:30]
327 | - State "STARTED" from "TODO" [2023-03-08 Wed 11:26]
328 | CLOCK: [2023-03-08 Wed 11:26]--[2023-03-08 Wed 12:30]
329 | - State "DONE" from "STARTED" [2023-03-07 Tue 12:30]
330 | - State "STARTED" from "TODO" [2023-03-07 Tue 12:14]
331 | CLOCK: [2023-03-07 Tue 12:14]--[2023-03-07 Tue 12:30]
332 | - State "DONE" from "STARTED" [2023-03-06 Mon 12:30]
333 | - State "STARTED" from "TODO" [2023-03-06 Mon 12:22]
334 | CLOCK: [2023-03-06 Mon 12:22]--[2023-03-06 Mon 12:30]
335 | - State "DONE" from "STARTED" [2023-03-05 Sun 12:30]
336 | - State "STARTED" from "TODO" [2023-03-05 Sun 12:02]
337 | CLOCK: [2023-03-05 Sun 12:02]--[2023-03-05 Sun 12:30]
338 | - State "DONE" from "STARTED" [2023-03-04 Sat 12:30]
339 | - State "STARTED" from "TODO" [2023-03-04 Sat 12:20]
340 | CLOCK: [2023-03-04 Sat 12:20]--[2023-03-04 Sat 12:30]
341 | - State "DONE" from "STARTED" [2023-03-03 Fri 12:30]
342 | - State "STARTED" from "TODO" [2023-03-03 Fri 12:07]
343 | CLOCK: [2023-03-03 Fri 12:07]--[2023-03-03 Fri 12:30]
344 | - State "DONE" from "STARTED" [2023-03-02 Thu 12:30]
345 | - State "STARTED" from "TODO" [2023-03-02 Thu 11:33]
346 | CLOCK: [2023-03-02 Thu 11:33]--[2023-03-02 Thu 12:30]
347 | - State "DONE" from "STARTED" [2023-03-01 Wed 12:30]
348 | - State "STARTED" from "TODO" [2023-03-01 Wed 11:27]
349 | CLOCK: [2023-03-01 Wed 11:27]--[2023-03-01 Wed 12:30]
350 | - State "DONE" from "STARTED" [2023-02-28 Tue 12:30]
351 | - State "STARTED" from "TODO" [2023-02-28 Tue 12:28]
352 | CLOCK: [2023-02-28 Tue 12:28]--[2023-02-28 Tue 12:30]
353 | - State "DONE" from "STARTED" [2023-02-27 Mon 12:30]
354 | - State "STARTED" from "TODO" [2023-02-27 Mon 12:26]
355 | CLOCK: [2023-02-27 Mon 12:26]--[2023-02-27 Mon 12:30]
356 | - State "DONE" from "STARTED" [2023-02-26 Sun 12:30]
357 | - State "STARTED" from "TODO" [2023-02-26 Sun 11:34]
358 | CLOCK: [2023-02-26 Sun 11:34]--[2023-02-26 Sun 12:30]
359 | - State "DONE" from "STARTED" [2023-02-25 Sat 12:30]
360 | - State "STARTED" from "TODO" [2023-02-25 Sat 12:15]
361 | CLOCK: [2023-02-25 Sat 12:15]--[2023-02-25 Sat 12:30]
362 | - State "DONE" from "STARTED" [2023-02-24 Fri 12:30]
363 | - State "STARTED" from "TODO" [2023-02-24 Fri 11:45]
364 | CLOCK: [2023-02-24 Fri 11:45]--[2023-02-24 Fri 12:30]
365 | - State "DONE" from "STARTED" [2023-02-22 Wed 12:30]
366 | - State "STARTED" from "TODO" [2023-02-22 Wed 12:15]
367 | CLOCK: [2023-02-22 Wed 12:15]--[2023-02-22 Wed 12:30]
368 | - State "DONE" from "STARTED" [2023-02-21 Tue 12:30]
369 | - State "STARTED" from "TODO" [2023-02-21 Tue 11:51]
370 | CLOCK: [2023-02-21 Tue 11:51]--[2023-02-21 Tue 12:30]
371 | - State "DONE" from "STARTED" [2023-02-20 Mon 12:30]
372 | - State "STARTED" from "TODO" [2023-02-20 Mon 11:38]
373 | CLOCK: [2023-02-20 Mon 11:38]--[2023-02-20 Mon 12:30]
374 | - State "DONE" from "STARTED" [2023-02-19 Sun 12:30]
375 | - State "STARTED" from "TODO" [2023-02-19 Sun 12:24]
376 | CLOCK: [2023-02-19 Sun 12:24]--[2023-02-19 Sun 12:30]
377 | - State "DONE" from "STARTED" [2023-02-18 Sat 12:30]
378 | - State "STARTED" from "TODO" [2023-02-18 Sat 11:52]
379 | CLOCK: [2023-02-18 Sat 11:52]--[2023-02-18 Sat 12:30]
380 | - State "DONE" from "STARTED" [2023-02-17 Fri 12:30]
381 | - State "STARTED" from "TODO" [2023-02-17 Fri 11:51]
382 | CLOCK: [2023-02-17 Fri 11:51]--[2023-02-17 Fri 12:30]
383 | - State "DONE" from "STARTED" [2023-02-16 Thu 12:30]
384 | - State "STARTED" from "TODO" [2023-02-16 Thu 11:33]
385 | CLOCK: [2023-02-16 Thu 11:33]--[2023-02-16 Thu 12:30]
386 | - State "DONE" from "STARTED" [2023-02-15 Wed 12:30]
387 | - State "STARTED" from "TODO" [2023-02-15 Wed 11:24]
388 | CLOCK: [2023-02-15 Wed 11:24]--[2023-02-15 Wed 12:30]
389 | - State "DONE" from "STARTED" [2023-02-14 Tue 12:30]
390 | - State "STARTED" from "TODO" [2023-02-14 Tue 11:36]
391 | CLOCK: [2023-02-14 Tue 11:36]--[2023-02-14 Tue 12:30]
392 | - State "DONE" from "STARTED" [2023-02-13 Mon 12:30]
393 | - State "STARTED" from "TODO" [2023-02-13 Mon 11:44]
394 | CLOCK: [2023-02-13 Mon 11:44]--[2023-02-13 Mon 12:30]
395 | - State "DONE" from "STARTED" [2023-02-12 Sun 12:30]
396 | - State "STARTED" from "TODO" [2023-02-12 Sun 12:27]
397 | CLOCK: [2023-02-12 Sun 12:27]--[2023-02-12 Sun 12:30]
398 | - State "DONE" from "STARTED" [2023-02-11 Sat 12:30]
399 | - State "STARTED" from "TODO" [2023-02-11 Sat 11:43]
400 | CLOCK: [2023-02-11 Sat 11:43]--[2023-02-11 Sat 12:30]
401 | - State "DONE" from "STARTED" [2023-02-10 Fri 12:30]
402 | - State "STARTED" from "TODO" [2023-02-10 Fri 11:34]
403 | CLOCK: [2023-02-10 Fri 11:34]--[2023-02-10 Fri 12:30]
404 | - State "DONE" from "STARTED" [2023-02-09 Thu 12:30]
405 | - State "STARTED" from "TODO" [2023-02-09 Thu 11:32]
406 | CLOCK: [2023-02-09 Thu 11:32]--[2023-02-09 Thu 12:30]
407 | - State "DONE" from "STARTED" [2023-02-08 Wed 12:30]
408 | - State "STARTED" from "TODO" [2023-02-08 Wed 11:37]
409 | CLOCK: [2023-02-08 Wed 11:37]--[2023-02-08 Wed 12:30]
410 | - State "DONE" from "STARTED" [2023-02-07 Tue 12:30]
411 | - State "STARTED" from "TODO" [2023-02-07 Tue 11:56]
412 | CLOCK: [2023-02-07 Tue 11:56]--[2023-02-07 Tue 12:30]
413 | - State "DONE" from "STARTED" [2023-02-06 Mon 12:30]
414 | - State "STARTED" from "TODO" [2023-02-06 Mon 11:36]
415 | CLOCK: [2023-02-06 Mon 11:36]--[2023-02-06 Mon 12:30]
416 | - State "DONE" from "STARTED" [2023-02-05 Sun 12:30]
417 | - State "STARTED" from "TODO" [2023-02-05 Sun 11:43]
418 | CLOCK: [2023-02-05 Sun 11:43]--[2023-02-05 Sun 12:30]
419 | - State "DONE" from "STARTED" [2023-02-04 Sat 12:30]
420 | - State "STARTED" from "TODO" [2023-02-04 Sat 11:48]
421 | CLOCK: [2023-02-04 Sat 11:48]--[2023-02-04 Sat 12:30]
422 | - State "DONE" from "STARTED" [2023-02-03 Fri 12:30]
423 | - State "STARTED" from "TODO" [2023-02-03 Fri 11:34]
424 | CLOCK: [2023-02-03 Fri 11:34]--[2023-02-03 Fri 12:30]
425 | - State "DONE" from "STARTED" [2023-02-02 Thu 12:30]
426 | - State "STARTED" from "TODO" [2023-02-02 Thu 12:25]
427 | CLOCK: [2023-02-02 Thu 12:25]--[2023-02-02 Thu 12:30]
428 | - State "DONE" from "STARTED" [2023-02-01 Wed 12:30]
429 | - State "STARTED" from "TODO" [2023-02-01 Wed 11:53]
430 | CLOCK: [2023-02-01 Wed 11:53]--[2023-02-01 Wed 12:30]
431 | - State "DONE" from "STARTED" [2023-01-31 Tue 12:30]
432 | - State "STARTED" from "TODO" [2023-01-31 Tue 12:13]
433 | CLOCK: [2023-01-31 Tue 12:13]--[2023-01-31 Tue 12:30]
434 | - State "DONE" from "STARTED" [2023-01-30 Mon 12:30]
435 | - State "STARTED" from "TODO" [2023-01-30 Mon 12:21]
436 | CLOCK: [2023-01-30 Mon 12:21]--[2023-01-30 Mon 12:30]
437 | - State "DONE" from "STARTED" [2023-01-29 Sun 12:30]
438 | - State "STARTED" from "TODO" [2023-01-29 Sun 12:05]
439 | CLOCK: [2023-01-29 Sun 12:05]--[2023-01-29 Sun 12:30]
440 | - State "DONE" from "STARTED" [2023-01-28 Sat 12:30]
441 | - State "STARTED" from "TODO" [2023-01-28 Sat 11:44]
442 | CLOCK: [2023-01-28 Sat 11:44]--[2023-01-28 Sat 12:30]
443 | - State "DONE" from "STARTED" [2023-01-27 Fri 12:30]
444 | - State "STARTED" from "TODO" [2023-01-27 Fri 11:44]
445 | CLOCK: [2023-01-27 Fri 11:44]--[2023-01-27 Fri 12:30]
446 | - State "DONE" from "STARTED" [2023-01-26 Thu 12:30]
447 | - State "STARTED" from "TODO" [2023-01-26 Thu 11:24]
448 | CLOCK: [2023-01-26 Thu 11:24]--[2023-01-26 Thu 12:30]
449 | - State "DONE" from "STARTED" [2023-01-25 Wed 12:30]
450 | - State "STARTED" from "TODO" [2023-01-25 Wed 11:23]
451 | CLOCK: [2023-01-25 Wed 11:23]--[2023-01-25 Wed 12:30]
452 | - State "DONE" from "STARTED" [2023-01-24 Tue 12:30]
453 | - State "STARTED" from "TODO" [2023-01-24 Tue 11:56]
454 | CLOCK: [2023-01-24 Tue 11:56]--[2023-01-24 Tue 12:30]
455 | - State "DONE" from "STARTED" [2023-01-23 Mon 12:30]
456 | - State "STARTED" from "TODO" [2023-01-23 Mon 11:42]
457 | CLOCK: [2023-01-23 Mon 11:42]--[2023-01-23 Mon 12:30]
458 | - State "DONE" from "STARTED" [2023-01-22 Sun 12:30]
459 | - State "STARTED" from "TODO" [2023-01-22 Sun 11:37]
460 | CLOCK: [2023-01-22 Sun 11:37]--[2023-01-22 Sun 12:30]
461 | - State "DONE" from "STARTED" [2023-01-21 Sat 12:30]
462 | - State "STARTED" from "TODO" [2023-01-21 Sat 11:59]
463 | CLOCK: [2023-01-21 Sat 11:59]--[2023-01-21 Sat 12:30]
464 | - State "DONE" from "STARTED" [2023-01-20 Fri 12:30]
465 | - State "STARTED" from "TODO" [2023-01-20 Fri 11:36]
466 | CLOCK: [2023-01-20 Fri 11:36]--[2023-01-20 Fri 12:30]
467 | - State "DONE" from "STARTED" [2023-01-19 Thu 12:30]
468 | - State "STARTED" from "TODO" [2023-01-19 Thu 11:44]
469 | CLOCK: [2023-01-19 Thu 11:44]--[2023-01-19 Thu 12:30]
470 | - State "DONE" from "STARTED" [2023-01-18 Wed 12:30]
471 | - State "STARTED" from "TODO" [2023-01-18 Wed 11:59]
472 | CLOCK: [2023-01-18 Wed 11:59]--[2023-01-18 Wed 12:30]
473 | - State "DONE" from "STARTED" [2023-01-17 Tue 12:30]
474 | - State "STARTED" from "TODO" [2023-01-17 Tue 11:47]
475 | CLOCK: [2023-01-17 Tue 11:47]--[2023-01-17 Tue 12:30]
476 | - State "DONE" from "STARTED" [2023-01-16 Mon 12:30]
477 | - State "STARTED" from "TODO" [2023-01-16 Mon 12:15]
478 | CLOCK: [2023-01-16 Mon 12:15]--[2023-01-16 Mon 12:30]
479 | - State "DONE" from "STARTED" [2023-01-15 Sun 12:30]
480 | - State "STARTED" from "TODO" [2023-01-15 Sun 12:29]
481 | CLOCK: [2023-01-15 Sun 12:29]--[2023-01-15 Sun 12:30]
482 | - State "DONE" from "STARTED" [2023-01-14 Sat 12:30]
483 | - State "STARTED" from "TODO" [2023-01-14 Sat 11:59]
484 | CLOCK: [2023-01-14 Sat 11:59]--[2023-01-14 Sat 12:30]
485 | - State "DONE" from "STARTED" [2023-01-13 Fri 12:30]
486 | - State "STARTED" from "TODO" [2023-01-13 Fri 12:25]
487 | CLOCK: [2023-01-13 Fri 12:25]--[2023-01-13 Fri 12:30]
488 | - State "DONE" from "STARTED" [2023-01-12 Thu 12:30]
489 | - State "STARTED" from "TODO" [2023-01-12 Thu 12:30]
490 | CLOCK: [2023-01-12 Thu 12:30]--[2023-01-12 Thu 12:30]
491 | - State "DONE" from "STARTED" [2023-01-11 Wed 12:30]
492 | - State "STARTED" from "TODO" [2023-01-11 Wed 11:38]
493 | CLOCK: [2023-01-11 Wed 11:38]--[2023-01-11 Wed 12:30]
494 | - State "DONE" from "STARTED" [2023-01-10 Tue 12:30]
495 | - State "STARTED" from "TODO" [2023-01-10 Tue 11:31]
496 | CLOCK: [2023-01-10 Tue 11:31]--[2023-01-10 Tue 12:30]
497 | - State "DONE" from "STARTED" [2023-01-09 Mon 12:30]
498 | - State "STARTED" from "TODO" [2023-01-09 Mon 11:59]
499 | CLOCK: [2023-01-09 Mon 11:59]--[2023-01-09 Mon 12:30]
500 | - State "DONE" from "STARTED" [2023-01-08 Sun 12:30]
501 | - State "STARTED" from "TODO" [2023-01-08 Sun 12:21]
502 | CLOCK: [2023-01-08 Sun 12:21]--[2023-01-08 Sun 12:30]
503 | - State "DONE" from "STARTED" [2023-01-07 Sat 12:30]
504 | - State "STARTED" from "TODO" [2023-01-07 Sat 11:32]
505 | CLOCK: [2023-01-07 Sat 11:32]--[2023-01-07 Sat 12:30]
506 | - State "DONE" from "STARTED" [2023-01-06 Fri 12:30]
507 | - State "STARTED" from "TODO" [2023-01-06 Fri 11:50]
508 | CLOCK: [2023-01-06 Fri 11:50]--[2023-01-06 Fri 12:30]
509 | - State "DONE" from "STARTED" [2023-01-05 Thu 12:30]
510 | - State "STARTED" from "TODO" [2023-01-05 Thu 11:30]
511 | CLOCK: [2023-01-05 Thu 11:30]--[2023-01-05 Thu 12:30]
512 | - State "DONE" from "STARTED" [2023-01-04 Wed 12:30]
513 | - State "STARTED" from "TODO" [2023-01-04 Wed 12:19]
514 | CLOCK: [2023-01-04 Wed 12:19]--[2023-01-04 Wed 12:30]
515 | - State "DONE" from "STARTED" [2023-01-03 Tue 12:30]
516 | - State "STARTED" from "TODO" [2023-01-03 Tue 12:05]
517 | CLOCK: [2023-01-03 Tue 12:05]--[2023-01-03 Tue 12:30]
518 | - State "DONE" from "STARTED" [2023-01-02 Mon 12:30]
519 | - State "STARTED" from "TODO" [2023-01-02 Mon 11:37]
520 | CLOCK: [2023-01-02 Mon 11:37]--[2023-01-02 Mon 12:30]
521 | - State "DONE" from "STARTED" [2023-01-01 Sun 12:30]
522 | - State "STARTED" from "TODO" [2023-01-01 Sun 12:02]
523 | CLOCK: [2023-01-01 Sun 12:02]--[2023-01-01 Sun 12:30]
524 | :END:
525 | * TODO Habit B
526 | SCHEDULED: <2023-06-29 Thu .+1d>
527 | :PROPERTIES:
528 | :STYLE: habit
529 | :LAST_REPEAT: [2023-06-28 Wed 12:30]
530 | :END:
531 | :LOGBOOK:
532 | - State "DONE" from "STARTED" [2023-06-28 Wed 12:30]
533 | - State "STARTED" from "TODO" [2023-06-28 Wed 11:53]
534 | CLOCK: [2023-06-28 Wed 11:53]--[2023-06-28 Wed 12:30]
535 | - State "DONE" from "STARTED" [2023-06-27 Tue 12:30]
536 | - State "STARTED" from "TODO" [2023-06-27 Tue 11:35]
537 | CLOCK: [2023-06-27 Tue 11:35]--[2023-06-27 Tue 12:30]
538 | - State "DONE" from "STARTED" [2023-06-26 Mon 12:30]
539 | - State "STARTED" from "TODO" [2023-06-26 Mon 11:32]
540 | CLOCK: [2023-06-26 Mon 11:32]--[2023-06-26 Mon 12:30]
541 | - State "DONE" from "STARTED" [2023-06-25 Sun 12:30]
542 | - State "STARTED" from "TODO" [2023-06-25 Sun 11:45]
543 | CLOCK: [2023-06-25 Sun 11:45]--[2023-06-25 Sun 12:30]
544 | - State "DONE" from "STARTED" [2023-06-24 Sat 12:30]
545 | - State "STARTED" from "TODO" [2023-06-24 Sat 11:50]
546 | CLOCK: [2023-06-24 Sat 11:50]--[2023-06-24 Sat 12:30]
547 | - State "DONE" from "STARTED" [2023-06-23 Fri 12:30]
548 | - State "STARTED" from "TODO" [2023-06-23 Fri 12:15]
549 | CLOCK: [2023-06-23 Fri 12:15]--[2023-06-23 Fri 12:30]
550 | - State "DONE" from "STARTED" [2023-06-22 Thu 12:30]
551 | - State "STARTED" from "TODO" [2023-06-22 Thu 11:59]
552 | CLOCK: [2023-06-22 Thu 11:59]--[2023-06-22 Thu 12:30]
553 | - State "DONE" from "STARTED" [2023-06-21 Wed 12:30]
554 | - State "STARTED" from "TODO" [2023-06-21 Wed 11:59]
555 | CLOCK: [2023-06-21 Wed 11:59]--[2023-06-21 Wed 12:30]
556 | - State "DONE" from "STARTED" [2023-06-20 Tue 12:30]
557 | - State "STARTED" from "TODO" [2023-06-20 Tue 12:17]
558 | CLOCK: [2023-06-20 Tue 12:17]--[2023-06-20 Tue 12:30]
559 | - State "DONE" from "STARTED" [2023-06-19 Mon 12:30]
560 | - State "STARTED" from "TODO" [2023-06-19 Mon 11:56]
561 | CLOCK: [2023-06-19 Mon 11:56]--[2023-06-19 Mon 12:30]
562 | - State "DONE" from "STARTED" [2023-06-18 Sun 12:30]
563 | - State "STARTED" from "TODO" [2023-06-18 Sun 11:56]
564 | CLOCK: [2023-06-18 Sun 11:56]--[2023-06-18 Sun 12:30]
565 | - State "DONE" from "STARTED" [2023-06-17 Sat 12:30]
566 | - State "STARTED" from "TODO" [2023-06-17 Sat 11:34]
567 | CLOCK: [2023-06-17 Sat 11:34]--[2023-06-17 Sat 12:30]
568 | - State "DONE" from "STARTED" [2023-06-16 Fri 12:30]
569 | - State "STARTED" from "TODO" [2023-06-16 Fri 11:59]
570 | CLOCK: [2023-06-16 Fri 11:59]--[2023-06-16 Fri 12:30]
571 | - State "DONE" from "STARTED" [2023-06-15 Thu 12:30]
572 | - State "STARTED" from "TODO" [2023-06-15 Thu 11:41]
573 | CLOCK: [2023-06-15 Thu 11:41]--[2023-06-15 Thu 12:30]
574 | - State "DONE" from "STARTED" [2023-06-14 Wed 12:30]
575 | - State "STARTED" from "TODO" [2023-06-14 Wed 11:43]
576 | CLOCK: [2023-06-14 Wed 11:43]--[2023-06-14 Wed 12:30]
577 | - State "DONE" from "STARTED" [2023-06-13 Tue 12:30]
578 | - State "STARTED" from "TODO" [2023-06-13 Tue 11:33]
579 | CLOCK: [2023-06-13 Tue 11:33]--[2023-06-13 Tue 12:30]
580 | - State "DONE" from "STARTED" [2023-06-12 Mon 12:30]
581 | - State "STARTED" from "TODO" [2023-06-12 Mon 11:47]
582 | CLOCK: [2023-06-12 Mon 11:47]--[2023-06-12 Mon 12:30]
583 | - State "DONE" from "STARTED" [2023-06-11 Sun 12:30]
584 | - State "STARTED" from "TODO" [2023-06-11 Sun 11:34]
585 | CLOCK: [2023-06-11 Sun 11:34]--[2023-06-11 Sun 12:30]
586 | - State "DONE" from "STARTED" [2023-06-10 Sat 12:30]
587 | - State "STARTED" from "TODO" [2023-06-10 Sat 12:09]
588 | CLOCK: [2023-06-10 Sat 12:09]--[2023-06-10 Sat 12:30]
589 | - State "DONE" from "STARTED" [2023-06-09 Fri 12:30]
590 | - State "STARTED" from "TODO" [2023-06-09 Fri 11:56]
591 | CLOCK: [2023-06-09 Fri 11:56]--[2023-06-09 Fri 12:30]
592 | - State "DONE" from "STARTED" [2023-06-08 Thu 12:30]
593 | - State "STARTED" from "TODO" [2023-06-08 Thu 12:20]
594 | CLOCK: [2023-06-08 Thu 12:20]--[2023-06-08 Thu 12:30]
595 | - State "DONE" from "STARTED" [2023-06-07 Wed 12:30]
596 | - State "STARTED" from "TODO" [2023-06-07 Wed 12:25]
597 | CLOCK: [2023-06-07 Wed 12:25]--[2023-06-07 Wed 12:30]
598 | - State "DONE" from "STARTED" [2023-06-06 Tue 12:30]
599 | - State "STARTED" from "TODO" [2023-06-06 Tue 12:00]
600 | CLOCK: [2023-06-06 Tue 12:00]--[2023-06-06 Tue 12:30]
601 | - State "DONE" from "STARTED" [2023-06-05 Mon 12:30]
602 | - State "STARTED" from "TODO" [2023-06-05 Mon 11:23]
603 | CLOCK: [2023-06-05 Mon 11:23]--[2023-06-05 Mon 12:30]
604 | - State "DONE" from "STARTED" [2023-06-04 Sun 12:30]
605 | - State "STARTED" from "TODO" [2023-06-04 Sun 11:58]
606 | CLOCK: [2023-06-04 Sun 11:58]--[2023-06-04 Sun 12:30]
607 | - State "DONE" from "STARTED" [2023-06-03 Sat 12:30]
608 | - State "STARTED" from "TODO" [2023-06-03 Sat 11:27]
609 | CLOCK: [2023-06-03 Sat 11:27]--[2023-06-03 Sat 12:30]
610 | - State "DONE" from "STARTED" [2023-06-02 Fri 12:30]
611 | - State "STARTED" from "TODO" [2023-06-02 Fri 12:26]
612 | CLOCK: [2023-06-02 Fri 12:26]--[2023-06-02 Fri 12:30]
613 | - State "DONE" from "STARTED" [2023-06-01 Thu 12:30]
614 | - State "STARTED" from "TODO" [2023-06-01 Thu 11:26]
615 | CLOCK: [2023-06-01 Thu 11:26]--[2023-06-01 Thu 12:30]
616 | - State "DONE" from "STARTED" [2023-05-31 Wed 12:30]
617 | - State "STARTED" from "TODO" [2023-05-31 Wed 11:39]
618 | CLOCK: [2023-05-31 Wed 11:39]--[2023-05-31 Wed 12:30]
619 | - State "DONE" from "STARTED" [2023-05-30 Tue 12:30]
620 | - State "STARTED" from "TODO" [2023-05-30 Tue 11:21]
621 | CLOCK: [2023-05-30 Tue 11:21]--[2023-05-30 Tue 12:30]
622 | - State "DONE" from "STARTED" [2023-05-29 Mon 12:30]
623 | - State "STARTED" from "TODO" [2023-05-29 Mon 11:57]
624 | CLOCK: [2023-05-29 Mon 11:57]--[2023-05-29 Mon 12:30]
625 | - State "DONE" from "STARTED" [2023-05-28 Sun 12:30]
626 | - State "STARTED" from "TODO" [2023-05-28 Sun 12:28]
627 | CLOCK: [2023-05-28 Sun 12:28]--[2023-05-28 Sun 12:30]
628 | - State "DONE" from "STARTED" [2023-05-27 Sat 12:30]
629 | - State "STARTED" from "TODO" [2023-05-27 Sat 11:36]
630 | CLOCK: [2023-05-27 Sat 11:36]--[2023-05-27 Sat 12:30]
631 | - State "DONE" from "STARTED" [2023-05-26 Fri 12:30]
632 | - State "STARTED" from "TODO" [2023-05-26 Fri 11:25]
633 | CLOCK: [2023-05-26 Fri 11:25]--[2023-05-26 Fri 12:30]
634 | - State "DONE" from "STARTED" [2023-05-25 Thu 12:30]
635 | - State "STARTED" from "TODO" [2023-05-25 Thu 11:45]
636 | CLOCK: [2023-05-25 Thu 11:45]--[2023-05-25 Thu 12:30]
637 | - State "DONE" from "STARTED" [2023-05-24 Wed 12:30]
638 | - State "STARTED" from "TODO" [2023-05-24 Wed 11:37]
639 | CLOCK: [2023-05-24 Wed 11:37]--[2023-05-24 Wed 12:30]
640 | - State "DONE" from "STARTED" [2023-05-23 Tue 12:30]
641 | - State "STARTED" from "TODO" [2023-05-23 Tue 11:50]
642 | CLOCK: [2023-05-23 Tue 11:50]--[2023-05-23 Tue 12:30]
643 | - State "DONE" from "STARTED" [2023-05-22 Mon 12:30]
644 | - State "STARTED" from "TODO" [2023-05-22 Mon 11:57]
645 | CLOCK: [2023-05-22 Mon 11:57]--[2023-05-22 Mon 12:30]
646 | - State "DONE" from "STARTED" [2023-05-21 Sun 12:30]
647 | - State "STARTED" from "TODO" [2023-05-21 Sun 11:57]
648 | CLOCK: [2023-05-21 Sun 11:57]--[2023-05-21 Sun 12:30]
649 | - State "DONE" from "STARTED" [2023-05-20 Sat 12:30]
650 | - State "STARTED" from "TODO" [2023-05-20 Sat 12:13]
651 | CLOCK: [2023-05-20 Sat 12:13]--[2023-05-20 Sat 12:30]
652 | - State "DONE" from "STARTED" [2023-05-19 Fri 12:30]
653 | - State "STARTED" from "TODO" [2023-05-19 Fri 11:48]
654 | CLOCK: [2023-05-19 Fri 11:48]--[2023-05-19 Fri 12:30]
655 | - State "DONE" from "STARTED" [2023-05-18 Thu 12:30]
656 | - State "STARTED" from "TODO" [2023-05-18 Thu 11:31]
657 | CLOCK: [2023-05-18 Thu 11:31]--[2023-05-18 Thu 12:30]
658 | - State "DONE" from "STARTED" [2023-05-17 Wed 12:30]
659 | - State "STARTED" from "TODO" [2023-05-17 Wed 12:03]
660 | CLOCK: [2023-05-17 Wed 12:03]--[2023-05-17 Wed 12:30]
661 | - State "DONE" from "STARTED" [2023-05-16 Tue 12:30]
662 | - State "STARTED" from "TODO" [2023-05-16 Tue 12:18]
663 | CLOCK: [2023-05-16 Tue 12:18]--[2023-05-16 Tue 12:30]
664 | - State "DONE" from "STARTED" [2023-05-15 Mon 12:30]
665 | - State "STARTED" from "TODO" [2023-05-15 Mon 12:27]
666 | CLOCK: [2023-05-15 Mon 12:27]--[2023-05-15 Mon 12:30]
667 | - State "DONE" from "STARTED" [2023-05-14 Sun 12:30]
668 | - State "STARTED" from "TODO" [2023-05-14 Sun 11:23]
669 | CLOCK: [2023-05-14 Sun 11:23]--[2023-05-14 Sun 12:30]
670 | - State "DONE" from "STARTED" [2023-05-13 Sat 12:30]
671 | - State "STARTED" from "TODO" [2023-05-13 Sat 11:44]
672 | CLOCK: [2023-05-13 Sat 11:44]--[2023-05-13 Sat 12:30]
673 | - State "DONE" from "STARTED" [2023-05-12 Fri 12:30]
674 | - State "STARTED" from "TODO" [2023-05-12 Fri 12:13]
675 | CLOCK: [2023-05-12 Fri 12:13]--[2023-05-12 Fri 12:30]
676 | - State "DONE" from "STARTED" [2023-05-11 Thu 12:30]
677 | - State "STARTED" from "TODO" [2023-05-11 Thu 11:54]
678 | CLOCK: [2023-05-11 Thu 11:54]--[2023-05-11 Thu 12:30]
679 | - State "DONE" from "STARTED" [2023-05-10 Wed 12:30]
680 | - State "STARTED" from "TODO" [2023-05-10 Wed 12:14]
681 | CLOCK: [2023-05-10 Wed 12:14]--[2023-05-10 Wed 12:30]
682 | - State "DONE" from "STARTED" [2023-05-09 Tue 12:30]
683 | - State "STARTED" from "TODO" [2023-05-09 Tue 11:34]
684 | CLOCK: [2023-05-09 Tue 11:34]--[2023-05-09 Tue 12:30]
685 | - State "DONE" from "STARTED" [2023-05-08 Mon 12:30]
686 | - State "STARTED" from "TODO" [2023-05-08 Mon 11:27]
687 | CLOCK: [2023-05-08 Mon 11:27]--[2023-05-08 Mon 12:30]
688 | - State "DONE" from "STARTED" [2023-05-07 Sun 12:30]
689 | - State "STARTED" from "TODO" [2023-05-07 Sun 11:48]
690 | CLOCK: [2023-05-07 Sun 11:48]--[2023-05-07 Sun 12:30]
691 | - State "DONE" from "STARTED" [2023-05-06 Sat 12:30]
692 | - State "STARTED" from "TODO" [2023-05-06 Sat 12:24]
693 | CLOCK: [2023-05-06 Sat 12:24]--[2023-05-06 Sat 12:30]
694 | - State "DONE" from "STARTED" [2023-05-05 Fri 12:30]
695 | - State "STARTED" from "TODO" [2023-05-05 Fri 11:27]
696 | CLOCK: [2023-05-05 Fri 11:27]--[2023-05-05 Fri 12:30]
697 | - State "DONE" from "STARTED" [2023-05-04 Thu 12:30]
698 | - State "STARTED" from "TODO" [2023-05-04 Thu 11:26]
699 | CLOCK: [2023-05-04 Thu 11:26]--[2023-05-04 Thu 12:30]
700 | - State "DONE" from "STARTED" [2023-05-03 Wed 12:30]
701 | - State "STARTED" from "TODO" [2023-05-03 Wed 11:33]
702 | CLOCK: [2023-05-03 Wed 11:33]--[2023-05-03 Wed 12:30]
703 | - State "DONE" from "STARTED" [2023-05-02 Tue 12:30]
704 | - State "STARTED" from "TODO" [2023-05-02 Tue 11:28]
705 | CLOCK: [2023-05-02 Tue 11:28]--[2023-05-02 Tue 12:30]
706 | - State "DONE" from "STARTED" [2023-05-01 Mon 12:30]
707 | - State "STARTED" from "TODO" [2023-05-01 Mon 12:05]
708 | CLOCK: [2023-05-01 Mon 12:05]--[2023-05-01 Mon 12:30]
709 | - State "DONE" from "STARTED" [2023-04-30 Sun 12:30]
710 | - State "STARTED" from "TODO" [2023-04-30 Sun 12:25]
711 | CLOCK: [2023-04-30 Sun 12:25]--[2023-04-30 Sun 12:30]
712 | - State "DONE" from "STARTED" [2023-04-29 Sat 12:30]
713 | - State "STARTED" from "TODO" [2023-04-29 Sat 11:34]
714 | CLOCK: [2023-04-29 Sat 11:34]--[2023-04-29 Sat 12:30]
715 | - State "DONE" from "STARTED" [2023-04-28 Fri 12:30]
716 | - State "STARTED" from "TODO" [2023-04-28 Fri 12:06]
717 | CLOCK: [2023-04-28 Fri 12:06]--[2023-04-28 Fri 12:30]
718 | - State "DONE" from "STARTED" [2023-04-27 Thu 12:30]
719 | - State "STARTED" from "TODO" [2023-04-27 Thu 12:27]
720 | CLOCK: [2023-04-27 Thu 12:27]--[2023-04-27 Thu 12:30]
721 | - State "DONE" from "STARTED" [2023-04-26 Wed 12:30]
722 | - State "STARTED" from "TODO" [2023-04-26 Wed 12:22]
723 | CLOCK: [2023-04-26 Wed 12:22]--[2023-04-26 Wed 12:30]
724 | - State "DONE" from "STARTED" [2023-04-25 Tue 12:30]
725 | - State "STARTED" from "TODO" [2023-04-25 Tue 12:27]
726 | CLOCK: [2023-04-25 Tue 12:27]--[2023-04-25 Tue 12:30]
727 | - State "DONE" from "STARTED" [2023-04-24 Mon 12:30]
728 | - State "STARTED" from "TODO" [2023-04-24 Mon 12:27]
729 | CLOCK: [2023-04-24 Mon 12:27]--[2023-04-24 Mon 12:30]
730 | - State "DONE" from "STARTED" [2023-04-23 Sun 12:30]
731 | - State "STARTED" from "TODO" [2023-04-23 Sun 12:07]
732 | CLOCK: [2023-04-23 Sun 12:07]--[2023-04-23 Sun 12:30]
733 | - State "DONE" from "STARTED" [2023-04-22 Sat 12:30]
734 | - State "STARTED" from "TODO" [2023-04-22 Sat 12:26]
735 | CLOCK: [2023-04-22 Sat 12:26]--[2023-04-22 Sat 12:30]
736 | - State "DONE" from "STARTED" [2023-04-21 Fri 12:30]
737 | - State "STARTED" from "TODO" [2023-04-21 Fri 12:22]
738 | CLOCK: [2023-04-21 Fri 12:22]--[2023-04-21 Fri 12:30]
739 | - State "DONE" from "STARTED" [2023-04-20 Thu 12:30]
740 | - State "STARTED" from "TODO" [2023-04-20 Thu 11:46]
741 | CLOCK: [2023-04-20 Thu 11:46]--[2023-04-20 Thu 12:30]
742 | - State "DONE" from "STARTED" [2023-04-19 Wed 12:30]
743 | - State "STARTED" from "TODO" [2023-04-19 Wed 12:08]
744 | CLOCK: [2023-04-19 Wed 12:08]--[2023-04-19 Wed 12:30]
745 | - State "DONE" from "STARTED" [2023-04-18 Tue 12:30]
746 | - State "STARTED" from "TODO" [2023-04-18 Tue 12:30]
747 | CLOCK: [2023-04-18 Tue 12:30]--[2023-04-18 Tue 12:30]
748 | - State "DONE" from "STARTED" [2023-04-17 Mon 12:30]
749 | - State "STARTED" from "TODO" [2023-04-17 Mon 11:54]
750 | CLOCK: [2023-04-17 Mon 11:54]--[2023-04-17 Mon 12:30]
751 | - State "DONE" from "STARTED" [2023-04-16 Sun 12:30]
752 | - State "STARTED" from "TODO" [2023-04-16 Sun 12:22]
753 | CLOCK: [2023-04-16 Sun 12:22]--[2023-04-16 Sun 12:30]
754 | - State "DONE" from "STARTED" [2023-04-15 Sat 12:30]
755 | - State "STARTED" from "TODO" [2023-04-15 Sat 12:07]
756 | CLOCK: [2023-04-15 Sat 12:07]--[2023-04-15 Sat 12:30]
757 | - State "DONE" from "STARTED" [2023-04-14 Fri 12:30]
758 | - State "STARTED" from "TODO" [2023-04-14 Fri 12:20]
759 | CLOCK: [2023-04-14 Fri 12:20]--[2023-04-14 Fri 12:30]
760 | - State "DONE" from "STARTED" [2023-04-13 Thu 12:30]
761 | - State "STARTED" from "TODO" [2023-04-13 Thu 12:03]
762 | CLOCK: [2023-04-13 Thu 12:03]--[2023-04-13 Thu 12:30]
763 | - State "DONE" from "STARTED" [2023-04-12 Wed 12:30]
764 | - State "STARTED" from "TODO" [2023-04-12 Wed 12:10]
765 | CLOCK: [2023-04-12 Wed 12:10]--[2023-04-12 Wed 12:30]
766 | - State "DONE" from "STARTED" [2023-04-11 Tue 12:30]
767 | - State "STARTED" from "TODO" [2023-04-11 Tue 11:36]
768 | CLOCK: [2023-04-11 Tue 11:36]--[2023-04-11 Tue 12:30]
769 | - State "DONE" from "STARTED" [2023-04-10 Mon 12:30]
770 | - State "STARTED" from "TODO" [2023-04-10 Mon 12:06]
771 | CLOCK: [2023-04-10 Mon 12:06]--[2023-04-10 Mon 12:30]
772 | - State "DONE" from "STARTED" [2023-04-09 Sun 12:30]
773 | - State "STARTED" from "TODO" [2023-04-09 Sun 11:36]
774 | CLOCK: [2023-04-09 Sun 11:36]--[2023-04-09 Sun 12:30]
775 | - State "DONE" from "STARTED" [2023-04-08 Sat 12:30]
776 | - State "STARTED" from "TODO" [2023-04-08 Sat 11:39]
777 | CLOCK: [2023-04-08 Sat 11:39]--[2023-04-08 Sat 12:30]
778 | - State "DONE" from "STARTED" [2023-04-07 Fri 12:30]
779 | - State "STARTED" from "TODO" [2023-04-07 Fri 11:55]
780 | CLOCK: [2023-04-07 Fri 11:55]--[2023-04-07 Fri 12:30]
781 | - State "DONE" from "STARTED" [2023-04-06 Thu 12:30]
782 | - State "STARTED" from "TODO" [2023-04-06 Thu 12:27]
783 | CLOCK: [2023-04-06 Thu 12:27]--[2023-04-06 Thu 12:30]
784 | - State "DONE" from "STARTED" [2023-04-05 Wed 12:30]
785 | - State "STARTED" from "TODO" [2023-04-05 Wed 11:32]
786 | CLOCK: [2023-04-05 Wed 11:32]--[2023-04-05 Wed 12:30]
787 | - State "DONE" from "STARTED" [2023-04-04 Tue 12:30]
788 | - State "STARTED" from "TODO" [2023-04-04 Tue 12:27]
789 | CLOCK: [2023-04-04 Tue 12:27]--[2023-04-04 Tue 12:30]
790 | - State "DONE" from "STARTED" [2023-04-03 Mon 12:30]
791 | - State "STARTED" from "TODO" [2023-04-03 Mon 11:36]
792 | CLOCK: [2023-04-03 Mon 11:36]--[2023-04-03 Mon 12:30]
793 | - State "DONE" from "STARTED" [2023-04-02 Sun 12:30]
794 | - State "STARTED" from "TODO" [2023-04-02 Sun 12:14]
795 | CLOCK: [2023-04-02 Sun 12:14]--[2023-04-02 Sun 12:30]
796 | - State "DONE" from "STARTED" [2023-04-01 Sat 12:30]
797 | - State "STARTED" from "TODO" [2023-04-01 Sat 12:02]
798 | CLOCK: [2023-04-01 Sat 12:02]--[2023-04-01 Sat 12:30]
799 | - State "DONE" from "STARTED" [2023-03-31 Fri 12:30]
800 | - State "STARTED" from "TODO" [2023-03-31 Fri 11:45]
801 | CLOCK: [2023-03-31 Fri 11:45]--[2023-03-31 Fri 12:30]
802 | - State "DONE" from "STARTED" [2023-03-30 Thu 12:30]
803 | - State "STARTED" from "TODO" [2023-03-30 Thu 11:42]
804 | CLOCK: [2023-03-30 Thu 11:42]--[2023-03-30 Thu 12:30]
805 | - State "DONE" from "STARTED" [2023-03-29 Wed 12:30]
806 | - State "STARTED" from "TODO" [2023-03-29 Wed 12:19]
807 | CLOCK: [2023-03-29 Wed 12:19]--[2023-03-29 Wed 12:30]
808 | - State "DONE" from "STARTED" [2023-03-28 Tue 12:30]
809 | - State "STARTED" from "TODO" [2023-03-28 Tue 12:13]
810 | CLOCK: [2023-03-28 Tue 12:13]--[2023-03-28 Tue 12:30]
811 | - State "DONE" from "STARTED" [2023-03-27 Mon 12:30]
812 | - State "STARTED" from "TODO" [2023-03-27 Mon 11:36]
813 | CLOCK: [2023-03-27 Mon 11:36]--[2023-03-27 Mon 12:30]
814 | - State "DONE" from "STARTED" [2023-03-26 Sun 12:30]
815 | - State "STARTED" from "TODO" [2023-03-26 Sun 12:03]
816 | CLOCK: [2023-03-26 Sun 12:03]--[2023-03-26 Sun 12:30]
817 | - State "DONE" from "STARTED" [2023-03-25 Sat 12:30]
818 | - State "STARTED" from "TODO" [2023-03-25 Sat 11:44]
819 | CLOCK: [2023-03-25 Sat 11:44]--[2023-03-25 Sat 12:30]
820 | - State "DONE" from "STARTED" [2023-03-24 Fri 12:30]
821 | - State "STARTED" from "TODO" [2023-03-24 Fri 11:51]
822 | CLOCK: [2023-03-24 Fri 11:51]--[2023-03-24 Fri 12:30]
823 | - State "DONE" from "STARTED" [2023-03-23 Thu 12:30]
824 | - State "STARTED" from "TODO" [2023-03-23 Thu 11:52]
825 | CLOCK: [2023-03-23 Thu 11:52]--[2023-03-23 Thu 12:30]
826 | - State "DONE" from "STARTED" [2023-03-22 Wed 12:30]
827 | - State "STARTED" from "TODO" [2023-03-22 Wed 11:41]
828 | CLOCK: [2023-03-22 Wed 11:41]--[2023-03-22 Wed 12:30]
829 | - State "DONE" from "STARTED" [2023-03-21 Tue 12:30]
830 | - State "STARTED" from "TODO" [2023-03-21 Tue 11:25]
831 | CLOCK: [2023-03-21 Tue 11:25]--[2023-03-21 Tue 12:30]
832 | - State "DONE" from "STARTED" [2023-03-20 Mon 12:30]
833 | - State "STARTED" from "TODO" [2023-03-20 Mon 12:11]
834 | CLOCK: [2023-03-20 Mon 12:11]--[2023-03-20 Mon 12:30]
835 | - State "DONE" from "STARTED" [2023-03-19 Sun 12:30]
836 | - State "STARTED" from "TODO" [2023-03-19 Sun 12:01]
837 | CLOCK: [2023-03-19 Sun 12:01]--[2023-03-19 Sun 12:30]
838 | - State "DONE" from "STARTED" [2023-03-18 Sat 12:30]
839 | - State "STARTED" from "TODO" [2023-03-18 Sat 11:54]
840 | CLOCK: [2023-03-18 Sat 11:54]--[2023-03-18 Sat 12:30]
841 | - State "DONE" from "STARTED" [2023-03-17 Fri 12:30]
842 | - State "STARTED" from "TODO" [2023-03-17 Fri 11:31]
843 | CLOCK: [2023-03-17 Fri 11:31]--[2023-03-17 Fri 12:30]
844 | - State "DONE" from "STARTED" [2023-03-16 Thu 12:30]
845 | - State "STARTED" from "TODO" [2023-03-16 Thu 11:58]
846 | CLOCK: [2023-03-16 Thu 11:58]--[2023-03-16 Thu 12:30]
847 | - State "DONE" from "STARTED" [2023-03-15 Wed 12:30]
848 | - State "STARTED" from "TODO" [2023-03-15 Wed 11:24]
849 | CLOCK: [2023-03-15 Wed 11:24]--[2023-03-15 Wed 12:30]
850 | - State "DONE" from "STARTED" [2023-03-14 Tue 12:30]
851 | - State "STARTED" from "TODO" [2023-03-14 Tue 11:37]
852 | CLOCK: [2023-03-14 Tue 11:37]--[2023-03-14 Tue 12:30]
853 | - State "DONE" from "STARTED" [2023-03-13 Mon 12:30]
854 | - State "STARTED" from "TODO" [2023-03-13 Mon 12:19]
855 | CLOCK: [2023-03-13 Mon 12:19]--[2023-03-13 Mon 12:30]
856 | - State "DONE" from "STARTED" [2023-03-12 Sun 12:30]
857 | - State "STARTED" from "TODO" [2023-03-12 Sun 11:24]
858 | CLOCK: [2023-03-12 Sun 11:24]--[2023-03-12 Sun 12:30]
859 | - State "DONE" from "STARTED" [2023-03-11 Sat 12:30]
860 | - State "STARTED" from "TODO" [2023-03-11 Sat 12:21]
861 | CLOCK: [2023-03-11 Sat 12:21]--[2023-03-11 Sat 12:30]
862 | - State "DONE" from "STARTED" [2023-03-10 Fri 12:30]
863 | - State "STARTED" from "TODO" [2023-03-10 Fri 12:14]
864 | CLOCK: [2023-03-10 Fri 12:14]--[2023-03-10 Fri 12:30]
865 | - State "DONE" from "STARTED" [2023-03-09 Thu 12:30]
866 | - State "STARTED" from "TODO" [2023-03-09 Thu 12:21]
867 | CLOCK: [2023-03-09 Thu 12:21]--[2023-03-09 Thu 12:30]
868 | - State "DONE" from "STARTED" [2023-03-08 Wed 12:30]
869 | - State "STARTED" from "TODO" [2023-03-08 Wed 11:45]
870 | CLOCK: [2023-03-08 Wed 11:45]--[2023-03-08 Wed 12:30]
871 | - State "DONE" from "STARTED" [2023-03-07 Tue 12:30]
872 | - State "STARTED" from "TODO" [2023-03-07 Tue 12:19]
873 | CLOCK: [2023-03-07 Tue 12:19]--[2023-03-07 Tue 12:30]
874 | - State "DONE" from "STARTED" [2023-03-06 Mon 12:30]
875 | - State "STARTED" from "TODO" [2023-03-06 Mon 12:12]
876 | CLOCK: [2023-03-06 Mon 12:12]--[2023-03-06 Mon 12:30]
877 | - State "DONE" from "STARTED" [2023-03-05 Sun 12:30]
878 | - State "STARTED" from "TODO" [2023-03-05 Sun 11:40]
879 | CLOCK: [2023-03-05 Sun 11:40]--[2023-03-05 Sun 12:30]
880 | - State "DONE" from "STARTED" [2023-03-04 Sat 12:30]
881 | - State "STARTED" from "TODO" [2023-03-04 Sat 11:44]
882 | CLOCK: [2023-03-04 Sat 11:44]--[2023-03-04 Sat 12:30]
883 | - State "DONE" from "STARTED" [2023-03-03 Fri 12:30]
884 | - State "STARTED" from "TODO" [2023-03-03 Fri 12:26]
885 | CLOCK: [2023-03-03 Fri 12:26]--[2023-03-03 Fri 12:30]
886 | - State "DONE" from "STARTED" [2023-03-02 Thu 12:30]
887 | - State "STARTED" from "TODO" [2023-03-02 Thu 11:34]
888 | CLOCK: [2023-03-02 Thu 11:34]--[2023-03-02 Thu 12:30]
889 | - State "DONE" from "STARTED" [2023-03-01 Wed 12:30]
890 | - State "STARTED" from "TODO" [2023-03-01 Wed 11:57]
891 | CLOCK: [2023-03-01 Wed 11:57]--[2023-03-01 Wed 12:30]
892 | - State "DONE" from "STARTED" [2023-02-28 Tue 12:30]
893 | - State "STARTED" from "TODO" [2023-02-28 Tue 12:14]
894 | CLOCK: [2023-02-28 Tue 12:14]--[2023-02-28 Tue 12:30]
895 | - State "DONE" from "STARTED" [2023-02-27 Mon 12:30]
896 | - State "STARTED" from "TODO" [2023-02-27 Mon 11:26]
897 | CLOCK: [2023-02-27 Mon 11:26]--[2023-02-27 Mon 12:30]
898 | - State "DONE" from "STARTED" [2023-02-26 Sun 12:30]
899 | - State "STARTED" from "TODO" [2023-02-26 Sun 11:45]
900 | CLOCK: [2023-02-26 Sun 11:45]--[2023-02-26 Sun 12:30]
901 | - State "DONE" from "STARTED" [2023-02-25 Sat 12:30]
902 | - State "STARTED" from "TODO" [2023-02-25 Sat 12:07]
903 | CLOCK: [2023-02-25 Sat 12:07]--[2023-02-25 Sat 12:30]
904 | - State "DONE" from "STARTED" [2023-02-24 Fri 12:30]
905 | - State "STARTED" from "TODO" [2023-02-24 Fri 11:45]
906 | CLOCK: [2023-02-24 Fri 11:45]--[2023-02-24 Fri 12:30]
907 | - State "DONE" from "STARTED" [2023-02-23 Thu 12:30]
908 | - State "STARTED" from "TODO" [2023-02-23 Thu 11:56]
909 | CLOCK: [2023-02-23 Thu 11:56]--[2023-02-23 Thu 12:30]
910 | - State "DONE" from "STARTED" [2023-02-22 Wed 12:30]
911 | - State "STARTED" from "TODO" [2023-02-22 Wed 12:17]
912 | CLOCK: [2023-02-22 Wed 12:17]--[2023-02-22 Wed 12:30]
913 | - State "DONE" from "STARTED" [2023-02-21 Tue 12:30]
914 | - State "STARTED" from "TODO" [2023-02-21 Tue 12:23]
915 | CLOCK: [2023-02-21 Tue 12:23]--[2023-02-21 Tue 12:30]
916 | - State "DONE" from "STARTED" [2023-02-20 Mon 12:30]
917 | - State "STARTED" from "TODO" [2023-02-20 Mon 12:28]
918 | CLOCK: [2023-02-20 Mon 12:28]--[2023-02-20 Mon 12:30]
919 | - State "DONE" from "STARTED" [2023-02-19 Sun 12:30]
920 | - State "STARTED" from "TODO" [2023-02-19 Sun 12:02]
921 | CLOCK: [2023-02-19 Sun 12:02]--[2023-02-19 Sun 12:30]
922 | - State "DONE" from "STARTED" [2023-02-18 Sat 12:30]
923 | - State "STARTED" from "TODO" [2023-02-18 Sat 12:30]
924 | CLOCK: [2023-02-18 Sat 12:30]--[2023-02-18 Sat 12:30]
925 | - State "DONE" from "STARTED" [2023-02-17 Fri 12:30]
926 | - State "STARTED" from "TODO" [2023-02-17 Fri 11:39]
927 | CLOCK: [2023-02-17 Fri 11:39]--[2023-02-17 Fri 12:30]
928 | - State "DONE" from "STARTED" [2023-02-16 Thu 12:30]
929 | - State "STARTED" from "TODO" [2023-02-16 Thu 12:19]
930 | CLOCK: [2023-02-16 Thu 12:19]--[2023-02-16 Thu 12:30]
931 | - State "DONE" from "STARTED" [2023-02-15 Wed 12:30]
932 | - State "STARTED" from "TODO" [2023-02-15 Wed 12:30]
933 | CLOCK: [2023-02-15 Wed 12:30]--[2023-02-15 Wed 12:30]
934 | - State "DONE" from "STARTED" [2023-02-14 Tue 12:30]
935 | - State "STARTED" from "TODO" [2023-02-14 Tue 12:01]
936 | CLOCK: [2023-02-14 Tue 12:01]--[2023-02-14 Tue 12:30]
937 | - State "DONE" from "STARTED" [2023-02-13 Mon 12:30]
938 | - State "STARTED" from "TODO" [2023-02-13 Mon 12:03]
939 | CLOCK: [2023-02-13 Mon 12:03]--[2023-02-13 Mon 12:30]
940 | - State "DONE" from "STARTED" [2023-02-12 Sun 12:30]
941 | - State "STARTED" from "TODO" [2023-02-12 Sun 11:31]
942 | CLOCK: [2023-02-12 Sun 11:31]--[2023-02-12 Sun 12:30]
943 | - State "DONE" from "STARTED" [2023-02-11 Sat 12:30]
944 | - State "STARTED" from "TODO" [2023-02-11 Sat 12:19]
945 | CLOCK: [2023-02-11 Sat 12:19]--[2023-02-11 Sat 12:30]
946 | - State "DONE" from "STARTED" [2023-02-10 Fri 12:30]
947 | - State "STARTED" from "TODO" [2023-02-10 Fri 11:45]
948 | CLOCK: [2023-02-10 Fri 11:45]--[2023-02-10 Fri 12:30]
949 | - State "DONE" from "STARTED" [2023-02-09 Thu 12:30]
950 | - State "STARTED" from "TODO" [2023-02-09 Thu 11:50]
951 | CLOCK: [2023-02-09 Thu 11:50]--[2023-02-09 Thu 12:30]
952 | - State "DONE" from "STARTED" [2023-02-08 Wed 12:30]
953 | - State "STARTED" from "TODO" [2023-02-08 Wed 11:38]
954 | CLOCK: [2023-02-08 Wed 11:38]--[2023-02-08 Wed 12:30]
955 | - State "DONE" from "STARTED" [2023-02-07 Tue 12:30]
956 | - State "STARTED" from "TODO" [2023-02-07 Tue 12:11]
957 | CLOCK: [2023-02-07 Tue 12:11]--[2023-02-07 Tue 12:30]
958 | - State "DONE" from "STARTED" [2023-02-06 Mon 12:30]
959 | - State "STARTED" from "TODO" [2023-02-06 Mon 12:06]
960 | CLOCK: [2023-02-06 Mon 12:06]--[2023-02-06 Mon 12:30]
961 | - State "DONE" from "STARTED" [2023-02-05 Sun 12:30]
962 | - State "STARTED" from "TODO" [2023-02-05 Sun 12:00]
963 | CLOCK: [2023-02-05 Sun 12:00]--[2023-02-05 Sun 12:30]
964 | - State "DONE" from "STARTED" [2023-02-04 Sat 12:30]
965 | - State "STARTED" from "TODO" [2023-02-04 Sat 11:39]
966 | CLOCK: [2023-02-04 Sat 11:39]--[2023-02-04 Sat 12:30]
967 | - State "DONE" from "STARTED" [2023-02-03 Fri 12:30]
968 | - State "STARTED" from "TODO" [2023-02-03 Fri 12:10]
969 | CLOCK: [2023-02-03 Fri 12:10]--[2023-02-03 Fri 12:30]
970 | - State "DONE" from "STARTED" [2023-02-02 Thu 12:30]
971 | - State "STARTED" from "TODO" [2023-02-02 Thu 11:22]
972 | CLOCK: [2023-02-02 Thu 11:22]--[2023-02-02 Thu 12:30]
973 | - State "DONE" from "STARTED" [2023-02-01 Wed 12:30]
974 | - State "STARTED" from "TODO" [2023-02-01 Wed 11:21]
975 | CLOCK: [2023-02-01 Wed 11:21]--[2023-02-01 Wed 12:30]
976 | - State "DONE" from "STARTED" [2023-01-31 Tue 12:30]
977 | - State "STARTED" from "TODO" [2023-01-31 Tue 12:26]
978 | CLOCK: [2023-01-31 Tue 12:26]--[2023-01-31 Tue 12:30]
979 | - State "DONE" from "STARTED" [2023-01-30 Mon 12:30]
980 | - State "STARTED" from "TODO" [2023-01-30 Mon 11:47]
981 | CLOCK: [2023-01-30 Mon 11:47]--[2023-01-30 Mon 12:30]
982 | - State "DONE" from "STARTED" [2023-01-29 Sun 12:30]
983 | - State "STARTED" from "TODO" [2023-01-29 Sun 11:36]
984 | CLOCK: [2023-01-29 Sun 11:36]--[2023-01-29 Sun 12:30]
985 | - State "DONE" from "STARTED" [2023-01-28 Sat 12:30]
986 | - State "STARTED" from "TODO" [2023-01-28 Sat 12:21]
987 | CLOCK: [2023-01-28 Sat 12:21]--[2023-01-28 Sat 12:30]
988 | - State "DONE" from "STARTED" [2023-01-27 Fri 12:30]
989 | - State "STARTED" from "TODO" [2023-01-27 Fri 12:10]
990 | CLOCK: [2023-01-27 Fri 12:10]--[2023-01-27 Fri 12:30]
991 | - State "DONE" from "STARTED" [2023-01-26 Thu 12:30]
992 | - State "STARTED" from "TODO" [2023-01-26 Thu 12:07]
993 | CLOCK: [2023-01-26 Thu 12:07]--[2023-01-26 Thu 12:30]
994 | - State "DONE" from "STARTED" [2023-01-25 Wed 12:30]
995 | - State "STARTED" from "TODO" [2023-01-25 Wed 12:18]
996 | CLOCK: [2023-01-25 Wed 12:18]--[2023-01-25 Wed 12:30]
997 | - State "DONE" from "STARTED" [2023-01-24 Tue 12:30]
998 | - State "STARTED" from "TODO" [2023-01-24 Tue 11:57]
999 | CLOCK: [2023-01-24 Tue 11:57]--[2023-01-24 Tue 12:30]
1000 | - State "DONE" from "STARTED" [2023-01-23 Mon 12:30]
1001 | - State "STARTED" from "TODO" [2023-01-23 Mon 11:46]
1002 | CLOCK: [2023-01-23 Mon 11:46]--[2023-01-23 Mon 12:30]
1003 | - State "DONE" from "STARTED" [2023-01-22 Sun 12:30]
1004 | - State "STARTED" from "TODO" [2023-01-22 Sun 11:39]
1005 | CLOCK: [2023-01-22 Sun 11:39]--[2023-01-22 Sun 12:30]
1006 | - State "DONE" from "STARTED" [2023-01-21 Sat 12:30]
1007 | - State "STARTED" from "TODO" [2023-01-21 Sat 11:44]
1008 | CLOCK: [2023-01-21 Sat 11:44]--[2023-01-21 Sat 12:30]
1009 | - State "DONE" from "STARTED" [2023-01-20 Fri 12:30]
1010 | - State "STARTED" from "TODO" [2023-01-20 Fri 11:30]
1011 | CLOCK: [2023-01-20 Fri 11:30]--[2023-01-20 Fri 12:30]
1012 | - State "DONE" from "STARTED" [2023-01-19 Thu 12:30]
1013 | - State "STARTED" from "TODO" [2023-01-19 Thu 12:17]
1014 | CLOCK: [2023-01-19 Thu 12:17]--[2023-01-19 Thu 12:30]
1015 | - State "DONE" from "STARTED" [2023-01-18 Wed 12:30]
1016 | - State "STARTED" from "TODO" [2023-01-18 Wed 11:44]
1017 | CLOCK: [2023-01-18 Wed 11:44]--[2023-01-18 Wed 12:30]
1018 | - State "DONE" from "STARTED" [2023-01-17 Tue 12:30]
1019 | - State "STARTED" from "TODO" [2023-01-17 Tue 11:26]
1020 | CLOCK: [2023-01-17 Tue 11:26]--[2023-01-17 Tue 12:30]
1021 | - State "DONE" from "STARTED" [2023-01-16 Mon 12:30]
1022 | - State "STARTED" from "TODO" [2023-01-16 Mon 11:49]
1023 | CLOCK: [2023-01-16 Mon 11:49]--[2023-01-16 Mon 12:30]
1024 | - State "DONE" from "STARTED" [2023-01-15 Sun 12:30]
1025 | - State "STARTED" from "TODO" [2023-01-15 Sun 12:26]
1026 | CLOCK: [2023-01-15 Sun 12:26]--[2023-01-15 Sun 12:30]
1027 | - State "DONE" from "STARTED" [2023-01-14 Sat 12:30]
1028 | - State "STARTED" from "TODO" [2023-01-14 Sat 12:03]
1029 | CLOCK: [2023-01-14 Sat 12:03]--[2023-01-14 Sat 12:30]
1030 | - State "DONE" from "STARTED" [2023-01-13 Fri 12:30]
1031 | - State "STARTED" from "TODO" [2023-01-13 Fri 11:22]
1032 | CLOCK: [2023-01-13 Fri 11:22]--[2023-01-13 Fri 12:30]
1033 | - State "DONE" from "STARTED" [2023-01-12 Thu 12:30]
1034 | - State "STARTED" from "TODO" [2023-01-12 Thu 11:28]
1035 | CLOCK: [2023-01-12 Thu 11:28]--[2023-01-12 Thu 12:30]
1036 | - State "DONE" from "STARTED" [2023-01-11 Wed 12:30]
1037 | - State "STARTED" from "TODO" [2023-01-11 Wed 11:33]
1038 | CLOCK: [2023-01-11 Wed 11:33]--[2023-01-11 Wed 12:30]
1039 | - State "DONE" from "STARTED" [2023-01-10 Tue 12:30]
1040 | - State "STARTED" from "TODO" [2023-01-10 Tue 11:37]
1041 | CLOCK: [2023-01-10 Tue 11:37]--[2023-01-10 Tue 12:30]
1042 | - State "DONE" from "STARTED" [2023-01-09 Mon 12:30]
1043 | - State "STARTED" from "TODO" [2023-01-09 Mon 12:22]
1044 | CLOCK: [2023-01-09 Mon 12:22]--[2023-01-09 Mon 12:30]
1045 | - State "DONE" from "STARTED" [2023-01-08 Sun 12:30]
1046 | - State "STARTED" from "TODO" [2023-01-08 Sun 11:52]
1047 | CLOCK: [2023-01-08 Sun 11:52]--[2023-01-08 Sun 12:30]
1048 | - State "DONE" from "STARTED" [2023-01-07 Sat 12:30]
1049 | - State "STARTED" from "TODO" [2023-01-07 Sat 11:34]
1050 | CLOCK: [2023-01-07 Sat 11:34]--[2023-01-07 Sat 12:30]
1051 | - State "DONE" from "STARTED" [2023-01-06 Fri 12:30]
1052 | - State "STARTED" from "TODO" [2023-01-06 Fri 11:47]
1053 | CLOCK: [2023-01-06 Fri 11:47]--[2023-01-06 Fri 12:30]
1054 | - State "DONE" from "STARTED" [2023-01-05 Thu 12:30]
1055 | - State "STARTED" from "TODO" [2023-01-05 Thu 11:45]
1056 | CLOCK: [2023-01-05 Thu 11:45]--[2023-01-05 Thu 12:30]
1057 | - State "DONE" from "STARTED" [2023-01-04 Wed 12:30]
1058 | - State "STARTED" from "TODO" [2023-01-04 Wed 11:28]
1059 | CLOCK: [2023-01-04 Wed 11:28]--[2023-01-04 Wed 12:30]
1060 | - State "DONE" from "STARTED" [2023-01-03 Tue 12:30]
1061 | - State "STARTED" from "TODO" [2023-01-03 Tue 12:05]
1062 | CLOCK: [2023-01-03 Tue 12:05]--[2023-01-03 Tue 12:30]
1063 | - State "DONE" from "STARTED" [2023-01-02 Mon 12:30]
1064 | - State "STARTED" from "TODO" [2023-01-02 Mon 12:21]
1065 | CLOCK: [2023-01-02 Mon 12:21]--[2023-01-02 Mon 12:30]
1066 | - State "DONE" from "STARTED" [2023-01-01 Sun 12:30]
1067 | - State "STARTED" from "TODO" [2023-01-01 Sun 11:37]
1068 | CLOCK: [2023-01-01 Sun 11:37]--[2023-01-01 Sun 12:30] => 0:53
1069 | :END:
1070 | * TODO Habit C
1071 | SCHEDULED: <2023-06-29 Thu .+1d>
1072 | :PROPERTIES:
1073 | :STYLE: habit
1074 | :LAST_REPEAT: [2023-06-28 Wed 12:30]
1075 | :END:
1076 | :LOGBOOK:
1077 | - State "DONE" from "STARTED" [2023-06-28 Wed 12:30]
1078 | - State "STARTED" from "TODO" [2023-06-28 Wed 11:47]
1079 | CLOCK: [2023-06-28 Wed 11:47]--[2023-06-28 Wed 12:30]
1080 | - State "DONE" from "STARTED" [2023-06-27 Tue 12:30]
1081 | - State "STARTED" from "TODO" [2023-06-27 Tue 11:24]
1082 | CLOCK: [2023-06-27 Tue 11:24]--[2023-06-27 Tue 12:30]
1083 | - State "DONE" from "STARTED" [2023-06-26 Mon 12:30]
1084 | - State "STARTED" from "TODO" [2023-06-26 Mon 11:47]
1085 | CLOCK: [2023-06-26 Mon 11:47]--[2023-06-26 Mon 12:30]
1086 | - State "DONE" from "STARTED" [2023-06-25 Sun 12:30]
1087 | - State "STARTED" from "TODO" [2023-06-25 Sun 12:17]
1088 | CLOCK: [2023-06-25 Sun 12:17]--[2023-06-25 Sun 12:30]
1089 | - State "DONE" from "STARTED" [2023-06-24 Sat 12:30]
1090 | - State "STARTED" from "TODO" [2023-06-24 Sat 12:11]
1091 | CLOCK: [2023-06-24 Sat 12:11]--[2023-06-24 Sat 12:30]
1092 | - State "DONE" from "STARTED" [2023-06-23 Fri 12:30]
1093 | - State "STARTED" from "TODO" [2023-06-23 Fri 12:15]
1094 | CLOCK: [2023-06-23 Fri 12:15]--[2023-06-23 Fri 12:30]
1095 | - State "DONE" from "STARTED" [2023-06-22 Thu 12:30]
1096 | - State "STARTED" from "TODO" [2023-06-22 Thu 12:27]
1097 | CLOCK: [2023-06-22 Thu 12:27]--[2023-06-22 Thu 12:30]
1098 | - State "DONE" from "STARTED" [2023-06-21 Wed 12:30]
1099 | - State "STARTED" from "TODO" [2023-06-21 Wed 11:55]
1100 | CLOCK: [2023-06-21 Wed 11:55]--[2023-06-21 Wed 12:30]
1101 | - State "DONE" from "STARTED" [2023-06-20 Tue 12:30]
1102 | - State "STARTED" from "TODO" [2023-06-20 Tue 12:28]
1103 | CLOCK: [2023-06-20 Tue 12:28]--[2023-06-20 Tue 12:30]
1104 | - State "DONE" from "STARTED" [2023-06-19 Mon 12:30]
1105 | - State "STARTED" from "TODO" [2023-06-19 Mon 11:43]
1106 | CLOCK: [2023-06-19 Mon 11:43]--[2023-06-19 Mon 12:30]
1107 | - State "DONE" from "STARTED" [2023-06-18 Sun 12:30]
1108 | - State "STARTED" from "TODO" [2023-06-18 Sun 12:07]
1109 | CLOCK: [2023-06-18 Sun 12:07]--[2023-06-18 Sun 12:30]
1110 | - State "DONE" from "STARTED" [2023-06-17 Sat 12:30]
1111 | - State "STARTED" from "TODO" [2023-06-17 Sat 12:04]
1112 | CLOCK: [2023-06-17 Sat 12:04]--[2023-06-17 Sat 12:30]
1113 | - State "DONE" from "STARTED" [2023-06-16 Fri 12:30]
1114 | - State "STARTED" from "TODO" [2023-06-16 Fri 11:49]
1115 | CLOCK: [2023-06-16 Fri 11:49]--[2023-06-16 Fri 12:30]
1116 | - State "DONE" from "STARTED" [2023-06-15 Thu 12:30]
1117 | - State "STARTED" from "TODO" [2023-06-15 Thu 11:42]
1118 | CLOCK: [2023-06-15 Thu 11:42]--[2023-06-15 Thu 12:30]
1119 | - State "DONE" from "STARTED" [2023-06-14 Wed 12:30]
1120 | - State "STARTED" from "TODO" [2023-06-14 Wed 11:44]
1121 | CLOCK: [2023-06-14 Wed 11:44]--[2023-06-14 Wed 12:30]
1122 | - State "DONE" from "STARTED" [2023-06-13 Tue 12:30]
1123 | - State "STARTED" from "TODO" [2023-06-13 Tue 12:06]
1124 | CLOCK: [2023-06-13 Tue 12:06]--[2023-06-13 Tue 12:30]
1125 | - State "DONE" from "STARTED" [2023-06-12 Mon 12:30]
1126 | - State "STARTED" from "TODO" [2023-06-12 Mon 12:05]
1127 | CLOCK: [2023-06-12 Mon 12:05]--[2023-06-12 Mon 12:30]
1128 | - State "DONE" from "STARTED" [2023-06-11 Sun 12:30]
1129 | - State "STARTED" from "TODO" [2023-06-11 Sun 12:26]
1130 | CLOCK: [2023-06-11 Sun 12:26]--[2023-06-11 Sun 12:30]
1131 | - State "DONE" from "STARTED" [2023-06-10 Sat 12:30]
1132 | - State "STARTED" from "TODO" [2023-06-10 Sat 12:16]
1133 | CLOCK: [2023-06-10 Sat 12:16]--[2023-06-10 Sat 12:30]
1134 | - State "DONE" from "STARTED" [2023-06-09 Fri 12:30]
1135 | - State "STARTED" from "TODO" [2023-06-09 Fri 12:18]
1136 | CLOCK: [2023-06-09 Fri 12:18]--[2023-06-09 Fri 12:30]
1137 | - State "DONE" from "STARTED" [2023-06-08 Thu 12:30]
1138 | - State "STARTED" from "TODO" [2023-06-08 Thu 12:01]
1139 | CLOCK: [2023-06-08 Thu 12:01]--[2023-06-08 Thu 12:30]
1140 | - State "DONE" from "STARTED" [2023-06-07 Wed 12:30]
1141 | - State "STARTED" from "TODO" [2023-06-07 Wed 11:51]
1142 | CLOCK: [2023-06-07 Wed 11:51]--[2023-06-07 Wed 12:30]
1143 | - State "DONE" from "STARTED" [2023-06-06 Tue 12:30]
1144 | - State "STARTED" from "TODO" [2023-06-06 Tue 11:47]
1145 | CLOCK: [2023-06-06 Tue 11:47]--[2023-06-06 Tue 12:30]
1146 | - State "DONE" from "STARTED" [2023-06-05 Mon 12:30]
1147 | - State "STARTED" from "TODO" [2023-06-05 Mon 12:29]
1148 | CLOCK: [2023-06-05 Mon 12:29]--[2023-06-05 Mon 12:30]
1149 | - State "DONE" from "STARTED" [2023-06-04 Sun 12:30]
1150 | - State "STARTED" from "TODO" [2023-06-04 Sun 12:12]
1151 | CLOCK: [2023-06-04 Sun 12:12]--[2023-06-04 Sun 12:30]
1152 | - State "DONE" from "STARTED" [2023-06-03 Sat 12:30]
1153 | - State "STARTED" from "TODO" [2023-06-03 Sat 12:16]
1154 | CLOCK: [2023-06-03 Sat 12:16]--[2023-06-03 Sat 12:30]
1155 | - State "DONE" from "STARTED" [2023-06-02 Fri 12:30]
1156 | - State "STARTED" from "TODO" [2023-06-02 Fri 11:55]
1157 | CLOCK: [2023-06-02 Fri 11:55]--[2023-06-02 Fri 12:30]
1158 | - State "DONE" from "STARTED" [2023-06-01 Thu 12:30]
1159 | - State "STARTED" from "TODO" [2023-06-01 Thu 11:57]
1160 | CLOCK: [2023-06-01 Thu 11:57]--[2023-06-01 Thu 12:30]
1161 | - State "DONE" from "STARTED" [2023-05-31 Wed 12:30]
1162 | - State "STARTED" from "TODO" [2023-05-31 Wed 12:00]
1163 | CLOCK: [2023-05-31 Wed 12:00]--[2023-05-31 Wed 12:30]
1164 | - State "DONE" from "STARTED" [2023-05-30 Tue 12:30]
1165 | - State "STARTED" from "TODO" [2023-05-30 Tue 11:59]
1166 | CLOCK: [2023-05-30 Tue 11:59]--[2023-05-30 Tue 12:30]
1167 | - State "DONE" from "STARTED" [2023-05-29 Mon 12:30]
1168 | - State "STARTED" from "TODO" [2023-05-29 Mon 11:21]
1169 | CLOCK: [2023-05-29 Mon 11:21]--[2023-05-29 Mon 12:30]
1170 | - State "DONE" from "STARTED" [2023-05-28 Sun 12:30]
1171 | - State "STARTED" from "TODO" [2023-05-28 Sun 12:19]
1172 | CLOCK: [2023-05-28 Sun 12:19]--[2023-05-28 Sun 12:30]
1173 | - State "DONE" from "STARTED" [2023-05-27 Sat 12:30]
1174 | - State "STARTED" from "TODO" [2023-05-27 Sat 11:27]
1175 | CLOCK: [2023-05-27 Sat 11:27]--[2023-05-27 Sat 12:30]
1176 | - State "DONE" from "STARTED" [2023-05-26 Fri 12:30]
1177 | - State "STARTED" from "TODO" [2023-05-26 Fri 12:02]
1178 | CLOCK: [2023-05-26 Fri 12:02]--[2023-05-26 Fri 12:30]
1179 | - State "DONE" from "STARTED" [2023-05-25 Thu 12:30]
1180 | - State "STARTED" from "TODO" [2023-05-25 Thu 12:22]
1181 | CLOCK: [2023-05-25 Thu 12:22]--[2023-05-25 Thu 12:30]
1182 | - State "DONE" from "STARTED" [2023-05-24 Wed 12:30]
1183 | - State "STARTED" from "TODO" [2023-05-24 Wed 12:06]
1184 | CLOCK: [2023-05-24 Wed 12:06]--[2023-05-24 Wed 12:30]
1185 | - State "DONE" from "STARTED" [2023-05-23 Tue 12:30]
1186 | - State "STARTED" from "TODO" [2023-05-23 Tue 11:36]
1187 | CLOCK: [2023-05-23 Tue 11:36]--[2023-05-23 Tue 12:30]
1188 | - State "DONE" from "STARTED" [2023-05-22 Mon 12:30]
1189 | - State "STARTED" from "TODO" [2023-05-22 Mon 11:42]
1190 | CLOCK: [2023-05-22 Mon 11:42]--[2023-05-22 Mon 12:30]
1191 | - State "DONE" from "STARTED" [2023-05-21 Sun 12:30]
1192 | - State "STARTED" from "TODO" [2023-05-21 Sun 12:07]
1193 | CLOCK: [2023-05-21 Sun 12:07]--[2023-05-21 Sun 12:30]
1194 | - State "DONE" from "STARTED" [2023-05-20 Sat 12:30]
1195 | - State "STARTED" from "TODO" [2023-05-20 Sat 11:33]
1196 | CLOCK: [2023-05-20 Sat 11:33]--[2023-05-20 Sat 12:30]
1197 | - State "DONE" from "STARTED" [2023-05-19 Fri 12:30]
1198 | - State "STARTED" from "TODO" [2023-05-19 Fri 11:34]
1199 | CLOCK: [2023-05-19 Fri 11:34]--[2023-05-19 Fri 12:30]
1200 | - State "DONE" from "STARTED" [2023-05-18 Thu 12:30]
1201 | - State "STARTED" from "TODO" [2023-05-18 Thu 12:05]
1202 | CLOCK: [2023-05-18 Thu 12:05]--[2023-05-18 Thu 12:30]
1203 | - State "DONE" from "STARTED" [2023-05-17 Wed 12:30]
1204 | - State "STARTED" from "TODO" [2023-05-17 Wed 12:13]
1205 | CLOCK: [2023-05-17 Wed 12:13]--[2023-05-17 Wed 12:30]
1206 | - State "DONE" from "STARTED" [2023-05-16 Tue 12:30]
1207 | - State "STARTED" from "TODO" [2023-05-16 Tue 11:22]
1208 | CLOCK: [2023-05-16 Tue 11:22]--[2023-05-16 Tue 12:30]
1209 | - State "DONE" from "STARTED" [2023-05-15 Mon 12:30]
1210 | - State "STARTED" from "TODO" [2023-05-15 Mon 11:55]
1211 | CLOCK: [2023-05-15 Mon 11:55]--[2023-05-15 Mon 12:30]
1212 | - State "DONE" from "STARTED" [2023-05-14 Sun 12:30]
1213 | - State "STARTED" from "TODO" [2023-05-14 Sun 12:06]
1214 | CLOCK: [2023-05-14 Sun 12:06]--[2023-05-14 Sun 12:30]
1215 | - State "DONE" from "STARTED" [2023-05-13 Sat 12:30]
1216 | - State "STARTED" from "TODO" [2023-05-13 Sat 12:25]
1217 | CLOCK: [2023-05-13 Sat 12:25]--[2023-05-13 Sat 12:30]
1218 | - State "DONE" from "STARTED" [2023-05-12 Fri 12:30]
1219 | - State "STARTED" from "TODO" [2023-05-12 Fri 12:15]
1220 | CLOCK: [2023-05-12 Fri 12:15]--[2023-05-12 Fri 12:30]
1221 | - State "DONE" from "STARTED" [2023-05-11 Thu 12:30]
1222 | - State "STARTED" from "TODO" [2023-05-11 Thu 11:33]
1223 | CLOCK: [2023-05-11 Thu 11:33]--[2023-05-11 Thu 12:30]
1224 | - State "DONE" from "STARTED" [2023-05-10 Wed 12:30]
1225 | - State "STARTED" from "TODO" [2023-05-10 Wed 11:45]
1226 | CLOCK: [2023-05-10 Wed 11:45]--[2023-05-10 Wed 12:30]
1227 | - State "DONE" from "STARTED" [2023-05-09 Tue 12:30]
1228 | - State "STARTED" from "TODO" [2023-05-09 Tue 11:35]
1229 | CLOCK: [2023-05-09 Tue 11:35]--[2023-05-09 Tue 12:30]
1230 | - State "DONE" from "STARTED" [2023-05-08 Mon 12:30]
1231 | - State "STARTED" from "TODO" [2023-05-08 Mon 11:41]
1232 | CLOCK: [2023-05-08 Mon 11:41]--[2023-05-08 Mon 12:30]
1233 | - State "DONE" from "STARTED" [2023-05-07 Sun 12:30]
1234 | - State "STARTED" from "TODO" [2023-05-07 Sun 12:26]
1235 | CLOCK: [2023-05-07 Sun 12:26]--[2023-05-07 Sun 12:30]
1236 | - State "DONE" from "STARTED" [2023-05-06 Sat 12:30]
1237 | - State "STARTED" from "TODO" [2023-05-06 Sat 12:00]
1238 | CLOCK: [2023-05-06 Sat 12:00]--[2023-05-06 Sat 12:30]
1239 | - State "DONE" from "STARTED" [2023-05-05 Fri 12:30]
1240 | - State "STARTED" from "TODO" [2023-05-05 Fri 11:36]
1241 | CLOCK: [2023-05-05 Fri 11:36]--[2023-05-05 Fri 12:30]
1242 | - State "DONE" from "STARTED" [2023-05-04 Thu 12:30]
1243 | - State "STARTED" from "TODO" [2023-05-04 Thu 11:51]
1244 | CLOCK: [2023-05-04 Thu 11:51]--[2023-05-04 Thu 12:30]
1245 | - State "DONE" from "STARTED" [2023-05-03 Wed 12:30]
1246 | - State "STARTED" from "TODO" [2023-05-03 Wed 11:39]
1247 | CLOCK: [2023-05-03 Wed 11:39]--[2023-05-03 Wed 12:30]
1248 | - State "DONE" from "STARTED" [2023-05-02 Tue 12:30]
1249 | - State "STARTED" from "TODO" [2023-05-02 Tue 12:10]
1250 | CLOCK: [2023-05-02 Tue 12:10]--[2023-05-02 Tue 12:30]
1251 | - State "DONE" from "STARTED" [2023-05-01 Mon 12:30]
1252 | - State "STARTED" from "TODO" [2023-05-01 Mon 11:43]
1253 | CLOCK: [2023-05-01 Mon 11:43]--[2023-05-01 Mon 12:30]
1254 | - State "DONE" from "STARTED" [2023-04-04 Tue 12:30]
1255 | - State "STARTED" from "TODO" [2023-04-04 Tue 12:17]
1256 | CLOCK: [2023-04-04 Tue 12:17]--[2023-04-04 Tue 12:30]
1257 | - State "DONE" from "STARTED" [2023-04-03 Mon 12:30]
1258 | - State "STARTED" from "TODO" [2023-04-03 Mon 11:56]
1259 | CLOCK: [2023-04-03 Mon 11:56]--[2023-04-03 Mon 12:30]
1260 | - State "DONE" from "STARTED" [2023-04-02 Sun 12:30]
1261 | - State "STARTED" from "TODO" [2023-04-02 Sun 11:23]
1262 | CLOCK: [2023-04-02 Sun 11:23]--[2023-04-02 Sun 12:30]
1263 | - State "DONE" from "STARTED" [2023-04-01 Sat 12:30]
1264 | - State "STARTED" from "TODO" [2023-04-01 Sat 12:16]
1265 | CLOCK: [2023-04-01 Sat 12:16]--[2023-04-01 Sat 12:30]
1266 | - State "DONE" from "STARTED" [2023-03-31 Fri 12:30]
1267 | - State "STARTED" from "TODO" [2023-03-31 Fri 11:45]
1268 | CLOCK: [2023-03-31 Fri 11:45]--[2023-03-31 Fri 12:30]
1269 | - State "DONE" from "STARTED" [2023-03-30 Thu 12:30]
1270 | - State "STARTED" from "TODO" [2023-03-30 Thu 11:38]
1271 | CLOCK: [2023-03-30 Thu 11:38]--[2023-03-30 Thu 12:30]
1272 | - State "DONE" from "STARTED" [2023-03-29 Wed 12:30]
1273 | - State "STARTED" from "TODO" [2023-03-29 Wed 12:17]
1274 | CLOCK: [2023-03-29 Wed 12:17]--[2023-03-29 Wed 12:30]
1275 | - State "DONE" from "STARTED" [2023-03-28 Tue 12:30]
1276 | - State "STARTED" from "TODO" [2023-03-28 Tue 11:32]
1277 | CLOCK: [2023-03-28 Tue 11:32]--[2023-03-28 Tue 12:30]
1278 | - State "DONE" from "STARTED" [2023-03-27 Mon 12:30]
1279 | - State "STARTED" from "TODO" [2023-03-27 Mon 11:57]
1280 | CLOCK: [2023-03-27 Mon 11:57]--[2023-03-27 Mon 12:30]
1281 | - State "DONE" from "STARTED" [2023-03-26 Sun 12:30]
1282 | - State "STARTED" from "TODO" [2023-03-26 Sun 12:22]
1283 | CLOCK: [2023-03-26 Sun 12:22]--[2023-03-26 Sun 12:30]
1284 | - State "DONE" from "STARTED" [2023-03-25 Sat 12:30]
1285 | - State "STARTED" from "TODO" [2023-03-25 Sat 12:11]
1286 | CLOCK: [2023-03-25 Sat 12:11]--[2023-03-25 Sat 12:30]
1287 | - State "DONE" from "STARTED" [2023-03-24 Fri 12:30]
1288 | - State "STARTED" from "TODO" [2023-03-24 Fri 11:36]
1289 | CLOCK: [2023-03-24 Fri 11:36]--[2023-03-24 Fri 12:30]
1290 | - State "DONE" from "STARTED" [2023-03-23 Thu 12:30]
1291 | - State "STARTED" from "TODO" [2023-03-23 Thu 11:26]
1292 | CLOCK: [2023-03-23 Thu 11:26]--[2023-03-23 Thu 12:30]
1293 | - State "DONE" from "STARTED" [2023-03-22 Wed 12:30]
1294 | - State "STARTED" from "TODO" [2023-03-22 Wed 12:06]
1295 | CLOCK: [2023-03-22 Wed 12:06]--[2023-03-22 Wed 12:30]
1296 | - State "DONE" from "STARTED" [2023-03-21 Tue 12:30]
1297 | - State "STARTED" from "TODO" [2023-03-21 Tue 11:50]
1298 | CLOCK: [2023-03-21 Tue 11:50]--[2023-03-21 Tue 12:30]
1299 | - State "DONE" from "STARTED" [2023-03-20 Mon 12:30]
1300 | - State "STARTED" from "TODO" [2023-03-20 Mon 11:59]
1301 | CLOCK: [2023-03-20 Mon 11:59]--[2023-03-20 Mon 12:30]
1302 | - State "DONE" from "STARTED" [2023-03-19 Sun 12:30]
1303 | - State "STARTED" from "TODO" [2023-03-19 Sun 12:21]
1304 | CLOCK: [2023-03-19 Sun 12:21]--[2023-03-19 Sun 12:30]
1305 | - State "DONE" from "STARTED" [2023-03-18 Sat 12:30]
1306 | - State "STARTED" from "TODO" [2023-03-18 Sat 12:07]
1307 | CLOCK: [2023-03-18 Sat 12:07]--[2023-03-18 Sat 12:30]
1308 | - State "DONE" from "STARTED" [2023-03-17 Fri 12:30]
1309 | - State "STARTED" from "TODO" [2023-03-17 Fri 12:21]
1310 | CLOCK: [2023-03-17 Fri 12:21]--[2023-03-17 Fri 12:30]
1311 | - State "DONE" from "STARTED" [2023-03-16 Thu 12:30]
1312 | - State "STARTED" from "TODO" [2023-03-16 Thu 11:56]
1313 | CLOCK: [2023-03-16 Thu 11:56]--[2023-03-16 Thu 12:30]
1314 | - State "DONE" from "STARTED" [2023-03-15 Wed 12:30]
1315 | - State "STARTED" from "TODO" [2023-03-15 Wed 12:28]
1316 | CLOCK: [2023-03-15 Wed 12:28]--[2023-03-15 Wed 12:30]
1317 | - State "DONE" from "STARTED" [2023-03-14 Tue 12:30]
1318 | - State "STARTED" from "TODO" [2023-03-14 Tue 12:12]
1319 | CLOCK: [2023-03-14 Tue 12:12]--[2023-03-14 Tue 12:30]
1320 | - State "DONE" from "STARTED" [2023-03-13 Mon 12:30]
1321 | - State "STARTED" from "TODO" [2023-03-13 Mon 12:13]
1322 | CLOCK: [2023-03-13 Mon 12:13]--[2023-03-13 Mon 12:30]
1323 | - State "DONE" from "STARTED" [2023-03-12 Sun 12:30]
1324 | - State "STARTED" from "TODO" [2023-03-12 Sun 12:24]
1325 | CLOCK: [2023-03-12 Sun 12:24]--[2023-03-12 Sun 12:30]
1326 | - State "DONE" from "STARTED" [2023-03-11 Sat 12:30]
1327 | - State "STARTED" from "TODO" [2023-03-11 Sat 11:39]
1328 | CLOCK: [2023-03-11 Sat 11:39]--[2023-03-11 Sat 12:30]
1329 | - State "DONE" from "STARTED" [2023-03-10 Fri 12:30]
1330 | - State "STARTED" from "TODO" [2023-03-10 Fri 12:19]
1331 | CLOCK: [2023-03-10 Fri 12:19]--[2023-03-10 Fri 12:30]
1332 | - State "DONE" from "STARTED" [2023-03-09 Thu 12:30]
1333 | - State "STARTED" from "TODO" [2023-03-09 Thu 11:29]
1334 | CLOCK: [2023-03-09 Thu 11:29]--[2023-03-09 Thu 12:30]
1335 | - State "DONE" from "STARTED" [2023-03-08 Wed 12:30]
1336 | - State "STARTED" from "TODO" [2023-03-08 Wed 12:13]
1337 | CLOCK: [2023-03-08 Wed 12:13]--[2023-03-08 Wed 12:30]
1338 | - State "DONE" from "STARTED" [2023-03-07 Tue 12:30]
1339 | - State "STARTED" from "TODO" [2023-03-07 Tue 12:04]
1340 | CLOCK: [2023-03-07 Tue 12:04]--[2023-03-07 Tue 12:30]
1341 | - State "DONE" from "STARTED" [2023-03-06 Mon 12:30]
1342 | - State "STARTED" from "TODO" [2023-03-06 Mon 11:21]
1343 | CLOCK: [2023-03-06 Mon 11:21]--[2023-03-06 Mon 12:30]
1344 | - State "DONE" from "STARTED" [2023-03-05 Sun 12:30]
1345 | - State "STARTED" from "TODO" [2023-03-05 Sun 12:25]
1346 | CLOCK: [2023-03-05 Sun 12:25]--[2023-03-05 Sun 12:30]
1347 | - State "DONE" from "STARTED" [2023-03-04 Sat 12:30]
1348 | - State "STARTED" from "TODO" [2023-03-04 Sat 12:18]
1349 | CLOCK: [2023-03-04 Sat 12:18]--[2023-03-04 Sat 12:30]
1350 | - State "DONE" from "STARTED" [2023-03-03 Fri 12:30]
1351 | - State "STARTED" from "TODO" [2023-03-03 Fri 11:26]
1352 | CLOCK: [2023-03-03 Fri 11:26]--[2023-03-03 Fri 12:30]
1353 | - State "DONE" from "STARTED" [2023-03-02 Thu 12:30]
1354 | - State "STARTED" from "TODO" [2023-03-02 Thu 12:30]
1355 | CLOCK: [2023-03-02 Thu 12:30]--[2023-03-02 Thu 12:30]
1356 | - State "DONE" from "STARTED" [2023-03-01 Wed 12:30]
1357 | - State "STARTED" from "TODO" [2023-03-01 Wed 12:13]
1358 | CLOCK: [2023-03-01 Wed 12:13]--[2023-03-01 Wed 12:30]
1359 | - State "DONE" from "STARTED" [2023-02-28 Tue 12:30]
1360 | - State "STARTED" from "TODO" [2023-02-28 Tue 11:27]
1361 | CLOCK: [2023-02-28 Tue 11:27]--[2023-02-28 Tue 12:30]
1362 | - State "DONE" from "STARTED" [2023-02-27 Mon 12:30]
1363 | - State "STARTED" from "TODO" [2023-02-27 Mon 11:51]
1364 | CLOCK: [2023-02-27 Mon 11:51]--[2023-02-27 Mon 12:30]
1365 | - State "DONE" from "STARTED" [2023-02-26 Sun 12:30]
1366 | - State "STARTED" from "TODO" [2023-02-26 Sun 11:47]
1367 | CLOCK: [2023-02-26 Sun 11:47]--[2023-02-26 Sun 12:30]
1368 | - State "DONE" from "STARTED" [2023-02-25 Sat 12:30]
1369 | - State "STARTED" from "TODO" [2023-02-25 Sat 11:21]
1370 | CLOCK: [2023-02-25 Sat 11:21]--[2023-02-25 Sat 12:30]
1371 | - State "DONE" from "STARTED" [2023-02-24 Fri 12:30]
1372 | - State "STARTED" from "TODO" [2023-02-24 Fri 12:22]
1373 | CLOCK: [2023-02-24 Fri 12:22]--[2023-02-24 Fri 12:30]
1374 | - State "DONE" from "STARTED" [2023-02-23 Thu 12:30]
1375 | - State "STARTED" from "TODO" [2023-02-23 Thu 12:26]
1376 | CLOCK: [2023-02-23 Thu 12:26]--[2023-02-23 Thu 12:30]
1377 | - State "DONE" from "STARTED" [2023-02-22 Wed 12:30]
1378 | - State "STARTED" from "TODO" [2023-02-22 Wed 12:05]
1379 | CLOCK: [2023-02-22 Wed 12:05]--[2023-02-22 Wed 12:30]
1380 | - State "DONE" from "STARTED" [2023-02-21 Tue 12:30]
1381 | - State "STARTED" from "TODO" [2023-02-21 Tue 12:27]
1382 | CLOCK: [2023-02-21 Tue 12:27]--[2023-02-21 Tue 12:30]
1383 | - State "DONE" from "STARTED" [2023-02-20 Mon 12:30]
1384 | - State "STARTED" from "TODO" [2023-02-20 Mon 11:41]
1385 | CLOCK: [2023-02-20 Mon 11:41]--[2023-02-20 Mon 12:30]
1386 | - State "DONE" from "STARTED" [2023-02-19 Sun 12:30]
1387 | - State "STARTED" from "TODO" [2023-02-19 Sun 11:28]
1388 | CLOCK: [2023-02-19 Sun 11:28]--[2023-02-19 Sun 12:30]
1389 | - State "DONE" from "STARTED" [2023-02-18 Sat 12:30]
1390 | - State "STARTED" from "TODO" [2023-02-18 Sat 12:07]
1391 | CLOCK: [2023-02-18 Sat 12:07]--[2023-02-18 Sat 12:30]
1392 | - State "DONE" from "STARTED" [2023-02-17 Fri 12:30]
1393 | - State "STARTED" from "TODO" [2023-02-17 Fri 11:47]
1394 | CLOCK: [2023-02-17 Fri 11:47]--[2023-02-17 Fri 12:30]
1395 | - State "DONE" from "STARTED" [2023-02-16 Thu 12:30]
1396 | - State "STARTED" from "TODO" [2023-02-16 Thu 11:25]
1397 | CLOCK: [2023-02-16 Thu 11:25]--[2023-02-16 Thu 12:30]
1398 | - State "DONE" from "STARTED" [2023-02-15 Wed 12:30]
1399 | - State "STARTED" from "TODO" [2023-02-15 Wed 11:24]
1400 | CLOCK: [2023-02-15 Wed 11:24]--[2023-02-15 Wed 12:30]
1401 | - State "DONE" from "STARTED" [2023-02-14 Tue 12:30]
1402 | - State "STARTED" from "TODO" [2023-02-14 Tue 12:28]
1403 | CLOCK: [2023-02-14 Tue 12:28]--[2023-02-14 Tue 12:30]
1404 | - State "DONE" from "STARTED" [2023-02-13 Mon 12:30]
1405 | - State "STARTED" from "TODO" [2023-02-13 Mon 11:54]
1406 | CLOCK: [2023-02-13 Mon 11:54]--[2023-02-13 Mon 12:30]
1407 | - State "DONE" from "STARTED" [2023-02-12 Sun 12:30]
1408 | - State "STARTED" from "TODO" [2023-02-12 Sun 12:21]
1409 | CLOCK: [2023-02-12 Sun 12:21]--[2023-02-12 Sun 12:30]
1410 | - State "DONE" from "STARTED" [2023-02-11 Sat 12:30]
1411 | - State "STARTED" from "TODO" [2023-02-11 Sat 12:19]
1412 | CLOCK: [2023-02-11 Sat 12:19]--[2023-02-11 Sat 12:30]
1413 | - State "DONE" from "STARTED" [2023-02-10 Fri 12:30]
1414 | - State "STARTED" from "TODO" [2023-02-10 Fri 12:26]
1415 | CLOCK: [2023-02-10 Fri 12:26]--[2023-02-10 Fri 12:30]
1416 | - State "DONE" from "STARTED" [2023-02-09 Thu 12:30]
1417 | - State "STARTED" from "TODO" [2023-02-09 Thu 12:18]
1418 | CLOCK: [2023-02-09 Thu 12:18]--[2023-02-09 Thu 12:30]
1419 | - State "DONE" from "STARTED" [2023-02-08 Wed 12:30]
1420 | - State "STARTED" from "TODO" [2023-02-08 Wed 12:26]
1421 | CLOCK: [2023-02-08 Wed 12:26]--[2023-02-08 Wed 12:30]
1422 | - State "DONE" from "STARTED" [2023-02-07 Tue 12:30]
1423 | - State "STARTED" from "TODO" [2023-02-07 Tue 12:19]
1424 | CLOCK: [2023-02-07 Tue 12:19]--[2023-02-07 Tue 12:30]
1425 | - State "DONE" from "STARTED" [2023-02-06 Mon 12:30]
1426 | - State "STARTED" from "TODO" [2023-02-06 Mon 11:22]
1427 | CLOCK: [2023-02-06 Mon 11:22]--[2023-02-06 Mon 12:30]
1428 | - State "DONE" from "STARTED" [2023-02-05 Sun 12:30]
1429 | - State "STARTED" from "TODO" [2023-02-05 Sun 11:41]
1430 | CLOCK: [2023-02-05 Sun 11:41]--[2023-02-05 Sun 12:30]
1431 | - State "DONE" from "STARTED" [2023-02-04 Sat 12:30]
1432 | - State "STARTED" from "TODO" [2023-02-04 Sat 12:00]
1433 | CLOCK: [2023-02-04 Sat 12:00]--[2023-02-04 Sat 12:30]
1434 | - State "DONE" from "STARTED" [2023-02-03 Fri 12:30]
1435 | - State "STARTED" from "TODO" [2023-02-03 Fri 12:16]
1436 | CLOCK: [2023-02-03 Fri 12:16]--[2023-02-03 Fri 12:30]
1437 | - State "DONE" from "STARTED" [2023-02-02 Thu 12:30]
1438 | - State "STARTED" from "TODO" [2023-02-02 Thu 11:26]
1439 | CLOCK: [2023-02-02 Thu 11:26]--[2023-02-02 Thu 12:30]
1440 | - State "DONE" from "STARTED" [2023-02-01 Wed 12:30]
1441 | - State "STARTED" from "TODO" [2023-02-01 Wed 12:07]
1442 | CLOCK: [2023-02-01 Wed 12:07]--[2023-02-01 Wed 12:30]
1443 | - State "DONE" from "STARTED" [2023-01-31 Tue 12:30]
1444 | - State "STARTED" from "TODO" [2023-01-31 Tue 12:15]
1445 | CLOCK: [2023-01-31 Tue 12:15]--[2023-01-31 Tue 12:30]
1446 | - State "DONE" from "STARTED" [2023-01-30 Mon 12:30]
1447 | - State "STARTED" from "TODO" [2023-01-30 Mon 12:30]
1448 | CLOCK: [2023-01-30 Mon 12:30]--[2023-01-30 Mon 12:30]
1449 | - State "DONE" from "STARTED" [2023-01-29 Sun 12:30]
1450 | - State "STARTED" from "TODO" [2023-01-29 Sun 11:22]
1451 | CLOCK: [2023-01-29 Sun 11:22]--[2023-01-29 Sun 12:30]
1452 | - State "DONE" from "STARTED" [2023-01-28 Sat 12:30]
1453 | - State "STARTED" from "TODO" [2023-01-28 Sat 11:53]
1454 | CLOCK: [2023-01-28 Sat 11:53]--[2023-01-28 Sat 12:30]
1455 | - State "DONE" from "STARTED" [2023-01-25 Wed 12:30]
1456 | - State "STARTED" from "TODO" [2023-01-25 Wed 11:56]
1457 | CLOCK: [2023-01-25 Wed 11:56]--[2023-01-25 Wed 12:30]
1458 | - State "DONE" from "STARTED" [2023-01-24 Tue 12:30]
1459 | - State "STARTED" from "TODO" [2023-01-24 Tue 11:57]
1460 | CLOCK: [2023-01-24 Tue 11:57]--[2023-01-24 Tue 12:30]
1461 | - State "DONE" from "STARTED" [2023-01-23 Mon 12:30]
1462 | - State "STARTED" from "TODO" [2023-01-23 Mon 11:21]
1463 | CLOCK: [2023-01-23 Mon 11:21]--[2023-01-23 Mon 12:30]
1464 | - State "DONE" from "STARTED" [2023-01-22 Sun 12:30]
1465 | - State "STARTED" from "TODO" [2023-01-22 Sun 11:45]
1466 | CLOCK: [2023-01-22 Sun 11:45]--[2023-01-22 Sun 12:30]
1467 | - State "DONE" from "STARTED" [2023-01-21 Sat 12:30]
1468 | - State "STARTED" from "TODO" [2023-01-21 Sat 11:45]
1469 | CLOCK: [2023-01-21 Sat 11:45]--[2023-01-21 Sat 12:30]
1470 | - State "DONE" from "STARTED" [2023-01-20 Fri 12:30]
1471 | - State "STARTED" from "TODO" [2023-01-20 Fri 11:33]
1472 | CLOCK: [2023-01-20 Fri 11:33]--[2023-01-20 Fri 12:30]
1473 | - State "DONE" from "STARTED" [2023-01-19 Thu 12:30]
1474 | - State "STARTED" from "TODO" [2023-01-19 Thu 11:31]
1475 | CLOCK: [2023-01-19 Thu 11:31]--[2023-01-19 Thu 12:30]
1476 | - State "DONE" from "STARTED" [2023-01-18 Wed 12:30]
1477 | - State "STARTED" from "TODO" [2023-01-18 Wed 12:05]
1478 | CLOCK: [2023-01-18 Wed 12:05]--[2023-01-18 Wed 12:30]
1479 | - State "DONE" from "STARTED" [2023-01-17 Tue 12:30]
1480 | - State "STARTED" from "TODO" [2023-01-17 Tue 11:33]
1481 | CLOCK: [2023-01-17 Tue 11:33]--[2023-01-17 Tue 12:30]
1482 | - State "DONE" from "STARTED" [2023-01-16 Mon 12:30]
1483 | - State "STARTED" from "TODO" [2023-01-16 Mon 12:09]
1484 | CLOCK: [2023-01-16 Mon 12:09]--[2023-01-16 Mon 12:30]
1485 | - State "DONE" from "STARTED" [2023-01-15 Sun 12:30]
1486 | - State "STARTED" from "TODO" [2023-01-15 Sun 11:57]
1487 | CLOCK: [2023-01-15 Sun 11:57]--[2023-01-15 Sun 12:30]
1488 | - State "DONE" from "STARTED" [2023-01-14 Sat 12:30]
1489 | - State "STARTED" from "TODO" [2023-01-14 Sat 12:02]
1490 | CLOCK: [2023-01-14 Sat 12:02]--[2023-01-14 Sat 12:30]
1491 | - State "DONE" from "STARTED" [2023-01-10 Tue 12:30]
1492 | - State "STARTED" from "TODO" [2023-01-10 Tue 11:21]
1493 | CLOCK: [2023-01-10 Tue 11:21]--[2023-01-10 Tue 12:30]
1494 | - State "DONE" from "STARTED" [2023-01-09 Mon 12:30]
1495 | - State "STARTED" from "TODO" [2023-01-09 Mon 11:32]
1496 | CLOCK: [2023-01-09 Mon 11:32]--[2023-01-09 Mon 12:30]
1497 | - State "DONE" from "STARTED" [2023-01-08 Sun 12:30]
1498 | - State "STARTED" from "TODO" [2023-01-08 Sun 12:03]
1499 | CLOCK: [2023-01-08 Sun 12:03]--[2023-01-08 Sun 12:30]
1500 | - State "DONE" from "STARTED" [2023-01-07 Sat 12:30]
1501 | - State "STARTED" from "TODO" [2023-01-07 Sat 11:31]
1502 | CLOCK: [2023-01-07 Sat 11:31]--[2023-01-07 Sat 12:30]
1503 | - State "DONE" from "STARTED" [2023-01-06 Fri 12:30]
1504 | - State "STARTED" from "TODO" [2023-01-06 Fri 12:07]
1505 | CLOCK: [2023-01-06 Fri 12:07]--[2023-01-06 Fri 12:30]
1506 | - State "DONE" from "STARTED" [2023-01-05 Thu 12:30]
1507 | - State "STARTED" from "TODO" [2023-01-05 Thu 12:15]
1508 | CLOCK: [2023-01-05 Thu 12:15]--[2023-01-05 Thu 12:30]
1509 | - State "DONE" from "STARTED" [2023-01-04 Wed 12:30]
1510 | - State "STARTED" from "TODO" [2023-01-04 Wed 11:29]
1511 | CLOCK: [2023-01-04 Wed 11:29]--[2023-01-04 Wed 12:30]
1512 | - State "DONE" from "STARTED" [2023-01-03 Tue 12:30]
1513 | - State "STARTED" from "TODO" [2023-01-03 Tue 11:55]
1514 | CLOCK: [2023-01-03 Tue 11:55]--[2023-01-03 Tue 12:30]
1515 | - State "DONE" from "STARTED" [2023-01-02 Mon 12:30]
1516 | - State "STARTED" from "TODO" [2023-01-02 Mon 11:56]
1517 | CLOCK: [2023-01-02 Mon 11:56]--[2023-01-02 Mon 12:30]
1518 | - State "DONE" from "STARTED" [2023-01-01 Sun 12:30]
1519 | - State "STARTED" from "TODO" [2023-01-01 Sun 11:42]
1520 | CLOCK: [2023-01-01 Sun 11:42]--[2023-01-01 Sun 12:30]
1521 | :END:
1522 |
--------------------------------------------------------------------------------
/images/screenshots/habit-statistics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Elilif/org-heatmap/4fe432d33a3f1caa7370e5f8d4bec2efba4827d7/images/screenshots/habit-statistics.png
--------------------------------------------------------------------------------
/images/screenshots/org-heatmap-habit-calendar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Elilif/org-heatmap/4fe432d33a3f1caa7370e5f8d4bec2efba4827d7/images/screenshots/org-heatmap-habit-calendar.gif
--------------------------------------------------------------------------------
/images/screenshots/org-heatmap-habit-overview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Elilif/org-heatmap/4fe432d33a3f1caa7370e5f8d4bec2efba4827d7/images/screenshots/org-heatmap-habit-overview.gif
--------------------------------------------------------------------------------
/org-heatmap.el:
--------------------------------------------------------------------------------
1 | ;;; org-heatmap.el --- Show heatmap in calendar -*- lexical-binding: t; -*-
2 |
3 | ;; Author: Eli Qian
4 | ;; Url: https://github.com/Elilif/.elemacs
5 | ;; Version: 0.1
6 | ;; Package-Requires: ((emacs "28.2") (org "9.6") (emacsql "20230220"))
7 | ;; Keywords: Calendar, Org, Habits
8 | ;; SPDX-License-Identifier: GPL-3.0-or-later
9 |
10 | (require 'calendar)
11 | (require 'org-habit)
12 | (require 'org-clock)
13 | (eval-when-compile
14 | (if (require 'sqlite nil t)
15 | (require 'emacsql-sqlite-builtin)
16 | (require 'emacsql-sqlite)))
17 |
18 | (defface org-heatmap-habit-statics '((t (:foreground "#B0BEC5"))) "")
19 |
20 | (defface org-heatmap-calendar-scale-1 '((((background light)) :foreground "black" :background "#c6e48b")
21 | (((background dark)) :foreground "white" :background "#c6e48b"))
22 | "Face for fewer activities.")
23 | (defface org-heatmap-calendar-scale-2 '((((background light)) :foreground "black" :background "#7bc96f")
24 | (((background dark)) :foreground "white" :background "#7bc96f"))
25 | "Face for few activities.")
26 | (defface org-heatmap-calendar-scale-3 '((((background light)) :foreground "black" :background "#239a3b")
27 | (((background dark)) :foreground "white" :background "#239a3b"))
28 | "Face for medium activities.")
29 | (defface org-heatmap-calendar-scale-4 '((((background light)) :foreground "black" :background "#196127")
30 | (((background dark)) :foreground "white" :background "#196127"))
31 | "Face for many activities.")
32 |
33 | (defface org-heatmap-overview-calendar-scale-1 '((((background light)) :foreground "#c6e48b")
34 | (((background dark)) :foreground "#c6e48b"))
35 | "Face for fewer activities.")
36 | (defface org-heatmap-overview-calendar-scale-2 '((((background light)) :foreground "#7bc96f")
37 | (((background dark)) :foreground "#7bc96f"))
38 | "Face for few activities.")
39 | (defface org-heatmap-overview-calendar-scale-3 '((((background light)) :foreground "#239a3b")
40 | (((background dark)) :foreground "#239a3b"))
41 | "Face for medium activities.")
42 | (defface org-heatmap-overview-calendar-scale-4 '((((background light)) :foreground "#196127")
43 | (((background dark)) :foreground "#196127"))
44 | "Face for many activities.")
45 |
46 | (defface org-heatmap-empty-rectangle '((t (:foreground "#B0BEC5"))) "")
47 |
48 | (defgroup org-heatmap nil
49 | "Settings for `org-heatmap'."
50 | :group 'org)
51 |
52 | (defcustom org-heatmap-database-connector (if (and (progn
53 | (require 'emacsql-sqlite-builtin nil t)
54 | (functionp 'emacsql-sqlite-builtin))
55 | (functionp 'sqlite-open))
56 | 'sqlite-builtin
57 | 'sqlite)
58 | "The database connector used by org-heatmap.
59 |
60 | If you are using Emacs 29, then the recommended connector is
61 | `sqlite-builtin', which uses the new builtin support for SQLite.
62 | You need to install the `emacsql-sqlite-builtin' package to use
63 | this connector.
64 | If you are using an older Emacs release, please `sqlite'"
65 | :group 'org-heatmap
66 | :type '(choice
67 | (const sqlite-builtin)
68 | (const sqlite)))
69 |
70 | (defcustom org-heatmap-enable-habit-statics t
71 | "Whether to shoaw habit statics.
72 |
73 | Add three data after the habit entry: (current streak, max streak
74 | and total done number).
75 |
76 | *Note*: If you want to chage this variable, please set it before
77 | loading org-heatmap or use `setopt'."
78 | :group 'org-heatmap
79 | :type 'boolean
80 | :set (lambda (sym val)
81 | (set-default sym val)
82 | (cond
83 | (val
84 | (advice-add 'org-habit-parse-todo :around #'org-heatmap-habit-parse-todo-advice)
85 | (add-hook 'org-agenda-finalize-hook #'org-heatmap-habit-add-streak))
86 | (t
87 | (advice-remove 'org-habit-parse-todo #'org-heatmap-habit-parse-todo-advice)
88 | (remove-hook 'org-agenda-finalize-hook #'org-heatmap-habit-add-streak)))))
89 |
90 | (defcustom org-heatmap-rectangle "██"
91 | ""
92 | :group 'org-heatmap
93 | :type 'string)
94 |
95 | (defcustom org-heatmap-threshold '((default . ((0 . default)
96 | (1 . org-heatmap-calendar-scale-1)
97 | (3 . org-heatmap-calendar-scale-2)
98 | (5 . org-heatmap-calendar-scale-3)
99 | (7 . org-heatmap-calendar-scale-4)))
100 | (habit . ((0 . org-heatmap-calendar-scale-1)
101 | (15 . org-heatmap-calendar-scale-2)
102 | (30 . org-heatmap-calendar-scale-3)
103 | (60 . org-heatmap-calendar-scale-4)))
104 | (overview . ((0 . org-heatmap-overview-calendar-scale-1)
105 | (15 . org-heatmap-overview-calendar-scale-2)
106 | (30 . org-heatmap-overview-calendar-scale-3)
107 | (60 . org-heatmap-overview-calendar-scale-4))))
108 | "Choose a different face based on the threshold arrived."
109 | :group 'org-heatmap
110 | :type '(repeat (cons symbol (cons number symbol))))
111 |
112 | (defcustom org-heatmap-get-threshold-function #'org-heatmap-get-threshold-defualt
113 | "Function used to get threshold."
114 | :group 'org-heatmap
115 | :type 'function)
116 |
117 | (defcustom org-heatmap-db-location "~/.emacs.d/var/org/org-heatmap.db"
118 | "Default database location."
119 | :group 'org-heatmap
120 | :type 'directory)
121 |
122 | (defvar org-heatmap-current-streak nil
123 | "Hash table used to store current streak.")
124 |
125 | ;;;; database
126 | ;;; the code in this section is mainly learned from org-roam.
127 |
128 | (declare-function emacsql-sqlite "ext:emacsql-sqlite")
129 | (declare-function emacsql-sqlite-builtin "ext:emacsql-sqlite-builtin")
130 | (defun org-heatmap-db--conn-fn ()
131 | "Return the function for creating the database connection."
132 | (cl-case org-heatmap-database-connector
133 | (sqlite-builtin
134 | (require 'emacsql-sqlite-builtin)
135 | #'emacsql-sqlite-builtin)
136 | (sqlite
137 | (require 'emacsql-sqlite)
138 | #'emacsql-sqlite)))
139 |
140 | (defvar org-heatmap--db nil
141 | "Current connected org-heatmap database.")
142 |
143 | (defun org-heatmap-db--close (&optional db)
144 | "Closes the database connection for database DB.
145 | If DB is nil, closes the database connection for the database in
146 | the current `org-heatmap-db-location'."
147 | (unless db
148 | (setq db org-heatmap--db))
149 | (when (and db (emacsql-live-p db))
150 | (emacsql-close db)
151 | (setq org-heatmap--db nil)))
152 |
153 | (defun org-heatmap-db--init (db table)
154 | "Initialize database DB with the correct schema and user version."
155 | (emacsql-with-transaction db
156 | (emacsql db [:create-table $s1 ([(date :primary-key)
157 | (num :not-null)])]
158 | table)))
159 |
160 | (defun org-heatmap-db ()
161 | "Connect Org-heatmap database."
162 | (unless (and org-heatmap--db
163 | (emacsql-live-p org-heatmap--db))
164 | (let ((init-db (not (file-exists-p org-heatmap-db-location))))
165 | (make-directory (file-name-directory org-heatmap-db-location) t)
166 | (let ((conn (funcall (org-heatmap-db--conn-fn) org-heatmap-db-location)))
167 | (emacsql conn [:pragma (= foreign_keys ON)])
168 | (when-let* ((process (emacsql-process conn))
169 | ((processp process)))
170 | (set-process-query-on-exit-flag process nil))
171 | (when init-db
172 | (org-heatmap-db--init conn 'done-items))
173 | (setq org-heatmap--db conn))))
174 | org-heatmap--db)
175 |
176 | (defun org-heatmap-db--query (sql &rest args)
177 | "Run SQL query on Org-heatmap database with ARGS.
178 | SQL can be either the emacsql vector representation, or a string."
179 | (emacsql-with-transaction (org-heatmap-db)
180 | (apply #'emacsql org-heatmap--db sql args)))
181 |
182 | (defun org-heatmap-db--init-done-items ()
183 | "Insert new record."
184 | (let* ((date (calendar-current-date)))
185 | (org-heatmap-db--query [:insert :into $s1
186 | :values $v2]
187 | 'done-items
188 | (vector date 1))))
189 |
190 | (defun org-heatmap-db--query-date (d table)
191 | (org-heatmap-db--query [:select [date num]
192 | :from $s1
193 | :where (= date $s2)]
194 | table d))
195 |
196 | (defun org-heatmap-db--update-done-items (date num)
197 | (org-heatmap-db--query [:update $s1
198 | :set (= num $s2)
199 | :where (= date $s3)]
200 | 'done-items
201 | num
202 | date))
203 |
204 | (defun org-heatmap-db--table-exist-p (table)
205 | (emacsql-with-transaction (org-heatmap-db)
206 | (emacsql org-heatmap--db [:select name :from sqlite_master
207 | :where (and (= type 'table) (= name $s1))]
208 | table)))
209 |
210 | ;;;###autoload
211 | (defun org-heatmap-db--drop (table)
212 | "Delete TABLE."
213 | (interactive (list (completing-read "Select a table: "
214 | (mapcar #'car
215 | (org-heatmap-db--query
216 | [:select name :from sqlite_master
217 | :where (= type 'table)])))))
218 | (when (y-or-n-p (format "Delete table: %s?" table))
219 | (org-heatmap-db--query [:drop-table :if-exists $s1] table)))
220 |
221 | ;;;; utilities
222 | (defun org-heatmap-habit-update-p ()
223 | "Return non-nil if the entry at point is a habit and is
224 | stored in the database, else return nil."
225 | (and (org-is-habit-p)
226 | (org-heatmap-db--table-exist-p (org-heatmap--hd-name))))
227 |
228 | (defun org-heatmap-habit-p ()
229 | "Return non-nil if the entry at point is a habit, else return nil."
230 | (or (org-is-habit-p)
231 | (let* ((marker (or (org-get-at-bol 'org-marker)
232 | (org-agenda-error)))
233 | (buffer (marker-buffer marker))
234 | (pos (marker-position marker)))
235 | (with-current-buffer buffer
236 | (goto-char pos)
237 | (org-is-habit-p)))))
238 |
239 | (defun org-heatmap-update-counter ()
240 | (when (string= "DONE" (org-get-todo-state))
241 | (let ((td (calendar-current-date))
242 | (hd-name (org-heatmap--hd-name)))
243 | (cond
244 | ((org-heatmap-habit-update-p)
245 | (let ((time (save-excursion
246 | (save-restriction
247 | (org-narrow-to-subtree)
248 | (org-heatmap-clock-sum td)))))
249 | (org-heatmap-db--query [:insert :into $s1
250 | :values $v2]
251 | hd-name
252 | (vector td time))))
253 | (t (if-let* ((result (cadar (org-heatmap-db--query-date td 'done-items))))
254 | (org-heatmap-db--update-done-items td (1+ result))
255 | (org-heatmap-db--init-done-items)))))))
256 |
257 | (defun org-heatmap-get-streak (table)
258 | "Query org-heatmap database and set `org-heatmap-current-streak'."
259 | (let ((streak (org-heatmap-db--query [:select [date num]
260 | :from $s1]
261 | table))
262 | (table (make-hash-table :test #'equal))
263 | (type (if (eq table 'done-items)
264 | 'default
265 | 'habit)))
266 | (dolist (item streak)
267 | (puthash (car item) (cadr item) table))
268 | (setq org-heatmap-current-streak (cons type table))))
269 |
270 | (defun org-heatmap-get-threshold-defualt (n)
271 | "Default function to get threshold in `org-heatmap-threshold'."
272 | (cdr
273 | (cl-find-if (lambda (pair)
274 | (>= n (car pair)))
275 | (reverse (alist-get (car org-heatmap-current-streak)
276 | org-heatmap-threshold)))))
277 |
278 | (defun org-heatmap-generate (month year _indent)
279 | "Mark dates in the calendar window highlights."
280 | (when org-heatmap-current-streak
281 | (dotimes (i 31)
282 | (let ((date (list month (1+ i) year))
283 | (count-scaled (gethash (list month (1+ i) year)
284 | (cdr org-heatmap-current-streak))))
285 | (when count-scaled
286 | (calendar-mark-visible-date
287 | date
288 | (funcall org-heatmap-get-threshold-function count-scaled)))))))
289 |
290 | (defun org-heatmap-clear (&rest _args)
291 | "Call after quit calendar."
292 | (setq org-heatmap-current-streak nil))
293 |
294 | (defun org-heatmap-time-format (date)
295 | "Format DATE into YYYY-MM-DD."
296 | (format "%04d-%02d-%02d"
297 | (nth 2 date)
298 | (nth 0 date)
299 | (nth 1 date)))
300 |
301 | (defun org-heatmap-clock-sum (date)
302 | "Sum the times spent on DATE for current habit."
303 | (let* ((cc (org-clock-special-range (org-heatmap-time-format date)))
304 | (ts (car cc))
305 | (te (nth 1 cc)))
306 | (org-heatmap-clock-sum-1 ts te)))
307 |
308 | (defun org-heatmap-clock-sum-1 (tstart tend)
309 | (let* ((re (concat "^[ \t]*"
310 | org-clock-string
311 | "[ \t]*\\(?:\\(\\[.*?\\]\\)-+\\(\\[.*?\\]\\)\\|=>[ \t]+\\([0-9]+\\):\\([0-9]+\\)\\)"))
312 | (tstart (float-time tstart))
313 | (tend (float-time tend))
314 | (sum 0))
315 | (save-excursion
316 | (goto-char (point-max))
317 | (while (re-search-backward re nil t)
318 | (let* ((ss (match-string 1))
319 | (se (match-string 2))
320 | (ts (org-time-string-to-seconds ss))
321 | (te (org-time-string-to-seconds se))
322 | (dt (- (if tend (min te tend) te)
323 | (if tstart (max ts tstart) ts))))
324 | (when (> dt 0) (cl-incf sum (floor dt 60))))))
325 | sum))
326 |
327 | (defun org-heatmap--hd-name ()
328 | "Get current habit name."
329 | (cond
330 | ((eq major-mode 'org-agenda-mode)
331 | (org-with-point-at (org-get-at-bol 'org-hd-marker)
332 | (nth 4 (org-heading-components))))
333 | (t (nth 4 (org-heading-components)))))
334 |
335 | (defun org-heatmap-habit-parse-todo ()
336 | "Parse the TODO surrounding point for its all habit-related data.
337 |
338 | Return a list of all the past dates this todo was mark closed."
339 | (let ((org-habit-preceding-days 99999)
340 | (org-habit-following-days 99999))
341 | (reverse (nth 4 (org-habit-parse-todo)))))
342 |
343 | (defun org-heatmap-habit--collect (&rest _args)
344 | "Save the current habit information into the database.
345 |
346 | *Note*: It may take a long time to finish, depending on the size
347 | of your log of the habit."
348 | (let* ((marker (or (org-get-at-bol 'org-marker)
349 | (org-agenda-error)))
350 | (buffer (marker-buffer marker))
351 | (pos (marker-position marker))
352 | (hd-name (org-heatmap--hd-name))
353 | closed-dates)
354 | (unless buffer
355 | (user-error "Trying to switch to non-existent buffer"))
356 | (with-current-buffer buffer
357 | (save-excursion
358 | (save-restriction
359 | (goto-char pos)
360 | (org-back-to-heading t)
361 | (setq closed-dates (org-heatmap-habit-parse-todo))
362 | (org-narrow-to-subtree)
363 | (org-heatmap-db--init (or org-heatmap--db
364 | (funcall (org-heatmap-db--conn-fn) org-heatmap-db-location))
365 | hd-name)
366 | (dolist (closed-date closed-dates)
367 | (let ((date (calendar-gregorian-from-absolute closed-date)))
368 | (org-heatmap-db--query [:insert :into $s1
369 | :values $v2]
370 | hd-name
371 | (vector date (org-heatmap-clock-sum date))))
372 | (sleep-for 0.01)))))))
373 |
374 | (defun org-heatmap-year-filter (days)
375 | "Get all the dates of this year."
376 | (let* ((date (calendar-current-date))
377 | (year (calendar-extract-year date))
378 | (year-first (list 1 1 year)))
379 | (cl-remove-if-not (lambda (record)
380 | (>= (calendar-absolute-from-gregorian (car record))
381 | (calendar-absolute-from-gregorian year-first)))
382 | days)))
383 |
384 | (defun org-heatmap-add-color (table)
385 | "Choose the appropriate color based on the activity of each day."
386 | (let ((days (org-heatmap-year-filter
387 | (org-heatmap-db--query [:select [date num]
388 | :from $s1]
389 | table))))
390 | (dolist (day days)
391 | (let* ((day-num (calendar-day-number (car day)))
392 | (face (cdr
393 | (cl-find-if (lambda (pair)
394 | (>= (cadr day) (car pair)))
395 | (reverse (alist-get 'overview org-heatmap-threshold)))))
396 | (beg (+ (point) (* (/ day-num 30) 90) (* 3 (1- (% day-num 30)))))
397 | (end (+ beg (length org-heatmap-rectangle))))
398 | (put-text-property beg end 'face face (current-buffer))
399 | (make-button beg end
400 | 'help-echo (format "%d minutes are spent on %s" (cadr day )
401 | (org-heatmap-time-format (car day)))
402 | 'face face
403 | 'action
404 | (lambda (_)
405 | (let ((org-agenda-sticky nil))
406 | (org-agenda-list nil (calendar-absolute-from-gregorian
407 | (car day))
408 | nil))))))))
409 | ;;;; habit statics
410 | (defun org-heatmap-habit-parse-todo-advice (orig &rest args)
411 | (let ((org-habit-preceding-days 99999)
412 | (org-habit-following-days 99999))
413 | (apply orig args)))
414 |
415 |
416 | (defun org-heatmap-habit-streaks (habit)
417 | (let ((closed-days (nth 4 habit))
418 | (counter 1)
419 | (sum (length (nth 4 habit)))
420 | (streaks 1)
421 | (current-streaks 0)
422 | (today (time-to-days (current-time)))
423 | (max-streaks 1))
424 | (while (< counter (length closed-days))
425 | (if (= (time-convert (time-subtract (nth counter closed-days)
426 | (nth (1- counter) closed-days))
427 | 'integer) 1)
428 | (progn (setq streaks (1+ streaks)))
429 | (if (> streaks max-streaks)
430 | (progn (setq max-streaks streaks)
431 | (setq streaks 1))))
432 | (setq counter (1+ counter)))
433 | (setq counter (1- counter))
434 | (if (= (time-convert (time-subtract today (nth counter closed-days))
435 | 'integer) 1)
436 | (progn (setq current-streaks (1+ current-streaks))
437 | (while (= (time-convert (time-subtract
438 | (nth counter closed-days)
439 | (nth (1- counter) closed-days))
440 | 'integer) 1)
441 | (setq current-streaks (1+ current-streaks))
442 | (setq counter (1- counter)))
443 | ))
444 | (if (> streaks max-streaks)
445 | (setq max-streaks streaks))
446 | (propertize (concat " ("
447 | (number-to-string current-streaks)
448 | "/"
449 | (number-to-string max-streaks)
450 | "/"
451 | (number-to-string sum) ")")
452 | 'face 'org-heatmap-habit-statics)))
453 |
454 | (defun org-heatmap-habit-clean-ov ()
455 | "Clear all habit streak overlays in org agenda buffer."
456 | (mapc (lambda (ov)
457 | (when (overlay-get ov 'after-string)
458 | (delete-overlay ov)))
459 | (overlays-in (point-min) (point-max))))
460 |
461 | (defun org-heatmap-habit-add-streak ()
462 | "Insert consistency graph for any habitual tasks."
463 | (org-heatmap-habit-clean-ov)
464 | (let ((buffer-invisibility-spec '(org-link))
465 | (inhibit-read-only t))
466 | (save-excursion
467 | (goto-char (point-min))
468 | (while (not (eobp))
469 | (when-let ((habit (get-text-property (point) 'org-habit-p))
470 | (pos (search-forward (org-heatmap--hd-name)))
471 | (ov (make-overlay (1- pos) pos))
472 | (streak (org-heatmap-habit-streaks habit)))
473 | (when (org-get-at-bol 'tags)
474 | (delete-char (length streak)))
475 | (overlay-put ov 'after-string streak))
476 | (forward-line)))))
477 |
478 | ;;;; interactive functions
479 |
480 | ;;;###autoload
481 | (defun org-heatmap-habit-draw-overview ()
482 | "Draw an overview heatmap for the habit at point."
483 | (interactive)
484 | (if-let ((pos (get-text-property (point) 'org-heatmap-has-overview-p)))
485 | (progn
486 | (goto-char (point-min))
487 | (org-agenda-redo)
488 | (goto-char pos))
489 | (if (org-heatmap-habit-p)
490 | (let ((inhibit-read-only t)
491 | (hd-name (org-heatmap--hd-name)))
492 | (unless (or line-spacing
493 | (alist-get 'line-spacing default-frame-alist))
494 | (setq-local line-spacing 5))
495 | (unless (org-heatmap-db--table-exist-p hd-name)
496 | (org-heatmap-habit--collect))
497 | (save-excursion
498 | (end-of-line)
499 | (insert "\n\n")
500 | (save-excursion
501 | (cl-loop repeat 13 do
502 | (insert
503 | (propertize (concat (mapconcat 'identity
504 | (make-list 30 org-heatmap-rectangle)
505 | " ")
506 | "\n")
507 | 'face 'org-heatmap-empty-rectangle))))
508 | (org-heatmap-add-color hd-name))
509 | (put-text-property (point-min)
510 | (point-max)
511 | 'org-heatmap-has-overview-p
512 | (point)))
513 | (user-error "Not on a habit!"))))
514 |
515 | ;;;###autoload
516 | (defun org-heatmap-habit-calendar ()
517 | "Display a three-month Gregorian calendar for the habit at point.
518 |
519 | Add highlights indicating the times spent on the habit on the
520 | current calendar date."
521 | (interactive (unless (org-heatmap-habit-p)
522 | (user-error "Not on a habit!")))
523 | (let ((hd-name (org-heatmap--hd-name)))
524 | (unless (org-heatmap-db--table-exist-p hd-name)
525 | (org-heatmap-habit--collect))
526 | (org-heatmap-get-streak hd-name)
527 | (calendar)))
528 |
529 | ;;;###autoload
530 | (defun org-heatmap-calendar ()
531 | "Display a three-month Gregorian calendar.
532 |
533 | Add highlights indicating the activities on the current calendar date."
534 | (interactive)
535 | (org-heatmap-get-streak 'done-items)
536 | (calendar))
537 |
538 | ;;;###autoload
539 | (defun org-heatmap-calendar-query ()
540 | "Get information about the activities on the current calendar date.
541 |
542 | When used with `org-heatmap-calendar', it shows how many items are
543 | done on the current calendar date.
544 |
545 | When used with `org-heatmap-habit-calendar', it shows how many
546 | times is spent on the habit on the current calendar date."
547 | (interactive (unless (eq major-mode 'calendar-mode)
548 | (user-error "Must be used in calendar mode!")))
549 | (when-let* ((date (calendar-cursor-to-date t))
550 | (ht (cdr-safe org-heatmap-current-streak))
551 | (tasks (gethash date ht)))
552 | (message "%d %s in %s"
553 | (if (numberp tasks) tasks 0)
554 | (if (eq (car org-heatmap-current-streak) 'default)
555 | "items are done"
556 | "minutes are spent")
557 | (org-heatmap-time-format date))))
558 |
559 | ;;;###autoload
560 | (defun org-heatmap-adjust ()
561 | "Change the number of done items on the current calendar date.
562 |
563 | *Note* that this function is not applied to `org-heatmap-habit-calendar'
564 | for now."
565 | (interactive (unless (and (eq major-mode 'calendar-mode)
566 | (eq (car-safe org-heatmap-current-streak) 'default))
567 | (user-error "Must be used with default streak in calendar mode!")))
568 | (if-let* ((date (calendar-cursor-to-date t))
569 | (tasks (gethash date (cdr org-heatmap-current-streak)))
570 | (num (read-number
571 | (format "Input a num(current: %d): " tasks))))
572 | (progn
573 | (org-heatmap-db--update-done-items date num)
574 | (puthash date num (cdr org-heatmap-current-streak))
575 | (mapc #'delete-overlay (overlays-in (1- (point)) (1+ (point))))
576 | (calendar-mark-visible-date
577 | (calendar-cursor-to-date t)
578 | (funcall org-heatmap-get-threshold-function
579 | (gethash date (cdr org-heatmap-current-streak)))))
580 | (error "%s hasn't any record!" (org-heatmap-time-format date))))
581 |
582 | ;;;###autoload
583 | (define-minor-mode org-heatmap-mode
584 | "Show heatmap in calendar."
585 | :global t
586 | :group 'org-heatmap
587 | (cond
588 | (org-heatmap-mode
589 | (advice-add #'calendar-exit :after #'org-heatmap-clear)
590 | (advice-add #'calendar-generate-month :after #'org-heatmap-generate)
591 | (add-hook 'kill-emacs-hook #'org-heatmap-db--close)
592 | (add-hook 'org-after-todo-state-change-hook #'org-heatmap-update-counter)
593 | (define-key calendar-mode-map (kbd "j") #'org-heatmap-adjust)
594 | (define-key calendar-mode-map (kbd "f") #'org-heatmap-calendar-query)
595 | (when org-heatmap-enable-habit-statics
596 | (advice-add 'org-habit-parse-todo :around #'org-heatmap-habit-parse-todo-advice)
597 | (add-hook 'org-agenda-finalize-hook #'org-heatmap-habit-add-streak))
598 | (with-eval-after-load 'org-agenda
599 | (org-defkey org-agenda-mode-map "h" #'org-heatmap-habit-draw-overview)))
600 | (t
601 | (org-heatmap-db--close)
602 | (advice-remove #'calendar-exit #'org-heatmap-clear)
603 | (advice-remove #'calendar-generate-month #'org-heatmap-generate)
604 | (advice-remove #'org-habit-parse-todo #'org-heatmap-habit-parse-todo-advice)
605 | (remove-hook 'org-after-todo-state-change-hook #'org-heatmap-update-counter)
606 | (remove-hook 'kill-emacs-hook #'org-heatmap-db--close)
607 | (remove-hook 'org-agenda-finalize-hook #'org-heatmap-habit-add-streak)
608 | (when (eq major-mode 'org-agenda-mode)
609 | (org-heatmap-habit-clean-ov)
610 | (org-agenda-redo 'all))
611 | (define-key calendar-mode-map (kbd "j") nil)
612 | (define-key calendar-mode-map (kbd "f") nil)
613 | (org-defkey org-agenda-mode-map "h" #'org-agenda-holidays))))
614 |
615 | (provide 'org-heatmap)
616 | ;;; org-heatmap.el ends here.
617 |
--------------------------------------------------------------------------------