org-timeblock
org-timeblock copied to clipboard
Schedule your day visually, using timeblocking technique inside Emacs
#+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 [[https://git.sr.ht/~sokolov/channel][this]] channel.
- To add the channel, add this to the list of channels in ~channels.scm~:
#+begin_src scheme (channel (name 'sklv) (url "https://git.sr.ht/~sokolov/channel")) #+end_src
- Then, run ~guix pull~.
- Now you can install the package.
** Quelpa
- Install ~quelpa-use-package~ (which can be installed directly from MELPA).
- 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)