Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Org 9.7 org-element API changes break habit selector #247

Open
Thaodan opened this issue Sep 11, 2023 · 9 comments
Open

Org 9.7 org-element API changes break habit selector #247

Thaodan opened this issue Sep 11, 2023 · 9 comments
Assignees
Milestone

Comments

@Thaodan
Copy link

Thaodan commented Sep 11, 2023

Description

Opening the agenda (org-agenda) for the current week or day results in the backtrace shown below.
(C-c a a).
Custom agenda commands are only affected if they have habbits inside them.

I think the habbit :habit t selector triggers the bug.

Environment

  • Org mode version 9.7-pre (release_9.6.3-297-g28d41e
  • GNU Emacs 30.0.50 (build 1, x86_64-suse-linux-gnu, GTK+ Version 3.24.38, cairo version 1.17.8)

Org-Agenda and Super-Agenda setings

   (use-package org-agenda
      :defer t
      :after org
      :config
      ;; org-org-directory and subdirectories
      (setq org-agenda-files `,(append '("~/Dokumente/org") (f-directories "~/Dokumente/org" nil t)))

      (defun org-agenda-custom-command-for (file)
        "Return list usable in org-agenda-custom-commands with agenda and all TODOs for FILE and inbox-FILE."
        (list '((agenda "") (alltodo "")) `((org-agenda-files '(,(expand-file-name "inbox.org" (car org-directory))
                                                                ,(expand-file-name (concat "caldav-inbox-" file ".org") (car org-directory))
                                                                ,(expand-file-name "gemeinsam-inbox.org" (car org-directory))
                                                                ,(expand-file-name "gemeinsam.org" (car org-directory))
                                                                ,(expand-file-name (concat file ".org") (car org-directory)))))))
      (defun org-agenda-custom-command-for-work (file)
        "Return list usable in org-agenda-custom-commands with agenda and all TODOs for FILE and work inbox."
        (list '((agenda "") (alltodo "")) `((org-agenda-files '(,(expand-file-name "inbox.org" (car org-directory))
                                                                ,(expand-file-name "caldav-inbox-arbeit.org" (car org-directory))
                                                                ,(expand-file-name (concat file ".org") (car org-directory)))))))

      (setq org-clocked-in-project "jolla")

      (setq org-agenda-custom-commands
            `(
              ("A" "Agenda and all TODOs" ((agenda "") (alltodo "")))
              (" " "Current Project Agenda and TODOs" ,@(org-agenda-custom-command-for-work org-clocked-in-project))
              ("j" "Jolla Agenda and TODOs" ,@(org-agenda-custom-command-for-work "jolla"))
              ("d" "Agenda and TODOs" ,@(org-agenda-custom-command-for-work "mler"))
              ("p" "Personal Agenda and TODOs" ,@(org-agenda-custom-command-for "personal"))
              ;;("t" "PTapp Agenda and TODOs" ,@(org-agenda-custom-command-for "ptapp"))
              ;;("S" "Skor Agenda and TODOs" ,@(org-agenda-custom-command-for "skor"))
              ("W" "Weekly Review"
               ((agenda "" ((org-agenda-span 7))); review upcoming deadlines and appointments
                                            ; type "l" in the agenda to review logged items
                (stuck "") ; review stuck projects as designated by org-stuck-projects
                (todo "PROJECT") ; review all projects (assuming you use todo keywords to designate projects)
                (todo "MAYBE") ; review someday/maybe items
                (todo "WAITING"))) ; review waiting items
              ;; ...other commands here
              ))

      ;; Overwrite the current window with the agenda
      (setq org-agenda-window-setup 'current-window)

      ;; Do not dim blocked tasks
      (setq org-agenda-dim-blocked-tasks nil)

      ;; Compact the block agenda view
      (setq org-agenda-compact-blocks nil)

      ;; Agenda clock report parameters
      (setq org-agenda-clockreport-parameter-plist
            (quote (:link t :maxlevel 5 :fileskip0 t :stepskip0 t :compact nil :narrow 80)))

      ;; Agenda log mode items to display (closed and state changes by default)
      (setq org-agenda-log-mode-items (quote (closed state clock)))

      ;; Keep tasks with dates on the global todo lists
      (setq org-agenda-todo-ignore-with-date nil)

      ;; Keep tasks with deadlines on the global todo lists
      (setq org-agenda-todo-ignore-deadlines nil)

      ;; Keep tasks with scheduled dates on the global todo lists
      (setq org-agenda-todo-ignore-scheduled nil)

      ;; Keep tasks with timestamps on the global todo lists
      (setq org-agenda-todo-ignore-timestamp nil)

      ;; Remove completed deadline tasks from the agenda view
      (setq org-agenda-skip-deadline-if-done t)

      ;; Remove completed scheduled tasks from the agenda view
      ;; (setq org-agenda-skip-scheduled-if-done t)

      ;; Remove completed items from search results
      ;; (setq org-agenda-skip-timestamp-if-done t)

      ;; Include agenda archive files when searching for things
      (setq org-agenda-text-search-extra-files (quote (agenda-archives)))

      ;; Show all future entries for repeating tasks
      (setq org-agenda-repeating-timestamp-show-all t)

      ;; Show all agenda dates - even if they are empty
      (setq org-agenda-show-all-dates t)

      ;; Start the weekly agenda on Monday
      (setq org-agenda-start-on-weekday 1)

      ;; For 0 to 4am show yesterday in the agenda view "toady"
      (setq org-extend-today-until 4)

      ;; Agenda styling
      (setq org-agenda-block-separator ?─
            org-agenda-time-grid
            '((daily today require-timed)
              (800 1000 1200 1400 1600 1800 2000)
              " ┄┄┄┄┄ " "┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄")
            org-agenda-current-time-string
            "⭠ now ─────────────────────────────────────────────────")

      ;; Insert a separator between each day
      (setq org-agenda-format-date (lambda (date) (concat "\n"
                                                          (make-string (window-width) 9472)
                                                          "\n"
                                                          (org-agenda-format-date-aligned date))))

      ;; Use sticky agenda's so they persist
      ;;(setq org-agenda-sticky t)

      ;; Limit restriction lock highlighting to the headline only
      (setq org-agenda-restriction-lock-highlight-subtree nil)

      ;; Sorting order for tasks on the agenda
      (setq org-agenda-sorting-strategy
            (quote ((agenda habit-down time-up user-defined-up effort-up category-keep)
                    (todo category-up effort-up)
                    (tags category-up effort-up)
                    (search category-up))))

      ;; Enable display of the time grid so we can see the marker for the current time
      ;;(setq org-agenda-time-grid (quote ((daily today remove-match)
      ;;                                   #("----------------" 0 16 (org-heading t))
      ;;                                   (0900 1100 1300 1500 1700))))

      ;; Update appt list on agenda view
      (add-hook 'org-agenda-finalize-hook 'org-agenda-to-appt)
      (appt-activate)
      (org-agenda-to-appt)

      (setq org-catch-invisible-edits 'show-and-error)
      (setq org-auto-align-tags t)
      ;; Display tags farther right
      ;; (setq org-agenda-tags-column 0)
      (setq org-agenda-tags-column -102)

      (setq org-agenda-include-diary t)

      ;; Include the last few days in the agenda by default
      ;; Switch w to get a week a agenda
      (setq org-agenda-span 2)

      ;; http://doc.norang.ca/org-mode.html#CustomAgendaViewFiltering
      (defun thao/org-auto-exclude-function (tag)
        "Automatic task exclusion in the agenda with / RET"
        (and (cond
              ((string= tag "hold")
               t))
             (concat "-" tag)))
      (setq org-agenda-auto-exclude-function 'thao/org-auto-exclude-function)
      )


    (use-package org-super-agenda
      :after org-agenda
      :config
      (setq org-super-agenda-groups
            '(;; Each group has an implicit boolean OR operator between its selectors.

              (:name "Deadlines"
                     :deadline today
                     :order 0)
              (:name "Upcoming Deadlines"
                     :deadline future
                     :order 10)
              (:name "Habits"
                     :habit t
                     :order 7)
              (:name "Routines"
                     :category "Routine"
                     :order 6)
              (:name "GTD Upkeep"
                     :category "GTD"
                     :order 8)
              (:name "Events"
                     :category "Event"
                     :category "Social"
                     :order 1)
              (:name "Emails and online tasks"
                     :tag "email"
                     :order 1)
              (:name "Work tasks"
                     :time-grid t
                     :and (:tag "work" :todo t :scheduled today)
                     ;; Add any work catergories here
                     :and (:category "Jolla" :todo t :scheduled today)
                     :and (:category "Daimler" :todo t :scheduled today)
                     :order 2)
              (:name "Deferred work tasks"
                     :and (:tag "work" :not (:todo ("CNCL" "DONE")) :scheduled past)
                     ;; Add any work catergories here
                     :and (:category "Jolla" :not (:todo ("CNCL" "DONE")) :scheduled past)
                     :and (:category "Daimler" :not (:todo ("CNCL" "DONE")) :scheduled past)
                     :order 3)
              (:name "Information about today"
                     :category "Sunrise" ;; FIXME use geo
                     :category "Day info"
                     :order 9)
              (:name "Personal tasks"
                     :scheduled today
                     :order 4)
              (:name "Deferred personal tasks"
                     :and (:not (:todo ("CNCL" "DONE")) :scheduled past)
                     :order 5)))


      (org-super-agenda-mode)
      )

Notes:

Similar to alphapapa/org-web-tools#56 but for org-super-agenda.

Backtrace

Debugger entered--Lisp error: (error "‘org-element-at-point’ cannot be used in non-Org b...")
  signal(error ("‘org-element-at-point’ cannot be used in non-Org b..."))
  error("`org-element-at-point' cannot be used in non-Org b..." #<buffer *Org Agenda*> org-agenda-mode)
  (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode))
  (save-restriction (widen) (goto-char (or --mepom (point))) (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode)) (if (and cached-only (memq this-command org-element--cache-non-modifying-commands)) (progn (setq cached-only nil))) (let (element) (if (org-element--cache-active-p) (progn (if (not (save-current-buffer (set-buffer ...) org-element--cache)) (org-element-cache-reset) (if cached-only nil (org-element--cache-sync (current-buffer) epom))))) (setq element (if cached-only (if (and (org-element--cache-active-p) (or (not org-element--cache-sync-requests) (< epom ...))) (progn (org-element--cache-find epom))) (condition-case err (org-element--parse-to epom) ((debug error) (let* (... ...) (if ... ... ...)) (org-element-cache-reset) (org-element--parse-to epom))))) (if (and (org-element--cache-active-p) element (org-element--cache-verify-element element)) (progn (setq element (org-element--parse-to epom)))) (if (eq (org-element-type element t) 'org-data) nil (if (and cached-only (not (and element (or ... ... ... ...)))) nil (if (not (eq (org-element-type element t) 'section)) element (org-element-at-point (1+ epom) cached-only))))))
  (save-excursion (save-restriction (widen) (goto-char (or --mepom (point))) (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode)) (if (and cached-only (memq this-command org-element--cache-non-modifying-commands)) (progn (setq cached-only nil))) (let (element) (if (org-element--cache-active-p) (progn (if (not (save-current-buffer ... org-element--cache)) (org-element-cache-reset) (if cached-only nil (org-element--cache-sync ... epom))))) (setq element (if cached-only (if (and (org-element--cache-active-p) (or ... ...)) (progn (org-element--cache-find epom))) (condition-case err (org-element--parse-to epom) ((debug error) (let* ... ...) (org-element-cache-reset) (org-element--parse-to epom))))) (if (and (org-element--cache-active-p) element (org-element--cache-verify-element element)) (progn (setq element (org-element--parse-to epom)))) (if (eq (org-element-type element t) 'org-data) nil (if (and cached-only (not (and element ...))) nil (if (not (eq ... ...)) element (org-element-at-point (1+ epom) cached-only)))))))
  (save-excursion (cond ((markerp --mepom) (set-buffer (marker-buffer --mepom))) ((numberp --mepom)) (t (if (let* ((parray (and t ...))) (if parray (let* (...) (if ... ... ...)) (let* (...) (cond ... ... ...)))) (progn (set-buffer (let* (...) (if parray ... ...))))) (setq --mepom (let* ((parray (and t ...))) (if parray (let* (...) (if ... ... ...)) (let* (...) (cond ... ... ...))))))) (save-excursion (save-restriction (widen) (goto-char (or --mepom (point))) (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode)) (if (and cached-only (memq this-command org-element--cache-non-modifying-commands)) (progn (setq cached-only nil))) (let (element) (if (org-element--cache-active-p) (progn (if (not ...) (org-element-cache-reset) (if cached-only nil ...)))) (setq element (if cached-only (if (and ... ...) (progn ...)) (condition-case err (org-element--parse-to epom) (... ... ... ...)))) (if (and (org-element--cache-active-p) element (org-element--cache-verify-element element)) (progn (setq element (org-element--parse-to epom)))) (if (eq (org-element-type element t) 'org-data) nil (if (and cached-only (not ...)) nil (if (not ...) element (org-element-at-point ... cached-only))))))))
  (let ((--mepom epom)) (save-excursion (cond ((markerp --mepom) (set-buffer (marker-buffer --mepom))) ((numberp --mepom)) (t (if (let* ((parray ...)) (if parray (let* ... ...) (let* ... ...))) (progn (set-buffer (let* ... ...)))) (setq --mepom (let* ((parray ...)) (if parray (let* ... ...) (let* ... ...)))))) (save-excursion (save-restriction (widen) (goto-char (or --mepom (point))) (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode)) (if (and cached-only (memq this-command org-element--cache-non-modifying-commands)) (progn (setq cached-only nil))) (let (element) (if (org-element--cache-active-p) (progn (if ... ... ...))) (setq element (if cached-only (if ... ...) (condition-case err ... ...))) (if (and (org-element--cache-active-p) element (org-element--cache-verify-element element)) (progn (setq element ...))) (if (eq (org-element-type element t) 'org-data) nil (if (and cached-only ...) nil (if ... element ...))))))))
  (if (org-element-type epom t) epom (setq epom (or epom (point))) (let ((--mepom epom)) (save-excursion (cond ((markerp --mepom) (set-buffer (marker-buffer --mepom))) ((numberp --mepom)) (t (if (let* (...) (if parray ... ...)) (progn (set-buffer ...))) (setq --mepom (let* (...) (if parray ... ...))))) (save-excursion (save-restriction (widen) (goto-char (or --mepom (point))) (if (derived-mode-p 'org-mode) nil (error "`org-element-at-point' cannot be used in non-Org b..." (current-buffer) major-mode)) (if (and cached-only (memq this-command org-element--cache-non-modifying-commands)) (progn (setq cached-only nil))) (let (element) (if (org-element--cache-active-p) (progn ...)) (setq element (if cached-only ... ...)) (if (and ... element ...) (progn ...)) (if (eq ... ...) nil (if ... nil ...))))))))
  org-element-at-point(nil)
  (org-element-lineage (org-element-at-point epom) '(headline inlinetask org-data) 'with-self)
  (setq epom (org-element-lineage (org-element-at-point epom) '(headline inlinetask org-data) 'with-self))
  org--property-local-values("STYLE" nil nil)
  (let* ((local (org--property-local-values property literal-nil epom)) (value (and local (mapconcat #'identity (delq nil local) (org--property-get-separator property))))) (if literal-nil value (org-not-nil value)))
  (cond ((member-ignore-case property (cons "CATEGORY" org-special-properties)) (cdr (assoc-string property (org-entry-properties epom property)))) ((and inherit (or (not (eq inherit 'selective)) (org-property-inherit-p property))) (org-entry-get-with-inheritance property literal-nil epom)) (t (let* ((local (org--property-local-values property literal-nil epom)) (value (and local (mapconcat #'identity (delq nil local) (org--property-get-separator property))))) (if literal-nil value (org-not-nil value)))))
  org-entry-get(nil "STYLE" selective)
  (string= "habit" (org-entry-get epom "STYLE" 'selective))
  org-is-habit-p(nil)
  (if (org-is-habit-p (org-super-agenda--get-marker item)) (progn (setq matching (nconc matching (list item)))) (setq non-matching (nconc non-matching (list item))))
  (while (consp --cl-var--) (setq item (car --cl-var--)) (if (org-is-habit-p (org-super-agenda--get-marker item)) (progn (setq matching (nconc matching (list item)))) (setq non-matching (nconc non-matching (list item)))) (setq --cl-var-- (cdr --cl-var--)))
  (let* ((section-name "Habits") (--cl-var-- items) (item nil) (matching nil) (non-matching nil)) (while (consp --cl-var--) (setq item (car --cl-var--)) (if (org-is-habit-p (org-super-agenda--get-marker item)) (progn (setq matching (nconc matching (list item)))) (setq non-matching (nconc non-matching (list item)))) (setq --cl-var-- (cdr --cl-var--))) (list section-name non-matching matching))
  (let* nil (let* ((section-name "Habits") (--cl-var-- items) (item nil) (matching nil) (non-matching nil)) (while (consp --cl-var--) (setq item (car --cl-var--)) (if (org-is-habit-p (org-super-agenda--get-marker item)) (progn (setq matching (nconc matching (list item)))) (setq non-matching (nconc non-matching (list item)))) (setq --cl-var-- (cdr --cl-var--))) (list section-name non-matching matching)))
  org-super-agenda--group-habit((... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) t)
  funcall(org-super-agenda--group-habit (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) t)
  (setq --cl-var-- (funcall fn items args))
  (progn (setq --cl-var-- (funcall fn items args)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--)))
  (progn (progn (setq --cl-var-- (funcall fn items args)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--))))
  (if fn (progn (progn (setq --cl-var-- (funcall fn items args)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--)))))
  (while (consp --cl-var--) (progn (setq --cl-var-- --cl-var--) (setq selector (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq args (car --cl-var--))) (setq fn (org-super-agenda--get-selector-fn selector)) (if fn (progn (progn (setq --cl-var-- (funcall fn items args)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq matching (car --cl-var--))))) (if fn (progn (setq all-matches (append all-matches matching)) (setq names (nconc names (list auto-section-name))) (setq items non-matching))) (setq name (if (stringp (car names)) (s-join " and " (-non-nil names)) (car names))) (setq --cl-var-- (cdr (cdr --cl-var--))) (setq --cl-var-- nil))
  (let* ((--cl-var-- group) (selector nil) (args nil) (--cl-var--) (fn nil) (auto-section-name nil) (non-matching nil) (matching nil) (--cl-var--) (all-matches nil) (names nil) (name nil) (--cl-var-- t)) (while (consp --cl-var--) (progn (setq --cl-var-- --cl-var--) (setq selector (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq args (car --cl-var--))) (setq fn (org-super-agenda--get-selector-fn selector)) (if fn (progn (progn (setq --cl-var-- (funcall fn items args)) (setq auto-section-name (car-safe (prog1 --cl-var-- ...))) (setq non-matching (car-safe (prog1 --cl-var-- ...))) (setq matching (car --cl-var--))))) (if fn (progn (setq all-matches (append all-matches matching)) (setq names (nconc names (list auto-section-name))) (setq items non-matching))) (setq name (if (stringp (car names)) (s-join " and " (-non-nil names)) (car names))) (setq --cl-var-- (cdr (cdr --cl-var--))) (setq --cl-var-- nil)) (list name items all-matches))
  org-super-agenda--group-dispatch((... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) (:name "Habits" :habit t :order 7))
  (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter))
  (progn (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--)))
  (while (consp --cl-var--) (setq filter (car --cl-var--)) (setq custom-section-name (plist-get filter :name)) (setq order (or (plist-get filter :order) 0)) (progn (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--))) (if org-super-agenda-keep-order (progn (setq matching (sort matching #'org-entries-lessp)))) (setq transformer (plist-get filter :transformer)) (let ((it transformer)) (if it (progn (setq matching (-map (let* (...) (cond ... ... ...)) matching))))) (setq face (plist-get filter :face)) (let ((it face)) (if it (progn (let ((append (plist-get face :append))) (if append (progn (if ... ... ...))) (let ((list matching) (i 0)) (while list (let ... ... ...) (setq i ...))))))) (if (memql auto-section-name org-super-agenda-auto-selector-keywords) (progn (setq section-name (or custom-section-name "Auto category/group")) (setq sections (append sections (let* ((--cl-var-- matching) (group nil) (--cl-var-- nil)) (while (consp --cl-var--) (setq group ...) (setq --cl-var-- ...) (setq --cl-var-- ...)) (nreverse --cl-var--)))) (setq all-items non-matching)) (setq section-name (or custom-section-name auto-section-name)) (setq sections (nconc sections (list (list :name section-name :items matching :order order)))) (setq all-items non-matching)) (setq --cl-var-- (cdr --cl-var--)) (setq --cl-var-- nil))
  (let* ((section-name nil) (--cl-var-- org-super-agenda-groups) (filter nil) (custom-section-name nil) (order nil) (auto-section-name nil) (non-matching nil) (matching nil) (--cl-var--) (transformer nil) (face nil) (sections nil) (--cl-var-- t)) (while (consp --cl-var--) (setq filter (car --cl-var--)) (setq custom-section-name (plist-get filter :name)) (setq order (or (plist-get filter :order) 0)) (progn (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- (cdr --cl-var--))))) (setq matching (car --cl-var--))) (if org-super-agenda-keep-order (progn (setq matching (sort matching #'org-entries-lessp)))) (setq transformer (plist-get filter :transformer)) (let ((it transformer)) (if it (progn (setq matching (-map (let* ... ...) matching))))) (setq face (plist-get filter :face)) (let ((it face)) (if it (progn (let ((append ...)) (if append (progn ...)) (let (... ...) (while list ... ...)))))) (if (memql auto-section-name org-super-agenda-auto-selector-keywords) (progn (setq section-name (or custom-section-name "Auto category/group")) (setq sections (append sections (let* (... ... ...) (while ... ... ... ...) (nreverse --cl-var--)))) (setq all-items non-matching)) (setq section-name (or custom-section-name auto-section-name)) (setq sections (nconc sections (list (list :name section-name :items matching :order order)))) (setq all-items non-matching)) (setq --cl-var-- (cdr --cl-var--)) (setq --cl-var-- nil)) (setq non-matching (list :name org-super-agenda-unmatched-name :items non-matching :order org-super-agenda-unmatched-order)) (setq sections (-sort #'(lambda (it other) (ignore it other) (let ((o-it ...) (o-other ...)) (cond (... ...) (... ...) (t nil)))) (setq sections (cons non-matching sections)))) (let* ((--cl-var-- sections) (name nil) (items nil) (--cl-var--) (--cl-var--) (--cl-var--) (--cl-var-- nil)) (while (consp --cl-var--) (progn (setq --cl-var-- (car --cl-var--)) (setq --cl-var-- (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq name (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq --cl-var-- (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq items (car --cl-var--))) (if items (progn (setq --cl-var-- (cons (org-super-agenda--make-agenda-header name) --cl-var--)) (setq --cl-var-- (nconc (reverse items) --cl-var--)))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--)))
  (let ((org-super-agenda-groups (org-super-agenda--transform-groups org-super-agenda-groups))) (let* ((section-name nil) (--cl-var-- org-super-agenda-groups) (filter nil) (custom-section-name nil) (order nil) (auto-section-name nil) (non-matching nil) (matching nil) (--cl-var--) (transformer nil) (face nil) (sections nil) (--cl-var-- t)) (while (consp --cl-var--) (setq filter (car --cl-var--)) (setq custom-section-name (plist-get filter :name)) (setq order (or (plist-get filter :order) 0)) (progn (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter)) (setq auto-section-name (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq non-matching (car-safe (prog1 --cl-var-- (setq --cl-var-- ...)))) (setq matching (car --cl-var--))) (if org-super-agenda-keep-order (progn (setq matching (sort matching #'org-entries-lessp)))) (setq transformer (plist-get filter :transformer)) (let ((it transformer)) (if it (progn (setq matching (-map ... matching))))) (setq face (plist-get filter :face)) (let ((it face)) (if it (progn (let (...) (if append ...) (let ... ...))))) (if (memql auto-section-name org-super-agenda-auto-selector-keywords) (progn (setq section-name (or custom-section-name "Auto category/group")) (setq sections (append sections (let* ... ... ...))) (setq all-items non-matching)) (setq section-name (or custom-section-name auto-section-name)) (setq sections (nconc sections (list (list :name section-name :items matching :order order)))) (setq all-items non-matching)) (setq --cl-var-- (cdr --cl-var--)) (setq --cl-var-- nil)) (setq non-matching (list :name org-super-agenda-unmatched-name :items non-matching :order org-super-agenda-unmatched-order)) (setq sections (-sort #'(lambda (it other) (ignore it other) (let (... ...) (cond ... ... ...))) (setq sections (cons non-matching sections)))) (let* ((--cl-var-- sections) (name nil) (items nil) (--cl-var--) (--cl-var--) (--cl-var--) (--cl-var-- nil)) (while (consp --cl-var--) (progn (setq --cl-var-- (car --cl-var--)) (setq --cl-var-- (car-safe (prog1 --cl-var-- ...))) (setq name (car-safe (prog1 --cl-var-- ...))) (setq --cl-var-- (car-safe (prog1 --cl-var-- ...))) (setq items (car --cl-var--))) (if items (progn (setq --cl-var-- (cons ... --cl-var--)) (setq --cl-var-- (nconc ... --cl-var--)))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--))))
  (if (and (boundp 'org-super-agenda-groups) org-super-agenda-groups) (let ((org-super-agenda-groups (org-super-agenda--transform-groups org-super-agenda-groups))) (let* ((section-name nil) (--cl-var-- org-super-agenda-groups) (filter nil) (custom-section-name nil) (order nil) (auto-section-name nil) (non-matching nil) (matching nil) (--cl-var--) (transformer nil) (face nil) (sections nil) (--cl-var-- t)) (while (consp --cl-var--) (setq filter (car --cl-var--)) (setq custom-section-name (plist-get filter :name)) (setq order (or (plist-get filter :order) 0)) (progn (setq --cl-var-- (org-super-agenda--group-dispatch all-items filter)) (setq auto-section-name (car-safe (prog1 --cl-var-- ...))) (setq non-matching (car-safe (prog1 --cl-var-- ...))) (setq matching (car --cl-var--))) (if org-super-agenda-keep-order (progn (setq matching (sort matching ...)))) (setq transformer (plist-get filter :transformer)) (let ((it transformer)) (if it (progn (setq matching ...)))) (setq face (plist-get filter :face)) (let ((it face)) (if it (progn (let ... ... ...)))) (if (memql auto-section-name org-super-agenda-auto-selector-keywords) (progn (setq section-name (or custom-section-name "Auto category/group")) (setq sections (append sections ...)) (setq all-items non-matching)) (setq section-name (or custom-section-name auto-section-name)) (setq sections (nconc sections (list ...))) (setq all-items non-matching)) (setq --cl-var-- (cdr --cl-var--)) (setq --cl-var-- nil)) (setq non-matching (list :name org-super-agenda-unmatched-name :items non-matching :order org-super-agenda-unmatched-order)) (setq sections (-sort #'(lambda (it other) (ignore it other) (let ... ...)) (setq sections (cons non-matching sections)))) (let* ((--cl-var-- sections) (name nil) (items nil) (--cl-var--) (--cl-var--) (--cl-var--) (--cl-var-- nil)) (while (consp --cl-var--) (progn (setq --cl-var-- (car --cl-var--)) (setq --cl-var-- (car-safe ...)) (setq name (car-safe ...)) (setq --cl-var-- (car-safe ...)) (setq items (car --cl-var--))) (if items (progn (setq --cl-var-- ...) (setq --cl-var-- ...))) (setq --cl-var-- (cdr --cl-var--))) (nreverse --cl-var--)))) all-items)
  org-super-agenda--group-items((... ... ... ... ... ... ... ... ... ... ... ... ... ... ...))
  (let ((it (org-super-agenda--group-items it))) (let ((it (-remove #'s-blank-str? it))) (let ((it (s-join "\n" it))) (concat it (cond ((natnump org-super-agenda-final-group-separator) (concat "\n" (make-string ... org-super-agenda-final-group-separator))) ((stringp org-super-agenda-final-group-separator) org-super-agenda-final-group-separator) ((error "cl-etypecase failed: %s, %s" org-super-agenda-final-group-separator '...) nil))))))
  (let ((it (split-string it "\n" 'omit-nulls))) (let ((it (org-super-agenda--group-items it))) (let ((it (-remove #'s-blank-str? it))) (let ((it (s-join "\n" it))) (concat it (cond ((natnump org-super-agenda-final-group-separator) (concat "\n" ...)) ((stringp org-super-agenda-final-group-separator) org-super-agenda-final-group-separator) ((error "cl-etypecase failed: %s, %s" org-super-agenda-final-group-separator ...) nil)))))))
  (let ((it string)) (let ((it (split-string it "\n" 'omit-nulls))) (let ((it (org-super-agenda--group-items it))) (let ((it (-remove #'s-blank-str? it))) (let ((it (s-join "\n" it))) (concat it (cond (... ...) (... org-super-agenda-final-group-separator) (... nil))))))))
  org-super-agenda--filter-finalize-entries(#("               8:00 ┄┄┄┄┄ ┄┄┄┄┄┄..." 0 2 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 800 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time " 8:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "08:00") 2 26 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 800 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time " 8:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "08:00" face org-time-grid) 26 41 (org-heading t org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 800 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time " 8:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "08:00" face org-time-grid) 42 44 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1000 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "10:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "10:00") 44 68 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1000 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "10:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "10:00" face org-time-grid) 68 83 (org-heading t org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1000 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "10:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "10:00" face org-time-grid) 84 86 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1200 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "12:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "12:00") 86 110 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1200 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "12:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "12:00" face org-time-grid) 110 125 (org-heading t org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1200 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "12:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "12:00" face org-time-grid) 126 128 (org-category "" tags nil org-priority-highest 65 org-priority-lowest 67 time-of-day 1400 duration nil breadcrumbs nil txt #("┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄" 0 15 (org-heading t)) level "" time "14:00 ┄┄┄┄┄ " extra nil format ((... ... ... ... ...) (format " %s %s%s%s" ... ... ... ...)) dotime "14:00") ...))
  org-agenda-finalize-entries((... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) agenda)
  (insert (org-agenda-finalize-entries rtnall 'agenda) "\n")
  (progn (insert (org-agenda-finalize-entries rtnall 'agenda) "\n"))
  (if rtnall (progn (insert (org-agenda-finalize-entries rtnall 'agenda) "\n")))
  (progn (setq day-cnt (1+ day-cnt)) (insert (if (stringp org-agenda-format-date) (format-time-string org-agenda-format-date (org-time-from-absolute date)) (funcall org-agenda-format-date date)) "\n") (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date)) (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point)) 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s (1- (point)) 'org-today t))) (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if rtnall (progn (insert (org-agenda-finalize-entries rtnall 'agenda) "\n"))) (put-text-property s (1- (point)) 'day d) (put-text-property s (1- (point)) 'org-day-cnt day-cnt))
  (if (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt)) (insert (if (stringp org-agenda-format-date) (format-time-string org-agenda-format-date (org-time-from-absolute date)) (funcall org-agenda-format-date date)) "\n") (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date)) (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point)) 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s (1- (point)) 'org-today t))) (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if rtnall (progn (insert (org-agenda-finalize-entries rtnall 'agenda) "\n"))) (put-text-property s (1- (point)) 'day d) (put-text-property s (1- (point)) 'org-day-cnt day-cnt)))
  (while (setq d (car-safe (prog1 day-numbers (setq day-numbers (cdr day-numbers))))) (progn (setq date (calendar-gregorian-from-absolute d)) (setq s (point))) (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos (point))))) (progn (setq files thefiles) (setq rtnall nil)) (while (setq file (car-safe (prog1 files (setq files (cdr files))))) (catch 'nextfile (org-check-agenda-file file) (let ((org-agenda-entry-types org-agenda-entry-types)) (if (member :deadline* org-agenda-entry-types) (progn (setq org-agenda-entry-types (delq :deadline org-agenda-entry-types)))) (if (member :scheduled* org-agenda-entry-types) (progn (setq org-agenda-entry-types (delq :scheduled org-agenda-entry-types)))) (if with-hour (progn (if (member :deadline org-agenda-entry-types) (progn ... ...)) (if (member :scheduled org-agenda-entry-types) (progn ... ...)))) (if org-agenda-include-deadlines nil (setq org-agenda-entry-types (delq :deadline* (delq :deadline org-agenda-entry-types)))) (cond ((memq org-agenda-show-log-scoped '...) (setq rtn (org-agenda-get-day-entries file date :closed))) (org-agenda-show-log-scoped (setq rtn (apply ... file date ...))) (t (setq rtn (apply ... file date org-agenda-entry-types))))) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary (progn (let ((org-agenda-search-headline-for-time t)) (require 'diary-lib) (setq rtn (org-get-entries-from-diary date)) (setq rtnall (append rtnall rtn))))) (if (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt)) (insert (if (stringp org-agenda-format-date) (format-time-string org-agenda-format-date (org-time-from-absolute date)) (funcall org-agenda-format-date date)) "\n") (put-text-property s (1- (point)) 'face (org-agenda-get-day-face date)) (put-text-property s (1- (point)) 'org-date-line t) (put-text-property s (1- (point)) 'org-agenda-date-header t) (put-text-property s (1- (point)) 'org-day-cnt day-cnt) (if todayp (progn (put-text-property s (1- (point)) 'org-today t))) (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if rtnall (progn (insert (org-agenda-finalize-entries rtnall 'agenda) "\n"))) (put-text-property s (1- (point)) 'day d) (put-text-property s (1- (point)) 'org-day-cnt day-cnt))))
  (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14)) org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode)) (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) s rtn rtnall file date d start-pos end-pos todayp clocktable-start clocktable-end) (setq org-agenda-redo-command (list 'org-agenda-list (list 'quote arg) start-day (list 'quote span) with-hour)) (let ((upper-bound (1- ndays)) (counter 0)) (while (< counter upper-bound) (let ((_ counter)) (setq day-numbers (cons ... day-numbers))) (setq counter (1+ counter)))) (setq day-numbers (nreverse day-numbers)) (progn (setq clocktable-start (car day-numbers)) (setq clocktable-end (1+ (or (org-last day-numbers) 0)))) (set (make-local-variable 'org-starting-day) (car day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert ...)) ((equal org-agenda-overriding-header "") nil) ((stringp org-agenda-overriding-header) (insert ... "\n")) ((functionp org-agenda-overriding-header) (insert ...)) (t (user-error "Invalid value for `org-agenda-overridi..." org-agenda-overriding-header)))) (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ... ... t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1 day-numbers (setq day-numbers ...)))) (progn (setq date (calendar-gregorian-from-absolute d)) (setq s (point))) (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos ...)))) (progn (setq files thefiles) (setq rtnall nil)) (while (setq file (car-safe (prog1 files ...))) (catch 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ... ...) (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ... ... ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt)) (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face (org-agenda-get-day-face date)) (put-text-property s (1- ...) 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header t) (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn ...)) (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if rtnall (progn ...)) (put-text-property s (1- ...) 'day d) (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and org-agenda-clockreport-mode clocktable-start) (progn (let ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p :tend clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ... p)) (if org-agenda-clock-report-header (progn ... ...)) (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args (list arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq buffer-read-only t) (message ""))
  (catch 'exit (setq org-agenda-buffer-name (org-agenda--get-buffer-name (and org-agenda-sticky (cond ((and org-keys ...) (format "*Org Agenda(%s:%s)*" org-keys org-match)) (org-keys (format "*Org Agenda(%s)*" org-keys)) (t "*Org Agenda(a)*"))))) (org-agenda-prepare "Day/Week") (setq start-day (or start-day org-agenda-start-day)) (if (stringp start-day) (progn (setq start-day (time-to-days (org-read-date nil t start-day))))) (org-compile-prefix-format 'agenda) (org-set-sorting-strategy 'agenda) (let* ((span (org-agenda-ndays-to-span (or span org-agenda-span))) (today (org-today)) (sd (or start-day today)) (ndays (org-agenda-span-to-ndays span sd)) (org-agenda-start-on-weekday (and (or (eq ndays 7) (eq ndays 14)) org-agenda-start-on-weekday)) (thefiles (org-agenda-files nil 'ifmode)) (files thefiles) (start (if (or (null org-agenda-start-on-weekday) (< ndays 7)) sd (let* (... ... ...) (- sd ...)))) (day-numbers (list start)) (day-cnt 0) (inhibit-redisplay (not debug-on-error)) (org-agenda-show-log-scoped org-agenda-show-log) s rtn rtnall file date d start-pos end-pos todayp clocktable-start clocktable-end) (setq org-agenda-redo-command (list 'org-agenda-list (list 'quote arg) start-day (list 'quote span) with-hour)) (let ((upper-bound (1- ndays)) (counter 0)) (while (< counter upper-bound) (let ((_ counter)) (setq day-numbers (cons ... day-numbers))) (setq counter (1+ counter)))) (setq day-numbers (nreverse day-numbers)) (progn (setq clocktable-start (car day-numbers)) (setq clocktable-end (1+ (or (org-last day-numbers) 0)))) (set (make-local-variable 'org-starting-day) (car day-numbers)) (set (make-local-variable 'org-arg-loc) arg) (set (make-local-variable 'org-agenda-current-span) (org-agenda-ndays-to-span span)) (if org-agenda-compact-blocks nil (let* ((d1 (car day-numbers)) (d2 (org-last day-numbers)) (w1 (org-days-to-iso-week d1)) (w2 (org-days-to-iso-week d2))) (setq s (point)) (cond ((not org-agenda-overriding-header) (insert ...)) ((equal org-agenda-overriding-header "") nil) ((stringp org-agenda-overriding-header) (insert ... "\n")) ((functionp org-agenda-overriding-header) (insert ...)) (t (user-error "Invalid value for `org-agenda-overriding-hea..." org-agenda-overriding-header)))) (if (> (point) s) (progn (add-text-properties s (1- ...) (list ... ... ... t)) (org-agenda-mark-header-line s)))) (while (setq d (car-safe (prog1 day-numbers (setq day-numbers ...)))) (progn (setq date (calendar-gregorian-from-absolute d)) (setq s (point))) (if (or (setq todayp (= d today)) (and (not start-pos) (= d sd))) (setq start-pos (point)) (if (and start-pos (not end-pos)) (progn (setq end-pos ...)))) (progn (setq files thefiles) (setq rtnall nil)) (while (setq file (car-safe (prog1 files ...))) (catch 'nextfile (org-check-agenda-file file) (let (...) (if ... ...) (if ... ...) (if with-hour ...) (if org-agenda-include-deadlines nil ...) (cond ... ... ...)) (setq rtnall (append rtnall rtn)))) (if org-agenda-include-diary (progn (let (...) (require ...) (setq rtn ...) (setq rtnall ...)))) (if (or rtnall org-agenda-show-all-dates) (progn (setq day-cnt (1+ day-cnt)) (insert (if ... ... ...) "\n") (put-text-property s (1- ...) 'face (org-agenda-get-day-face date)) (put-text-property s (1- ...) 'org-date-line t) (put-text-property s (1- ...) 'org-agenda-date-header t) (put-text-property s (1- ...) 'org-day-cnt day-cnt) (if todayp (progn ...)) (setq rtnall (org-agenda-add-time-grid-maybe rtnall ndays todayp)) (if rtnall (progn ...)) (put-text-property s (1- ...) 'day d) (put-text-property s (1- ...) 'org-day-cnt day-cnt)))) (if (and org-agenda-clockreport-mode clocktable-start) (progn (let ((org-agenda-files ...) (p ...) tbl) (setq p (org-plist-delete p :block)) (setq p (plist-put p :tstart clocktable-start)) (setq p (plist-put p :tend clocktable-end)) (setq p (plist-put p :scope ...)) (setq tbl (apply ... p)) (if org-agenda-clock-report-header (progn ... ...)) (insert tbl)))) (goto-char (point-min)) (or org-agenda-multi (org-agenda-fit-window-to-buffer)) (if (or (not (get-buffer-window org-agenda-buffer-name)) (and (pos-visible-in-window-p (point-min)) (pos-visible-in-window-p (point-max)))) nil (goto-char (1- (point-max))) (recenter -1) (if (not (pos-visible-in-window-p (or start-pos 1))) (progn (goto-char (or start-pos 1)) (recenter 1)))) (goto-char (or start-pos 1)) (add-text-properties (point-min) (point-max) (list 'org-agenda-type 'agenda 'org-last-args (list arg start-day span) 'org-redo-cmd org-agenda-redo-command 'org-series-cmd org-cmd)) (if (eq org-agenda-show-log-scoped 'clockcheck) (progn (org-agenda-show-clocking-issues))) (org-agenda-finalize) (setq buffer-read-only t) (message "")))
  org-agenda-list(nil)
  funcall-interactively(org-agenda-list nil)
  call-interactively(org-agenda-list)
  (cond ((setq entry (assoc org-keys org-agenda-custom-commands)) (if (or (symbolp (nth 2 entry)) (functionp (nth 2 entry))) (progn (progn (setq type (nth 2 entry)) (setq org-match (eval (nth 3 entry) t)) (setq lprops (nth 4 entry))) (if org-agenda-sticky (progn (setq org-agenda-buffer-name (or ... ...)))) (progn (let* ((syms ...) (vals ...) (body ...) (binds nil)) (while syms (setq binds ...)) (eval (list ... ... ...)))) (let ((inhibit-read-only t)) (add-text-properties (point-min) (point-max) (list 'org-lprops lprops)))) (org-agenda-run-series (nth 1 entry) (cdr (cdr entry))))) ((equal org-keys "C") (setq org-agenda-custom-commands org-agenda-custom-commands-orig) (customize-variable 'org-agenda-custom-commands)) ((equal org-keys "a") (call-interactively 'org-agenda-list)) ((equal org-keys "s") (call-interactively 'org-search-view)) ((equal org-keys "S") (org-call-with-arg 'org-search-view (or arg '(4)))) ((equal org-keys "t") (call-interactively 'org-todo-list)) ((equal org-keys "T") (org-call-with-arg 'org-todo-list (or arg '(4)))) ((equal org-keys "m") (call-interactively 'org-tags-view)) ((equal org-keys "M") (org-call-with-arg 'org-tags-view (or arg '(4)))) ((equal org-keys "e") (call-interactively 'org-store-agenda-views)) ((equal org-keys "?") (org-tags-view nil "+FLAGGED") (add-hook 'post-command-hook #'(lambda nil (if (current-message) nil (let* (... ...) (if note ...)))) t t)) ((equal org-keys "#") (call-interactively 'org-agenda-list-stuck-projects)) ((equal org-keys "/") (call-interactively 'org-occur-in-agenda-files)) ((equal org-keys "!") (customize-variable 'org-stuck-projects)) (t (user-error "Invalid agenda key")))
  (let* ((org-keys keys) (prefix-descriptions nil) (org-agenda-buffer-name org-agenda-buffer-name) (org-agenda-window-setup (if (equal (buffer-name) org-agenda-buffer-name) 'current-window org-agenda-window-setup)) (org-agenda-custom-commands-orig org-agenda-custom-commands) (org-agenda-custom-commands (delq nil (mapcar #'(lambda (x) (cond ... ... ... ...)) org-agenda-custom-commands))) (org-agenda-custom-commands (org-contextualize-keys org-agenda-custom-commands org-agenda-custom-commands-contexts)) (bfn (buffer-file-name (buffer-base-buffer))) entry type org-match lprops ans) (if org-agenda-overriding-restriction nil (if org-agenda-keep-restricted-file-list nil (put 'org-agenda-files 'org-restrict nil)) (setq org-agenda-restrict nil) (move-marker org-agenda-restrict-begin nil) (move-marker org-agenda-restrict-end nil)) (if org-keys nil (progn (setq ans (org-agenda-get-restriction-and-command prefix-descriptions)) (setq org-keys (car ans)) (setq restriction (cdr ans)))) (if org-agenda-sticky (progn (setq org-agenda-buffer-name (format "*Org Agenda(%s)*" org-keys)))) (if (and (not org-agenda-overriding-restriction) restriction) (progn (put 'org-agenda-files 'org-restrict (list bfn)) (cond ((eq restriction 'region) (setq org-agenda-restrict (current-buffer)) (move-marker org-agenda-restrict-begin (region-beginning)) (move-marker org-agenda-restrict-end (region-end))) ((eq restriction 'subtree) (save-excursion (setq org-agenda-restrict (current-buffer)) (org-back-to-heading t) (move-marker org-agenda-restrict-begin (point)) (move-marker org-agenda-restrict-end (progn ...)))) ((eq restriction 'buffer) (if (not (buffer-narrowed-p)) (setq org-agenda-restrict t) (setq org-agenda-restrict (current-buffer)) (move-marker org-agenda-restrict-begin (point-min)) (move-marker org-agenda-restrict-end (point-max))))))) (cond ((setq entry (assoc org-keys org-agenda-custom-commands)) (if (or (symbolp (nth 2 entry)) (functionp (nth 2 entry))) (progn (progn (setq type (nth 2 entry)) (setq org-match (eval ... t)) (setq lprops (nth 4 entry))) (if org-agenda-sticky (progn (setq org-agenda-buffer-name ...))) (progn (let* (... ... ... ...) (while syms ...) (eval ...))) (let ((inhibit-read-only t)) (add-text-properties (point-min) (point-max) (list ... lprops)))) (org-agenda-run-series (nth 1 entry) (cdr (cdr entry))))) ((equal org-keys "C") (setq org-agenda-custom-commands org-agenda-custom-commands-orig) (customize-variable 'org-agenda-custom-commands)) ((equal org-keys "a") (call-interactively 'org-agenda-list)) ((equal org-keys "s") (call-interactively 'org-search-view)) ((equal org-keys "S") (org-call-with-arg 'org-search-view (or arg '(4)))) ((equal org-keys "t") (call-interactively 'org-todo-list)) ((equal org-keys "T") (org-call-with-arg 'org-todo-list (or arg '(4)))) ((equal org-keys "m") (call-interactively 'org-tags-view)) ((equal org-keys "M") (org-call-with-arg 'org-tags-view (or arg '(4)))) ((equal org-keys "e") (call-interactively 'org-store-agenda-views)) ((equal org-keys "?") (org-tags-view nil "+FLAGGED") (add-hook 'post-command-hook #'(lambda nil (if (current-message) nil (let* ... ...))) t t)) ((equal org-keys "#") (call-interactively 'org-agenda-list-stuck-projects)) ((equal org-keys "/") (call-interactively 'org-occur-in-agenda-files)) ((equal org-keys "!") (customize-variable 'org-stuck-projects)) (t (user-error "Invalid agenda key"))))
  (catch 'exit (let* ((org-keys keys) (prefix-descriptions nil) (org-agenda-buffer-name org-agenda-buffer-name) (org-agenda-window-setup (if (equal (buffer-name) org-agenda-buffer-name) 'current-window org-agenda-window-setup)) (org-agenda-custom-commands-orig org-agenda-custom-commands) (org-agenda-custom-commands (delq nil (mapcar #'(lambda ... ...) org-agenda-custom-commands))) (org-agenda-custom-commands (org-contextualize-keys org-agenda-custom-commands org-agenda-custom-commands-contexts)) (bfn (buffer-file-name (buffer-base-buffer))) entry type org-match lprops ans) (if org-agenda-overriding-restriction nil (if org-agenda-keep-restricted-file-list nil (put 'org-agenda-files 'org-restrict nil)) (setq org-agenda-restrict nil) (move-marker org-agenda-restrict-begin nil) (move-marker org-agenda-restrict-end nil)) (if org-keys nil (progn (setq ans (org-agenda-get-restriction-and-command prefix-descriptions)) (setq org-keys (car ans)) (setq restriction (cdr ans)))) (if org-agenda-sticky (progn (setq org-agenda-buffer-name (format "*Org Agenda(%s)*" org-keys)))) (if (and (not org-agenda-overriding-restriction) restriction) (progn (put 'org-agenda-files 'org-restrict (list bfn)) (cond ((eq restriction 'region) (setq org-agenda-restrict (current-buffer)) (move-marker org-agenda-restrict-begin (region-beginning)) (move-marker org-agenda-restrict-end (region-end))) ((eq restriction 'subtree) (save-excursion (setq org-agenda-restrict ...) (org-back-to-heading t) (move-marker org-agenda-restrict-begin ...) (move-marker org-agenda-restrict-end ...))) ((eq restriction 'buffer) (if (not ...) (setq org-agenda-restrict t) (setq org-agenda-restrict ...) (move-marker org-agenda-restrict-begin ...) (move-marker org-agenda-restrict-end ...)))))) (cond ((setq entry (assoc org-keys org-agenda-custom-commands)) (if (or (symbolp (nth 2 entry)) (functionp (nth 2 entry))) (progn (progn (setq type ...) (setq org-match ...) (setq lprops ...)) (if org-agenda-sticky (progn ...)) (progn (let* ... ... ...)) (let (...) (add-text-properties ... ... ...))) (org-agenda-run-series (nth 1 entry) (cdr (cdr entry))))) ((equal org-keys "C") (setq org-agenda-custom-commands org-agenda-custom-commands-orig) (customize-variable 'org-agenda-custom-commands)) ((equal org-keys "a") (call-interactively 'org-agenda-list)) ((equal org-keys "s") (call-interactively 'org-search-view)) ((equal org-keys "S") (org-call-with-arg 'org-search-view (or arg '(4)))) ((equal org-keys "t") (call-interactively 'org-todo-list)) ((equal org-keys "T") (org-call-with-arg 'org-todo-list (or arg '(4)))) ((equal org-keys "m") (call-interactively 'org-tags-view)) ((equal org-keys "M") (org-call-with-arg 'org-tags-view (or arg '(4)))) ((equal org-keys "e") (call-interactively 'org-store-agenda-views)) ((equal org-keys "?") (org-tags-view nil "+FLAGGED") (add-hook 'post-command-hook #'(lambda nil (if ... nil ...)) t t)) ((equal org-keys "#") (call-interactively 'org-agenda-list-stuck-projects)) ((equal org-keys "/") (call-interactively 'org-occur-in-agenda-files)) ((equal org-keys "!") (customize-variable 'org-stuck-projects)) (t (user-error "Invalid agenda key")))))
  org-agenda(nil)
  funcall-interactively(org-agenda nil)
  call-interactively(org-agenda nil nil)
  command-execute(org-agenda)
@alphapapa
Copy link
Owner

alphapapa commented Sep 11, 2023

Hello,

I don't understand. Please start from the beginning and explain the problem in context. As well, please provide a minimal reproducible example. And, of course, include the versions of all relevant software. You know, all the standard bug-report info.

@Thaodan Thaodan changed the title cannot be used in non-Org buffer #<buffer *Org Agenda*> (org-agenda-mode) ‘org-element-at-point' cannot be used in non-Org buffer with habbit selector in certain cases Sep 11, 2023
@alphapapa
Copy link
Owner

See also: alphapapa/org-ql#364

@alphapapa alphapapa changed the title ‘org-element-at-point' cannot be used in non-Org buffer with habbit selector in certain cases Org 9.7 org-element API changes break habit selector Sep 24, 2023
@alphapapa alphapapa self-assigned this Sep 24, 2023
@alphapapa alphapapa added this to the 1.3.1 milestone Sep 24, 2023
@k11m1
Copy link

k11m1 commented Sep 25, 2023

I think i have the same issue, at least removing habit fixes it:

Config in org-agenda-custom-commands:

        ("t" "test"
         ((agenda "" ((org-agenda-span 'day)
                      (org-super-agenda-groups
                        '((:name "Timeline"
                           :time-grid t)
                          (:habit t)
                          )
                       )))))

Shows without debug:

if: ‘org-element-at-point’ cannot be used in non-Org buffer #<buffer *Org Agenda(t)*> (org-agenda-mode)

Trace: https://gist.github.com/k11m1/fa6d819d247ef9e8b69d31bf0e659f2a

Removing (:habit t) makes the error go away.

I am using Latest doom emacs (as of 2023-09-25), on Arch Linux.

  • GNU Emacs 29.1
  • Org 9.7
  • I am on: 4efc0bd * master origin/master replaced Meta: Update .gitignore

@alphapapa
Copy link
Owner

@k11m1 Thanks. Until this is fixed, you'll have to either not use the habit selector, or use Org 9.6.

@k11m1
Copy link

k11m1 commented Sep 26, 2023

@alphapapa No problem. I am not using the habit selector actively so disabling it for me fixed all the problems.

@Thaodan
Copy link
Author

Thaodan commented Sep 26, 2023 via email

@alphapapa
Copy link
Owner

Adam Porter @.***> writes:
@k11m1 Thanks. Until this is fixed, you'll have to either not use the habit selector, or use Org 9.6.
Another option is to comment out the check in org-element.el that causes the issue.

Sure, just be sure to recompile that file afterward, otherwise you'll get reduced performance from its being interpreted.

@real-or-random
Copy link

real-or-random commented Nov 28, 2023

The root cause is emacs-straight/org-mode@f135954.

Determining whether something is a habit will involve a call to org-element-at-point, which now errors when not in org-mode. This is normally not a problem, as agenda items processed in their home buffer in org-mode. But there's (at least) one exception: Hourly lines/separators in the time grid (like 10:00 .....) aren't real org items, and they're "processed" in the org-agenda buffer in org-agenda-mode.

The simple fix is to evaluate whether an item is a habit only (when (derived-mode-p 'org-mode)). See https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=a1fa52197 for a similar fix inside org.

I had a similar issue with a org-agenda-prefix-format that makes a call to (org-get-category).

@alphapapa
Copy link
Owner

Please see https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=fac55324accbcab08dfebbde8295b2f1b4b9f45e, which demotes the error to a warning.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants