Files
dtos-dotfiles/.config/awesome/lain/wiki/calendar.md
Derek Taylor a91301075a Revert "Update"
This reverts commit 777960ac7b.
2025-12-03 11:20:33 -06:00

3.8 KiB

Usage

Read here.

Description

Attaches a calendar notification to a widget.

This is a simpler but faster alternative to `awful.widget.calendar_popup.

local calendar = lain.widget.calendar()
  • Left click / scroll down: switch to previous month.
  • Right click / scroll up: switch to next month.

Input table

Variable Meaning Type Default
cal custom call for cal string "/usr/bin/cal"
attach_to Array of widgets array empty array
followtag Display the notification on currently focused screen boolean false
icons Path to calendar icons string lain/icons/cal/white
notification_preset Notification preset table See default notification_preset

You can reset cal any way you like (using -w to display weeks as well, for instance). If the current day is not highlighted, you can reset cal to also include the proper coloring flag. For instance, under Arch Linux it's /usr/bin/cal --color=always, while under Ubuntu it's /usr/bin/cal -h.

You can set attach_to as the array of widgets to which you want to attach the calendar, for instance:

lain.widget.calendar({
    `attach_to = { mywidget1, mywidget2, ...  }`,
    -- [...]
})

The notification will show an icon of the current day number, and output from cal with current day highlighted.

In multiple screen setups, the default behaviour is to show a visual notification pop-up window on the first screen. By setting followtag to true it will be shown on the currently focused tag screen.

Default notification_preset

notification_preset = {
    font = "Monospace 10",
    fg   = "#FFFFFF",
    bg   = "#000000"
}

Output table

Variable Meaning Type
attach Attach the calendar to an input widget function
show Show calendar function
hide Hide calendar function

attach takes as argument the widget you want to attach the calendar to: calendar.attach(widget).

Keybindings

You can call the notification with a key binding like this:

awful.key({ altkey }, "c", function ()
    calendar:show(7)
end),

where altkey = "Mod1" and show argument is an optional integer, meaning timeout seconds.

You can also call it defining a notification screen with a third argument like this:

awful.key({ altkey }, "c", function ()
    calendar:show(7, 0, my_scr_number)
end),

Notes

  • Naughty notifications require notification_preset.font to be monospaced, in order to correctly display the output.

  • In case current day is not being highlighted in notifications, try setting cal specifying your environment. For instance: cal = "/usr/bin/env TERM=linux /usr/bin/cal --your-coloring-flag-here".

  • If you want to disable notification icon, set icons = "" in the input table.

  • In order to have khal agenda output combined with the widget you can use this script as cal:

    #!/bin/bash
    days=3 # days to show
    cal_flag="--color=always" # colorizing flag
    if [ $# -eq 0 ]; then
        awk '{max = 21}
        FNR==NR{s1[FNR]=$0; next}{s2[FNR]=$0}
        END { format = "%-" max "s\t%-" max "s\n";
        numlines=(NR-FNR)>FNR?NR-FNR:FNR;
        for (i=1; i<=numlines; i++) { printf format, s1[i]?s1[i]:"", s2[i]?s2[i]:"" }
        }' <(/usr/bin/cal $cal_flag) <(/usr/bin/khal list today $(date -d "+$days days" "+%d.%m.%Y"))
    else
        /usr/bin/cal $@
    fi