/org-timeblock

Schedule your day visually, using timeblocking technique inside Emacs

Primary LanguageEmacs LispGNU General Public License v3.0GPL-3.0

org-timeblock

Schedule your days visually, using timeblocking technique inside Emacs.

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-switch-view [V]:

screenshots/multi-day-view.png

Screencast

https://youtu.be/lVV9gVp5nxU

Description

The builtin orgmode package for viewing tasks or events for a particular day, org-agenda, does not help you to quickly understand, where, for example, you have free time in your day or where you have overlapping tasks. Just a list of tasks is not sufficient. This package is created to fix this problem and provide some of the functionality that modern calendars provide.

There are two major modes provided by the package:

  • org-timeblock-mode. Displays visual schedule (timeblocks) of org tasks that are scheduled or have an active timestamp in their body (orgmode events) for selected day (Currently, only day view is available). Available commands:
    • org-timeblock-day-earlier/later [C-<down>/<up>]
    • org-timeblock-set-duration [d]
    • org-timeblock-reschedule [s]
    • org-timeblock-new-task [+]
    • org-timeblock-toggle-timeblock-list [T]
    • org-timeblock-clock-in [i] (to clock out, press o)
    • org-timeblock-todo [t]
    • org-timeblock-switch-scaling [v]
    • org-timeblock-switch-view [V]
    • org-timeblock-write [w]
    • org-timeblock-jump-to-day [j]
  • org-timeblock-list-mode. Displays a list of org tasks that are scheduled or orgmode events for selected day. It’s sort of like a light org-agenda. The tasks can be sorted via SCHEDULED org property or manually placed by user via commands org-timeblock-list-drag-line-forward/backward [M-<up>/<down>]. The order can be saved in a cache file via org-timeblock-list-save [C-s] command. The sorting algorithm can be changed via org-timeblock-list-toggle-sort-function [S] command.
    • org-timeblock-list-schedule [s]
    • org-timeblock-list-set-duration [d]
    • org-timeblock-todo [t]
    • org-timeblock-list-drag-line-forward/backward [M-<down>/<up>]
    • org-timeblock-list-toggle-sort-function [S]
    • org-timeblock-list-clock-in [i] (to clock out, press o)
    • org-timeblock-switch-scaling [v]
    • org-timeblock-switch-view [V]
    • org-timeblock-list-toggle-timeblock [T]

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 this channel.

  1. To add the channel, add this to the list of channels in channels.scm:
(channel
 (name 'sklv)
 (url "https://git.sr.ht/~sokolov/channel"))
  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:
(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

To enter org-timeblock-list-mode, run M-x org-timeblock-list. To enter org-timeblock-mode, run M-x org-timeblock

For both modes, the default date is today. All the tasks and events are searched in (org-agenda-files). You can change the displayed date via the following commands:

  • org-timeblock-day-later [C-<down>]
  • org-timeblock-day-earlier [C-<up>]
  • org-timeblock-jump-to-day [j]

To navigate between tasks/blocks, use these commands:

  • org-timeblock-list-mode
    • org-timeblock-list-previous-line [<up>]
    • org-timeblock-list-next-line [<down>]
  • org-timeblock-mode
    • org-timeblock-forward-block [<down>]
    • org-timeblock-bacward-block [<up>]

In both modes, you can navigate via mouse clicks to select an entry or a block.

To reschedule or change the duration of a task at point, use these commands:

  • org-timeblock-list-mode
    • org-timeblock-list-schedule [s]
    • org-timeblock-list-set-duration [d]
  • org-timeblock-mode
    • org-timeblock-schedule [s]
    • org-timeblock-set-duration [d]

Customization

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

TODOs

  • [ ] Implement caching mechanism for SVG data
  • [ ] Improve timeblocks layout algorithm

Changelog

0.1

First tagged release.