meercal

Drop a calendar file An .ics, and meercal will ask which calendar it goes in
Filter and search

What you type here filters the calendar you are looking at: the same view, with less in it. Plain words are ANDed, and each has to appear somewhere in the event: its title, where it is, its notes, or the people on it. Wrap a phrase in "double quotes" to match it exactly.

Press Enter and the same query becomes a search across every calendar, including the ones you have switched off. Hiding a calendar is about the drawing, never about the data.

Filters

These narrow without searching text, so they work on their own as well as beside words. Mixing them is an AND.

cal:name Only that calendar. Matches part of the name; cal:fam is enough.
with:who Someone on it: an attendee or the organiser, by name or address.
in:where The location field.
is:span The long ones: anything covering more than a day. This is the whole rail.
is:allday / is:timed All-day events, or the ones with a clock on them.
is:recurring Anything that repeats.
is:free / is:busy Whether it claims the time or is only a note in it (iCalendar's TRANSP).
is:cancelled Called off, but still on the calendar.

Regex

Tick Regex and the words become POSIX regular expressions, matched case-insensitively by Postgres itself against an indexed column, so standup|jour fixe or ^Q[1-4] costs about what a word costs. rx: in front of a term turns it on for that query without reaching for the tickbox.

Together

dentist cal:family
is:span with:anna
rx:invoice.*2026 is:recurring
meercal