├── 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 | --------------------------------------------------------------------------------