org-timeblock icon indicating copy to clipboard operation
org-timeblock copied to clipboard

Schedule your day visually, using timeblocking technique inside Emacs

#+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 [[https://git.sr.ht/~sokolov/channel][this]] channel.

  1. 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

  1. Then, run ~guix pull~.
  2. Now you can install the package.

** 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)