diff --git a/config.el b/config.el index 2dee473..d5a185e 100644 --- a/config.el +++ b/config.el @@ -1933,13 +1933,22 @@ current frame." (evil-set-initial-state 'calfw-calendar-mode 'emacs) (evil-set-initial-state 'calfw-details-mode 'emacs) - ;; Pomocná funkce: extrahuj čas z file-source stringu ("10:30 Event" → 1030) + ;; FIX: calfw-org-create-file-source dává same-day timed events (10:00-11:00) + ;; do `periods` místo `contents` protože end-date = start-date → sorter se nevztahuje. + ;; Advice vymaže end-date pro same-day events → jdou do contents → sortují se správně. + (define-advice calfw-org-convert-event (:filter-return (event) my/fix-same-day-periods) + (when (and event + (calfw-event-end-date event) + (equal (calfw-event-end-date event) (calfw-event-start-date event))) + (setf (calfw-event-end-date event) nil)) + event) + + ;; Universal sorter: time-of-day property (agenda source) NEBO prefix "HH:MM " (file source) (defun my/calfw-extract-time (str) (when (string-match "^\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\) " str) (+ (* (string-to-number (match-string 1 str)) 100) (string-to-number (match-string 2 str))))) - ;; Universal sorter: čte time-of-day property (agenda source) NEBO parsuje prefix "HH:MM " (file source) (defun my/calfw-sorter (text1 text2) (let ((t1 (or (get-text-property 0 'time-of-day text1) (my/calfw-extract-time text1))) (t2 (or (get-text-property 0 'time-of-day text2) (my/calfw-extract-time text2)))) @@ -1949,18 +1958,15 @@ current frame." (t (string-lessp text1 text2))))) (defun my/open-calendar () - "Calfw s barvami: Suky=modrá, Klára=žlutá, Rodina=zelená, Agenda=zelená (tmavá). -Agenda files → calfw-org-create-source (SCHEDULED/DEADLINE). -CalDAV soubory → calfw-org-create-file-source (plain timestamps, správné dny). -Universal sorter funguje pro oba typy." + "Calfw s barvami: Suky=modrá, Klára=žlutá, Rodina=zelená, Agenda=tmavě zelená. +same-day events → contents (sortují se), multi-day → periods. +Agenda files → calfw-org-create-source. CalDAV → calfw-org-create-file-source." (interactive) (condition-case err (let* ((cd (expand-file-name "~/org/caldav/")) (sources (delq nil (list - ;; Agenda: org-agenda-files přes org-agenda machinery (calfw-org-create-source nil "Agenda" "SeaGreen4") - ;; CalDAV: file-source — plain timestamps, správné dny (when (file-exists-p (concat cd "suky.org")) (calfw-org-create-file-source "Suky" (concat cd "suky.org") "SteelBlue")) (when (file-exists-p (concat cd "klara.org"))