Skip to content

Latest commit

 

History

History
404 lines (325 loc) · 17.5 KB

File metadata and controls

404 lines (325 loc) · 17.5 KB

4.6.1 - 2026-03-03

Fixed

Duplicate clarification queue fixes (Issue #281)

Multiple fixes to the duplicate item workflow during clarification:

  • Queued duplicates now have the user-entered title in their content (previously kept the original heading)
  • Queue processing reuses the existing WIP buffer instead of killing and recreating it, preserving window layout (side windows, queue display)
  • Each queued duplicate gets a fresh human-readable org ID instead of reusing the original item’s ID
  • Canceling (org-gtd-clarify-stop) during queue processing now discards only the current item and moves to the next, instead of discarding all remaining items
  • WIP buffer prefix changed from “Org-GTD” to “Org GTD” for consistency with other buffer names

Flaky done-filter test

Fixed a test that used a hardcoded 09:00 timestamp, causing intermittent failures when tests ran before 9 AM.

4.6.0 - 2026-02-21

Added

Project cancel confirmation (Issue #283)

When org-gtd-mode is enabled and you change a project heading’s TODO state to CNCL (e.g. via C-c C-t), org-gtd now detects this and offers to cancel all incomplete child tasks automatically. A confirmation prompt lets you choose whether to cascade the cancellation.

This complements the existing org-gtd-project-cancel command by catching manual state changes that bypass the command.

Inactive project tasks filtered from active views (Issue #283)

Tasks belonging exclusively to cancelled or done projects no longer appear in active-task views (stuck single actions, stuck calendar/delegated/tickler/habit, engage views, etc.). This is automatic—no configuration needed.

  • Tasks with no project (ORG_GTD_PROJECT_IDS absent) are unaffected
  • Multi-project tasks: only hidden when all projects are inactive
  • Unresolvable project IDs: task stays visible (fail-open)

Done and cancelled project headings are also excluded from stuck-project and active-project views. The completed-project view is unaffected.

Fixed

Flaky tests from default-directory leak

Test ordering could cause intermittent failures when default-directory was left pointing to ​/mock:/gtd/ after a test’s mock filesystem was torn down. Fixed by resetting default-directory to the project root at the start of each test.

4.5.1 - 2026-02-11

Fixed

org-gtd-someday now handles projects and project tasks

Previously, org-gtd-someday only handled single items. It now uses smart dispatch like org-gtd-tickler:

  • On a project heading (ORG_GTD: Projects): puts the entire project on someday/maybe
  • On a project task (has ORG_GTD_PROJECT_IDS): prompts for which project to put on someday
  • On a single item: uses existing someday/maybe logic

State is preserved just like tickler projects—~PREVIOUS_ORG_GTD~, PREVIOUS_TODO, and type-specific properties are all saved for later reactivation via org-gtd-reactivate.

Multi-project tasks use “last active project” logic

For both org-gtd-tickler and org-gtd-someday: when incubating a project, tasks that belong to multiple projects are now only incubated if the current project is the last active one for that task. Previously, multi-project tasks were always skipped entirely.

An active project is one with ORG_GTD: Projects that is not done or cancelled. This means if Task A belongs to Project X (being ticklered) and Project Y (still active), Task A stays active. But if Project Y is also ticklered/someday/done, Task A gets incubated along with Project X.

Graph view: S keybinding for someday/maybe

The project graph view now has an S key to move the current project to someday/maybe, matching the existing I key for tickler/incubate.

4.5.0 - 2026-01-22

Added

Configurable mode-line lighter display (Issue #254)

Control when the GTD lighter appears in the mode-line with org-gtd-mode-lighter-display:

  • always (default): Always show (e.g., GTD[0], GTD[5])
  • never: Never show the lighter
  • when-non-zero: Only show when inbox has items (hides GTD[0])
;; Hide lighter when inbox is empty
(setq org-gtd-mode-lighter-display 'when-non-zero)

Multi-item capture timestamps (Issue #99)

When capturing multiple inbox items in one session (by adding multiple level-1 headings in the capture buffer), each heading now gets its own ORG_GTD_CAPTURED_AT timestamp. All items in the same capture session share the same timestamp.

Unified set-timestamp command (Issue #187)

org-gtd-set-timestamp now works from both org-mode headings and org-agenda items. Use it to reschedule Calendar, Delegated, or Tickler items. The agenda transient (s key) uses this same command.

Customizable truncation ellipsis (Issue #200)

org-gtd-agenda-truncate-ellipsis controls the string used when truncating long text in agenda prefixes. Users with fonts where “…” doesn’t display as one character width can now customize this (e.g., "..." or "⣀").

4.4.0 - 2026-01-20

Added

Duplicate items during clarification (Issue #275)

When clarifying an inbox item, you can now create duplicates to handle items that represent multiple outcomes.

  • Press C-c d to duplicate with rename prompt (enter a new title)
  • Press C-c D to duplicate exactly as-is
  • Duplicates are queued and processed immediately after the current item
  • Queue displays in a side window showing pending duplicates
  • When canceling with pending duplicates, choose to discard or save to inbox
  • Before exiting Emacs, prompts if any clarify buffers have pending duplicates
  • Customize queue window position with org-gtd-clarify-duplicate-queue-position

Safe clarify buffer management with kill-buffer hooks

Clarify buffers now have proper protection against accidental data loss:

  • Closing a clarify buffer with pending duplicates prompts to confirm
  • The duplicate queue side window auto-closes when the last clarify buffer is killed
  • WIP temp files are cleaned up properly when buffers are killed directly
  • Multiple clarify buffers can exist simultaneously without interference

4.3.1 - 2026-01-17

Fixed

Project graph now colors nodes by TODO state instead of priority

Previously, graph nodes were colored by priority (A/B/C), not by TODO state (NEXT/TODO). This made the graph confusing since colors didn’t indicate which tasks were actionable. Nodes now correctly show NEXT tasks in blue and TODO tasks in orange.

Graph colors updated to be color-blind accessible

Graph node colors now use the Okabe-Ito palette, which is designed to be distinguishable by people with color vision deficiency. The blue/orange contrast for NEXT/TODO is safe for all common forms of color blindness.

Changed

Documentation updated for graph colors and layout

  • Node colors: Blue = NEXT (actionable), Orange = TODO (blocked)
  • Project heading appears at bottom of graph (represents end state after all tasks complete)
  • Tasks flow from top (first) to bottom (last)

4.3.0 - 2026-01-12

Changed

Auto-refile now only uses targets in org-gtd-tasks.org

Auto-refile now only uses targets in org-gtd-tasks.org, ignoring user’s org-refile-targets and other org-agenda-files. This fixes issues where items would be refiled to unexpected locations. (GitHub issues #259, #266)

Added

ORG_GTD_REFILE property now supports multiple space-separated values

A heading with property value Actions Projects (e.g., :ORG_GTD_REFILE: Actions Projects) will be a valid target for both single actions and projects.

4.2.3 - 2026-01-10

Fixed

WIP buffer cleanup with symlinked temp directories (Fix #271)

When find-file-visit-truename is t and the temp directory is accessed through a symlink (e.g., macOS where /tmp -> /private/tmp), clarify buffers were not being killed after organizing items. The fix uses find-buffer-visiting instead of get-file-buffer to properly handle symlink path resolution.

4.2.2 - 2026-01-09

Fixed

Inbox file excluded from refile targets

The inbox file is now always excluded from refile targets, even if it accidentally contains headings with ORG_GTD_REFILE properties. This prevents items from being refiled back to inbox during processing and resolves issues where users saw inbox.org headings in their refile target list.

4.2.1 - 2026-01-08

Fixed

Calendar timestamps now preserve time ranges

When entering a calendar item with a time range like 11:00-12:00, the duration is now correctly preserved in the ORG_GTD_TIMESTAMP property. Previously the end time was being lost. Now uses org-mode’s org-end-time-was-given variable to properly capture time ranges, matching how org-timestamp (C-c .) works.

4.2.0 - 2026-01-08

Added

Show project graph from task headings and agenda items

org-gtd-show-project-graph now works in more contexts:

  • On task headings: shows the graph for the project the task belongs to
  • On tasks in multiple projects: prompts to select which project
  • From org-agenda: shows the graph for the task at point
  • Shows helpful messages when task is not in a project or heading is not a GTD item

Changed

Graph modules are now lazy-loaded

The graph visualization modules (org-gtd-graph-mode, org-gtd-dag-draw, etc.) are no longer loaded when org-gtd initializes. They load on first use of org-gtd-show-project-graph or related commands, reducing startup time by ~17ms.

4.1.0 - 2026-01-06

Added

Click-to-select in project graph view

You can now click on nodes in the project graph view (both ASCII and SVG modes) to select them. This updates the details panel to show the clicked node’s information. Handles Emacs image-scaling-factor automatically.

4.0.7 - 2026-01-05

Fixed

Area-of-focus prefix now looks up project’s CATEGORY

When using (prefix . (area-of-focus)) in the view DSL, project tasks without an explicit CATEGORY property now correctly display the project heading’s CATEGORY instead of the file-name based default. The resolver now traverses to the project via ORG_GTD_PROJECT_IDS when no explicit CATEGORY is set.

4.0.6 - 2026-01-05

Fixed

WIP buffer headings excluded from refile targets

When users had (nil :maxlevel . N) in their org-refile-targets configuration (meaning “current buffer”), the WIP clarify buffer would be offered as a refile target. This caused “Cannot refile to position inside the tree or region” errors because org-refile cannot refile a heading to itself. The refile verify function now excludes files in the WIP temp directory.

4.0.5 - 2026-01-04

Fixed

Removed redundant inactive timestamp from capture templates

The default capture templates included %U which added an inactive timestamp to the body of captured items. This was redundant since the capture timestamp is already stored in the ORG_GTD_CAPTURED_AT property. The templates now only include the property.

4.0.4 - 2026-01-04

Fixed

Agenda property display now extracts link descriptions

Properties containing org links (e.g., EBDB links like [[ebdb:uuid][John Doe]]) now display just the link description (“John Doe”) instead of the raw link syntax. This improves readability when using linked contacts for DELEGATED_TO or similar properties.

4.0.3 - 2026-01-04

Fixed

Graph view selects nearby node after task removal

When removing a task from a project graph (`t r`), the selected node now updates to a nearby task (predecessor, successor, or project) instead of leaving a stale reference to the removed task.

4.0.2 - 2026-01-04

Fixed

Graph transient edge selection now uses proper transient architecture

The graph transients (add/modify blockers/successors) now use a custom EIEIO prefix class to store edge selection state on the transient object itself, rather than using a global variable. This fixes edge selection state being lost when switching between transient buffers.

4.0.1 - 2026-01-04

Fixed

v3→v4 upgrade now sets ORG_GTD_PROJECT on project tasks

The upgrade path was missing the ORG_GTD_PROJECT property (project name cache) on project tasks. This property is used for display purposes in agenda views. New projects created in v4 had this property, but migrated v3 projects did not.

4.0.0 - 2026-01-03

BREAKING CHANGES

You must configure org-agenda-files

org-gtd no longer manages org-agenda-files for you. Add your GTD directory to your config:

(setq org-agenda-files (list org-gtd-directory))

Without this, your GTD items will not appear in agenda views.

Minimum Emacs version now 28.1

org-gtd now requires Emacs 28.1 or higher due to transient.el dependency updating its minimum requirement.

Users on Emacs 27.2 must remain on org-gtd 3.x.

To check your Emacs version: M-x emacs-version

Changed

Clarify mode is now a major mode

org-gtd-clarify-mode is now a major mode derived from org-mode (was a minor mode). The internal org-gtd-wip-mode has been removed. This is an internal refactoring - user-facing behavior is unchanged.

The keymap has been renamed from org-gtd-clarify-map to org-gtd-clarify-mode-map (following Emacs naming conventions). The old name still works but is obsolete:

;; Old (still works, but deprecated):
(define-key org-gtd-clarify-map (kbd "C-c c") 'org-gtd-organize)

;; New (recommended):
(define-key org-gtd-clarify-mode-map (kbd "C-c c") 'org-gtd-organize)

Removed

  • Emacs 27.2 compatibility code and declarations
  • Workarounds for pre-28.1 behavior
  • Ancient Emacs 25.0 version checks

Improved

  • Performance: Using 28.1’s faster string-search for literal matching
  • Code quality: Lexical binding throughout for native compilation support
  • Documentation: Enhanced command docstrings for better discoverability
  • Testing: CI now validates on Emacs 28.2, 29.1, and 30.1

Added

  • Native compilation support (10-20% performance improvement on large datasets)
  • Performance documentation in README

Technical

  • Replaced string-match + regexp-quote with string-search where applicable
  • Removed all (declare (modes …)) compatibility declarations
  • CI matrix updated to test on 28.2, 29.1, 30.1

3.1.0 (unstable)

New variable to configure agenda prefix width in engage view

Fix edge case of processing empty heading ( #169 )

Better messages in minibuffer

  • use with-temp-message to hide things we don’t care about.

Adding task to a project works ( #160 )

  • Now uses org-refile like it was meant to be used
  • Now works for projects outside org-gtd-directory.

3.0.0

Functions exist to create your own hooks

Make GTD truly a part of your emacs experience.

Minimum emacs version now 27.2

I can’t find 27.1 anywhere.

Support habits

org mode’s habits now have a place here

Organize menu has changed

  • Habits have their place
  • What used to be called “archive” is now called “knowledge”
  • Modify project is now “Add to project”

Massive API changes

  • The package domain now is a better match for the domain language of GTD.

Massive Data structure changes

  • SCHEDULED and DEADLINE are intended to be used for things that have to start and things that have to end, respectively. V2 abused them, v3 is more respectful of how org-mode wants to work.

Include horizons

  • They can be displayed while clarifying.
  • There’s an optional organize-hook for areas of focus
  • There’s an agenda view for areas of focus

You can create your own project templates and insert them while clarifying

2.0.0

Complete overhaul of inbox processing

We now respect that emacs is a GUI and that the user must have complete control at all times. The flow also provides control to the user PRIOR to the user choosing the way to categorize this item.

Create an actual info file usable within emacs

state CANCELED rename to CNCL

Fits the four-letter pattern better. You’ll need to do a search-and-replace in the files managed by org-gtd, replacing “CANCELED” by “CNCL”.

Better refile target discovery and dupport for many refile targets

The code now looks for top-level headings with a property called ORG_GTD with possible values: Action, Incubated, Projects, Scheduled, Delegated.

1.1.1

[2021-10-06 Wed]

Bugfix in project canceling

The system would effectively skip over headings. Had to disable org-edna-mode while Ι am changing the states to CANCELED.

1.1.0

[2021-10-03 Sun]

README

There’s a new public function, (org-gtd-inbox-path), you should use this in your configuration instead of (org-gtd--path org-gtd-inbox-file-basename).

canceling projects

  • projects can be canceled by calling (org-gtd-cancel-project) on the top headline of the project
  • projects can be canceled by calling (org-gtd-agenda-cancel-project) when the point is on the next task of the project on the agenda view.

archiving projects

(org-gtd-archive-complete-projects) now archives both completed and canceled projects.

1.0.4

[2021-09-19 Sun]

Massive readme revamp

the readme was a cluttered mess, I’ve broken it down into a lot of subsections. I hope it will be easier to manage now.

org-gtd-process-item-hooks

Based on an idea in https://github.com/Trevoke/org-gtd.el/discussions/54

There’s now an available variable that you can use to extend and customize the behavior of item processing. If you come up with cool ideas, share them!

1.0.3

I dunno why this tag existed but we’re skipping this I guess.

1.0.2

[2020-08-20 Thu]

Fix inability to refile to incubate

While processing the inbox, it was impossible to refile to the incubate file properly. This release fixes that bug.

To note: If you haven’t yet, make sure you go to the incubate file and set up some categories for yourself, e.g. `* To Read`, `* To Eat`, etc. org-gtd currently handles up to two headline levels, so you could do `* To Read` and `** Horror` if you wanted