From: Stuart Henderson Subject: Re: khal should not depend on vdirsyncer To: Joerg Jung Cc: Marcus MERIGHI , ports@openbsd.org Date: Wed, 11 Feb 2026 21:17:54 +0000 On 2025/12/17 10:32, Joerg Jung wrote: > This is fine with me. > > > mcmer-openbsd@tor.at (Marcus MERIGHI), 2025.12.06 (Sat) 18:58 (CET): > >> Hello, > >> > >> one can use khal/ikhal with just local calender files. > >> syncing with caldav via vdirsyncer is nice, but optional. I've committed a modified version of that, vdirsyncer is still needed for tests (+ REVISION bump). Here's an update to 0.13.0. any tests? ok? Index: Makefile =================================================================== RCS file: /cvs/ports/productivity/khal/Makefile,v diff -u -p -r1.26 Makefile --- Makefile 11 Feb 2026 21:10:08 -0000 1.26 +++ Makefile 11 Feb 2026 21:16:17 -0000 @@ -1,13 +1,12 @@ COMMENT = standards based terminal calendar -MODPY_DISTV = 0.11.2 +MODPY_DISTV = 0.13.0 DISTNAME = khal-${MODPY_DISTV} -REVISION = 4 CATEGORIES = productivity # https://github.com/pimutils/khal -HOMEPAGE = https://lostpackets.de/khal/ +HOMEPAGE = https://khal.readthedocs.io/ MAINTAINER = Joerg Jung @@ -18,8 +17,7 @@ MODULES = lang/python MODPY_PYBUILD = setuptools_scm MODPY_PI = Yes -RUN_DEPENDS = devel/py-atomicwrites \ - devel/py-click \ +RUN_DEPENDS = devel/py-click \ devel/py-click-log \ devel/py-configobj \ devel/py-dateutil \ Index: distinfo =================================================================== RCS file: /cvs/ports/productivity/khal/distinfo,v diff -u -p -r1.9 distinfo --- distinfo 11 Dec 2023 12:40:37 -0000 1.9 +++ distinfo 11 Feb 2026 21:16:17 -0000 @@ -1,2 +1,2 @@ -SHA256 (khal-0.11.2.tar.gz) = j7jYk3HlPiI1lToHZeQbl+F0hIpojWN2hHdXbQP4mbo= -SIZE (khal-0.11.2.tar.gz) = 196986 +SHA256 (khal-0.13.0.tar.gz) = aP6ozXBOOH6BtmnJAyKo2vtDdPWHawcXDJxuI0FaPuA= +SIZE (khal-0.13.0.tar.gz) = 209200 Index: patches/patch-khal_ui_calendarwidget_py =================================================================== RCS file: patches/patch-khal_ui_calendarwidget_py diff -N patches/patch-khal_ui_calendarwidget_py --- patches/patch-khal_ui_calendarwidget_py 21 May 2025 12:12:32 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,35 +0,0 @@ -From 768003148015376f1715a2d4cc0b3d6d800876c4 Mon Sep 17 00:00:00 2001 -From: Hugo Osvaldo Barrera -Date: Thu, 11 Jan 2024 16:28:28 +0100 -Subject: [PATCH] Update deprecated syntax - -Index: khal/ui/calendarwidget.py ---- khal/ui/calendarwidget.py.orig -+++ khal/ui/calendarwidget.py -@@ -148,7 +148,7 @@ class DateCColumns(urwid.Columns): - - @urwid.Columns.focus_position.setter - def focus_position(self, position: int) -> None: -- """calls on_date_change before calling super()._set_focus_position""" -+ """calls on_date_change before setting super().focus_position""" - # do not call when building up the interface, lots of potentially - # expensive calls made here - if self._init: -@@ -163,7 +163,7 @@ class DateCColumns(urwid.Columns): - def set_focus_date(self, a_date): - for num, day in enumerate(self.contents[1:8], 1): - if day[0].date == a_date: -- self._set_focus_position(num) -+ self.focus_position = num - return None - raise ValueError('%s not found in this week' % a_date) - -@@ -381,7 +381,7 @@ class CalendarWalker(urwid.SimpleFocusListWalker): - """ - row, column = self.get_date_pos(a_day) - self.set_focus(row) -- self[self.focus]._set_focus_position(column) -+ self[self.focus].focus_position = (column) - - @property - def earliest_date(self): Index: patches/patch-khal_ui_editor_py =================================================================== RCS file: patches/patch-khal_ui_editor_py diff -N patches/patch-khal_ui_editor_py --- patches/patch-khal_ui_editor_py 21 May 2025 12:12:32 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,17 +0,0 @@ -From 768003148015376f1715a2d4cc0b3d6d800876c4 Mon Sep 17 00:00:00 2001 -From: Hugo Osvaldo Barrera -Date: Thu, 11 Jan 2024 16:28:28 +0100 -Subject: [PATCH] Update deprecated syntax - -Index: khal/ui/editor.py ---- khal/ui/editor.py.orig -+++ khal/ui/editor.py -@@ -58,7 +58,7 @@ class CalendarPopUp(urwid.PopUpLauncher): - self._monthdisplay = monthdisplay - self._firstweekday = firstweekday - self._keybindings = {} if keybindings is None else keybindings -- self.__super.__init__(widget) -+ super().__init__(widget) - - def keypress(self, size, key): - if key == 'enter': Index: patches/patch-khal_ui_widgets_py =================================================================== RCS file: patches/patch-khal_ui_widgets_py diff -N patches/patch-khal_ui_widgets_py --- patches/patch-khal_ui_widgets_py 21 May 2025 12:12:32 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,69 +0,0 @@ -From 768003148015376f1715a2d4cc0b3d6d800876c4 Mon Sep 17 00:00:00 2001 -From: Hugo Osvaldo Barrera -Date: Thu, 11 Jan 2024 16:28:28 +0100 -Subject: [PATCH] Update deprecated syntax - -Index: khal/ui/widgets.py ---- khal/ui/widgets.py.orig -+++ khal/ui/widgets.py -@@ -255,7 +255,7 @@ class ChoiceList(urwid.WidgetWrap): - - pile = NPile(buttons, outermost=True) - num = [num for num, elem in enumerate(parent.choices) if elem == parent.active][0] -- pile.set_focus(num) -+ pile.focus_position = num - fill = urwid.Filler(pile) - urwid.WidgetWrap.__init__(self, urwid.AttrMap(fill, 'popupbg')) - -@@ -284,14 +284,14 @@ class NextMixin(SupportsNext): - def _select_first_selectable(self): - """select our first selectable item (recursivly if that item SupportsNext)""" - i = self._first_selectable() -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self.contents[i][0], SupportsNext): - self.contents[i][0]._select_first_selectable() - - def _select_last_selectable(self): - """select our last selectable item (recursivly if that item SupportsNext)""" - i = self._last_selectable() -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self._contents[i][0], SupportsNext): - self.contents[i][0]._select_last_selectable() - -@@ -318,7 +318,7 @@ class NextMixin(SupportsNext): - else: - for i in range(self.focus_position + 1, len(self._contents)): - if self._contents[i][0].selectable(): -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self._contents[i][0], SupportsNext): - self._contents[i][0]._select_first_selectable() - break -@@ -330,7 +330,7 @@ class NextMixin(SupportsNext): - else: - for i in range(self.focus_position - 1, 0 - 1, -1): - if self._contents[i][0].selectable(): -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self._contents[i][0], SupportsNext): - self._contents[i][0]._select_last_selectable() - break -@@ -352,14 +352,14 @@ class NListBox(SupportsNext, urwid.ListBox): - def _select_first_selectable(self): - """select our first selectable item (recursivly if that item SupportsNext)""" - i = self._first_selectable() -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self.body[i], SupportsNext): - self.body[i]._select_first_selectable() - - def _select_last_selectable(self): - """select our last selectable item (recursivly if that item SupportsNext)""" - i = self._last_selectable() -- self.set_focus(i) -+ self.focus_position = i - if isinstance(self.body[i], SupportsNext): - self.body[i]._select_last_selectable() - Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/productivity/khal/pkg/PLIST,v diff -u -p -r1.10 PLIST --- pkg/PLIST 23 Oct 2025 13:20:09 -0000 1.10 +++ pkg/PLIST 11 Feb 2026 21:16:17 -0000 @@ -7,8 +7,9 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/WHEEL lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/entry_points.txt lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/ -lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/AUTHORS.txt -lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/COPYING +lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/doc/ +lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/doc/source/ +lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/licenses/doc/source/license.rst lib/python${MODPY_VERSION}/site-packages/khal-${MODPY_DISTV}.dist-info/top_level.txt lib/python${MODPY_VERSION}/site-packages/khal/__init__.py lib/python${MODPY_VERSION}/site-packages/khal/__main__.py @@ -17,10 +18,14 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}__init__.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}__main__.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}__main__.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}_compat.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}_compat.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}calendar_display.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}calendar_display.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}cli.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}cli.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}cli_utils.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}cli_utils.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}configwizard.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}configwizard.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}controllers.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} @@ -33,14 +38,18 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}icalendar.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}parse_datetime.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}parse_datetime.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}plugins.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} +lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}plugins.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}terminal.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}terminal.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}utils.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}version.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/${MODPY_PYCACHE}version.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/khal/_compat.py lib/python${MODPY_VERSION}/site-packages/khal/calendar_display.py lib/python${MODPY_VERSION}/site-packages/khal/cli.py +lib/python${MODPY_VERSION}/site-packages/khal/cli_utils.py lib/python${MODPY_VERSION}/site-packages/khal/configwizard.py lib/python${MODPY_VERSION}/site-packages/khal/controllers.py lib/python${MODPY_VERSION}/site-packages/khal/custom_types.py @@ -59,14 +68,18 @@ lib/python${MODPY_VERSION}/site-packages lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}exceptions.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}khalendar.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}khalendar.${MODPY_PYC_MAGIC_TAG}pyc +lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}typing.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} +lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}typing.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}vdir.${MODPY_PYC_MAGIC_TAG}${MODPY_PYOEXTENSION} lib/python${MODPY_VERSION}/site-packages/khal/khalendar/${MODPY_PYCACHE}vdir.${MODPY_PYC_MAGIC_TAG}pyc lib/python${MODPY_VERSION}/site-packages/khal/khalendar/backend.py lib/python${MODPY_VERSION}/site-packages/khal/khalendar/event.py lib/python${MODPY_VERSION}/site-packages/khal/khalendar/exceptions.py lib/python${MODPY_VERSION}/site-packages/khal/khalendar/khalendar.py +lib/python${MODPY_VERSION}/site-packages/khal/khalendar/typing.py lib/python${MODPY_VERSION}/site-packages/khal/khalendar/vdir.py lib/python${MODPY_VERSION}/site-packages/khal/parse_datetime.py +lib/python${MODPY_VERSION}/site-packages/khal/plugins.py lib/python${MODPY_VERSION}/site-packages/khal/settings/ lib/python${MODPY_VERSION}/site-packages/khal/settings/__init__.py lib/python${MODPY_VERSION}/site-packages/khal/settings/${MODPY_PYCACHE}/