Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ichernyshovvv/org-timeblock

Schedule your day visually, using timeblocking technique inside Emacs
https://github.com/ichernyshovvv/org-timeblock

calendar emacs orgmode timeblocking

Last synced: 4 days ago
JSON representation

Schedule your day visually, using timeblocking technique inside Emacs

Awesome Lists containing this project

README

        

#+html:



#+html:

org-timeblock


#+html:

Emacs package that provides interactive multiple-day timeblock
#+html: view for orgmode tasks.


* Contents

- [[#screenshots][Screenshots]]
- [[#screencast][Screencast]]
- [[#why][Why I wrote this package]]
- [[#installation][Installation]]
- [[#usage][Usage]]
- [[#customization][Customization]]
- [[#todos][TODOs]]
- [[#donations][Donations]]
- [[#changelog][Changelog]]

* Screenshots
:PROPERTIES:
:CUSTOM_ID: screenshots
:END:

org-timeblock-mode buffer:

[[file:screenshots/org-timeblock-mode.png]]

You can press ~[T]~ to toggle the display of org-timeblock-list-mode
buffer. Foreground colors for timeblocks are generated randomly, but
you can assign specific background and foreground colors in
customizable variable ~org-timeblock-tag-colors~:

[[file:screenshots/org-timeblock-with-list-mode.png]]

You can switch to a multi-day view using ~org-timeblock-change-span [V]~:

[[file:screenshots/multi-day-view.png]]

* Screencast
:PROPERTIES:
:CUSTOM_ID: screencast
:END:

[[https://youtu.be/lVV9gVp5nxU]]

* Why
:PROPERTIES:
:CUSTOM_ID: why
:END:

The builtin orgmode package for collecting and displaying open
tasks/events/deadlines relevant for a particular set of dates, org-agenda, does
not have a timeblock representation which is available in almost all modern
calendars.

Sometimes, a list representation (like in org-agenda) is not sufficient, because
it can be difficult to quickly get an overview of a day or week schedule.

* Installation
:PROPERTIES:
:CUSTOM_ID: installation
:END:

Requirements:

- Emacs 28.1 (or higher)
- SVG support in your Emacs build

** MELPA

You can install the package from MELPA using ~M-x package-install org-timeblock~

** package-vc-install (Emacs 29)

If you use Emacs 29, you can install the package via

~M-x package-vc-install RET https://github.com/ichernyshovvv/org-timeblock/ RET~

** Guix

If you use Guix, you can install the package from the official Guix channel.

** Quelpa

1. Install ~quelpa-use-package~ (which can be installed directly from MELPA).
2. Add this form to your init file:

#+begin_src elisp
(use-package org-timeblock
:quelpa (org-timeblock :fetcher github :repo "ichernyshovvv/org-timeblock"))
#+end_src

** Straight

Add this form to your init file:

#+begin_src elisp
(use-package org-timeblock
:straight (org-timeblock :type git
:host github
:repo "ichernyshovvv/org-timeblock"))
#+end_src

* Usage
:PROPERTIES:
:CUSTOM_ID: usage
:END:

There are two major modes provided by the package:

- ~org-timeblock-mode~. Displays timeblock view of ~SCHEDULED/DEADLINE~ org
tasks or events (entries that have active timestamps in the body or heading)
for specific days.
- ~org-timeblock-list-mode~. Displays a list of tasks (including those that are
not time-specific).

Run ~M-x org-timeblock~ to open 3-day view that starts from today's date. The
default days span can be customized via ~org-timeblock-span~ variable. In the
view you will see only entries that have time specified in their timestamps. To
see other found tasks/events (entries that have timestamps without time), press
~T~ (M-x org-timeblock-toggle-timeblock-list).

Tasks and events are searched in ~org-timeblock-files~ which defaults to
~(org-agenda-files)~.

To navigate between the blocks, use ~[fbpn]~, arrow keys or mouse (yes, the
blocks are clickable).

To open other dates, you can run the following the following commands:

- org-timeblock-day-later ~[C- / C-f]~
- org-timeblock-day-earlier ~[C- / C-b]~
- org-timeblock-jump-to-day ~j~
- org-timeblock-change-span ~V~

To reschedule or change the duration of the task bound to the selected block,
use these commands:

- org-timeblock-schedule ~s~
- org-timeblock-set-duration ~d~

Also, you can mark the blocks and operate on them via ~M-x org-timeblock-schedule [s]~:
- org-timeblock-mark-block ~m~
- org-timeblock-mark-by-regexp ~%~
- org-timeblock-unmark-block ~u~
- org-timeblock-unmark-all-blocks ~U~

If you want to add a new task, press ~+~ (M-x org-timeblock-new-task).

Almost all commands with the same bindings are available in
~org-timeblock-list~.

* Customization
:PROPERTIES:
:CUSTOM_ID: customization
:END:

~M-x customize-group org-timeblock~ to see available customizable variables.

* TODOs
:PROPERTIES:
:CUSTOM_ID: todos
:END:
- [ ] Implement caching mechanism for SVG data
- [ ] Improve timeblocks layout algorithm
- [ ] Split each column into a separate SVG image to improve the speed of
~*org-timeblock*~ buffer redisplay
- [ ] Create timeblock.el library that could be used for iCalendar and other
time data

* Donations
:PROPERTIES:
:CUSTOM_ID: donations
:END:
#+html:


#+html:
~444GDw7rkd3Mj5hi6ZzEXZ4QN565TFw4J5ithFcywsMnJn7dFsxWTEQ4vtSMQC1sckFBu7neS8yZZRLnY8EYpS4UNMEAvpL~
#+html:


#+html:

#+html: liberapay.com/ichernyshovvv
#+html:

* Changelog
:PROPERTIES:
:CUSTOM_ID: changelog
:END:

** 0.1
First tagged release.
** 0.2
- Added mark commands (~mark-block~, ~unmark-block~, ~mark-by-regexp~) for
timeblocks that can be used to reschedule multiple tasks at once
- Replaced ts.el with built-in time API
- Replaced org-ql with own searching and caching functions
- dom.el is now used instead of regexps to fetch and change SVG data (much
cleaner code)
- Deadline timestamps are now treated as it should be, not as events
- Now, each active timestamp in a heading body is displayed (as event), not only
the first one
- Added custom variable org-timeblock-files
- Other minor bug fixes and improvements 8)