Skip to content

Schedule your day visually, using timeblocking technique inside Emacs

License

Notifications You must be signed in to change notification settings

ichernyshovvv/org-timeblock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

org-timeblock

Emacs package that provides interactive multiple-day timeblock view for orgmode tasks.

Contents

Screenshots

org-timeblock-mode buffer:

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:

screenshots/org-timeblock-with-list-mode.png

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

screenshots/multi-day-view.png

Screencast

https://youtu.be/lVV9gVp5nxU

Why

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

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:
(use-package org-timeblock
  :quelpa (org-timeblock :fetcher github :repo "ichernyshovvv/org-timeblock"))

Straight

Add this form to your init file:

(use-package org-timeblock
  :straight (org-timeblock :type git
              :host github
              :repo "ichernyshovvv/org-timeblock"))

Usage

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-<right> / C-f]
  • org-timeblock-day-earlier [C-<left> / 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

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

TODOs

  • [ ] 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

444GDw7rkd3Mj5hi6ZzEXZ4QN565TFw4J5ithFcywsMnJn7dFsxWTEQ4vtSMQC1sckFBu7neS8yZZRLnY8EYpS4UNMEAvpL




liberapay.com/ichernyshovvv

Changelog

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)