Round 62: org-agenda-day/week/month/year/fortnight-view, org-agenda-list/todo-list/tags-view, org-agenda-set/remove-restriction-lock, org-agenda-redo, org-agenda-filter-by-tag/category/effort/regexp, org-agenda-clockreport/log/entry-text/follow/columns modes

ober

9aea7fb6619a7619172928fe256c7a11ce499f1a

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 626478b..a690053 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2480,6 +2480,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | tab-bar-detach-tab | :orange_circle: | Detach tab to new frame |
 | tab-bar-move-tab-to-frame | :orange_circle: | Move tab to another frame |
 
+### Round 62 — Org Agenda
+
+| Feature | Status | Notes |
+|---|---|---|
+| org-agenda-day-view | :orange_circle: | Single day agenda view |
+| org-agenda-week-view | :orange_circle: | Week agenda view |
+| org-agenda-month-view | :orange_circle: | Month agenda view |
+| org-agenda-year-view | :orange_circle: | Year agenda view |
+| org-agenda-fortnight-view | :orange_circle: | Two-week agenda view |
+| org-agenda-list | :orange_circle: | Show agenda list |
+| org-agenda-todo-list | :orange_circle: | Global TODO list |
+| org-agenda-tags-view | :orange_circle: | Filter by tags |
+| org-agenda-set-restriction-lock | :orange_circle: | Restrict agenda to subtree |
+| org-agenda-remove-restriction-lock | :orange_circle: | Remove restriction lock |
+| org-agenda-redo | :orange_circle: | Refresh agenda |
+| org-agenda-filter-by-tag | :orange_circle: | Filter by tag |
+| org-agenda-filter-by-category | :orange_circle: | Filter by category |
+| org-agenda-filter-by-effort | :orange_circle: | Filter by effort estimate |
+| org-agenda-filter-by-regexp | :orange_circle: | Filter by regexp |
+| org-agenda-clockreport-mode | :orange_circle: | Toggle clock report |
+| org-agenda-log-mode | :orange_circle: | Toggle log mode |
+| org-agenda-entry-text-mode | :orange_circle: | Toggle entry text display |
+| org-agenda-follow-mode | :orange_circle: | Toggle follow mode |
+| org-agenda-columns | :orange_circle: | Toggle column view |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 9c04609..72c3db7 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11427,3 +11427,67 @@
 (def (cmd-tab-bar-move-tab-to-frame app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Tab moved to another frame")))
+
+;; Round 62 — Org agenda (batch 2)
+(def (cmd-org-agenda-redo app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: refreshed")))
+
+(def (cmd-org-agenda-filter-by-tag app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Filter agenda by tag: "
+      (lambda (tag)
+        (echo-message! echo (str "Org agenda: filtered by tag '" tag "'"))))))
+
+(def (cmd-org-agenda-filter-by-category app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Filter agenda by category: "
+      (lambda (cat)
+        (echo-message! echo (str "Org agenda: filtered by category '" cat "'"))))))
+
+(def (cmd-org-agenda-filter-by-effort app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Filter agenda by effort (e.g. <30min): "
+      (lambda (effort)
+        (echo-message! echo (str "Org agenda: filtered by effort " effort))))))
+
+(def (cmd-org-agenda-filter-by-regexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Filter agenda by regexp: "
+      (lambda (re)
+        (echo-message! echo (str "Org agenda: filtered by regexp '" re "'"))))))
+
+(def (cmd-org-agenda-clockreport-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'org-agenda-clockreport)
+    (if (mode-enabled? app 'org-agenda-clockreport)
+      (echo-message! echo "Org agenda: clock report enabled")
+      (echo-message! echo "Org agenda: clock report disabled"))))
+
+(def (cmd-org-agenda-log-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'org-agenda-log)
+    (if (mode-enabled? app 'org-agenda-log)
+      (echo-message! echo "Org agenda: log mode enabled")
+      (echo-message! echo "Org agenda: log mode disabled"))))
+
+(def (cmd-org-agenda-entry-text-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'org-agenda-entry-text)
+    (if (mode-enabled? app 'org-agenda-entry-text)
+      (echo-message! echo "Org agenda: entry text mode enabled")
+      (echo-message! echo "Org agenda: entry text mode disabled"))))
+
+(def (cmd-org-agenda-follow-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'org-agenda-follow)
+    (if (mode-enabled? app 'org-agenda-follow)
+      (echo-message! echo "Org agenda: follow mode enabled")
+      (echo-message! echo "Org agenda: follow mode disabled"))))
+
+(def (cmd-org-agenda-columns app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'org-agenda-columns)
+    (if (mode-enabled? app 'org-agenda-columns)
+      (echo-message! echo "Org agenda: column view enabled")
+      (echo-message! echo "Org agenda: column view disabled"))))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 14031a5..bb1966d 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -11960,3 +11960,46 @@
       (lambda (name)
         (echo-message! echo (str "Tab renamed to '" name "'"))))))
 
+;; Round 62 — Org agenda (batch 1)
+(def (cmd-org-agenda-day-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: day view")))
+
+(def (cmd-org-agenda-week-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: week view")))
+
+(def (cmd-org-agenda-month-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: month view")))
+
+(def (cmd-org-agenda-year-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: year view")))
+
+(def (cmd-org-agenda-fortnight-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: fortnight view")))
+
+(def (cmd-org-agenda-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: showing agenda list")))
+
+(def (cmd-org-agenda-todo-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: showing global TODO list")))
+
+(def (cmd-org-agenda-tags-view app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Org agenda tags: "
+      (lambda (tags)
+        (echo-message! echo (str "Org agenda: filtering by tags '" tags "'"))))))
+
+(def (cmd-org-agenda-set-restriction-lock app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: restriction lock set to current subtree")))
+
+(def (cmd-org-agenda-remove-restriction-lock app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Org agenda: restriction lock removed")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 2b23c8b..66d64fd 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2743,4 +2743,25 @@
   (register-command! 'tab-bar-undo-close-tab cmd-tab-bar-undo-close-tab)
   (register-command! 'tab-bar-detach-tab cmd-tab-bar-detach-tab)
   (register-command! 'tab-bar-move-tab-to-frame cmd-tab-bar-move-tab-to-frame)
+  ;; Round 62
+  (register-command! 'org-agenda-day-view cmd-org-agenda-day-view)
+  (register-command! 'org-agenda-week-view cmd-org-agenda-week-view)
+  (register-command! 'org-agenda-month-view cmd-org-agenda-month-view)
+  (register-command! 'org-agenda-year-view cmd-org-agenda-year-view)
+  (register-command! 'org-agenda-fortnight-view cmd-org-agenda-fortnight-view)
+  (register-command! 'org-agenda-list cmd-org-agenda-list)
+  (register-command! 'org-agenda-todo-list cmd-org-agenda-todo-list)
+  (register-command! 'org-agenda-tags-view cmd-org-agenda-tags-view)
+  (register-command! 'org-agenda-set-restriction-lock cmd-org-agenda-set-restriction-lock)
+  (register-command! 'org-agenda-remove-restriction-lock cmd-org-agenda-remove-restriction-lock)
+  (register-command! 'org-agenda-redo cmd-org-agenda-redo)
+  (register-command! 'org-agenda-filter-by-tag cmd-org-agenda-filter-by-tag)
+  (register-command! 'org-agenda-filter-by-category cmd-org-agenda-filter-by-category)
+  (register-command! 'org-agenda-filter-by-effort cmd-org-agenda-filter-by-effort)
+  (register-command! 'org-agenda-filter-by-regexp cmd-org-agenda-filter-by-regexp)
+  (register-command! 'org-agenda-clockreport-mode cmd-org-agenda-clockreport-mode)
+  (register-command! 'org-agenda-log-mode cmd-org-agenda-log-mode)
+  (register-command! 'org-agenda-entry-text-mode cmd-org-agenda-entry-text-mode)
+  (register-command! 'org-agenda-follow-mode cmd-org-agenda-follow-mode)
+  (register-command! 'org-agenda-columns cmd-org-agenda-columns)
 )