# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [2.13.0] - 2024-12-25

### Added
- listpri action allows concatenation of multiple priorities [-ranges]
- replace action completely merges any combination of priority / date with existing ([#386])
- Check for broken symlinks to custom actions and complain ([#359])

### Changed

- Add .sh extension to completion script
- Reuse the todo.sh alias for completion
- Return from user prompt without requiring Enter ([#354])
- Default to user writable directory in config ([#148])

### Fixed
- Fix problem with spaces in directory path ([#276])
- pri action takes multiple items + priorities on single run ([#346])

## [2.12.0] - 2020-08-11

### Added

- Added default priority variable `TODOTXT_PRIORITY_ON_ADD` ([#246])
- Added `done` option as alias of `do` ([#169])
- Added macOS 10.15.x support ([#300])
- Highlighting of dates, metadata and item numbers ([#264])
- Minimal config file / default filenames (todo.txt, done.txt, report.txt) ([#289])
- Enable file completion for add-on actions via `_todo_file{1,2,3}_actions` ([#270])
- Allow to customize what can be before / inside / after `+project` and `@context` ([#271])

### Changed

- Read the task's name and uses as default ([#249])
- Updated interpreter reference to use environment variable ([#160])
- Allow setting of bash completion path ([#301])

### Fixes

- Fixed no end-of-line bug. Supports todos with no end-of-line. ([#295])

## [2.11.0] - 2018-03-26

### Added

- Added support for `$XDG_CONFIG_HOME` config file/actions location
- Created [CODE_OF_CONDUCT.md](.github/CODE_OF_CONDUCT.md) ([#217])
- Created [CHANGELOG.md](/CHANGELOG.md) ([#218])

### Changed

- Updated `add` command to accept lowercase priority ([#230])
- Clean tests and version file in Makefile. Don't ignore errors in tests.
- Updated [README.md](/README.md) ([#219])
- Update Downloads links to point at the Releases page ([#228])
- Set the executable bit when preparing releases ([#156])

### Fixes

- Update links to use https
- Suppress todo.sh error messages when invoked during completion ([#8])

## [2.10.0] - 2013-12-06

### Added

- Enable term filtering for listcon.
- Add make install command.
- Enable use of global config file in `/etc/todo/config`. `make install` installs a global config file.
- Allow use of `post_filter_command` for `listall` and `listpri`.
- Print usage help for custom action and all passed actions.
- Allow configuring null data files (done.txt and report.txt) and don't create
  them.
- Color contexts and projects without an add-on, just by setting vars in the
  config file.
- Place add-ons in subfolders (for easier git clone).

### Changed

- Improve code commenting/documentation.
- Refactor code for speed/better organization.
- Improve test coverage and test library.

### Removed

- Removed add date from line completion, ie, `todo.sh ls 10[tab]`.

### Fixed

- Properly replace date when replacing task with priority and date.
- Handle `-h`, `shorthelp`, and `help` when a Fatal Error happens.
- Fix `todo_completion` problem with Bash 3.1.

## [2.9.0] - 2012-04-08

### Added

- Added tab auto-completion of projects and contexts from `todo.txt` and `done.txt`. Type `@<Tab>` or `+<Tab>` while entering a task.
- Added new listaddons command displays installed addons.
- List priorities within a range using listpri. For example, to see tasks prioritized A-B, use `todo.sh listpri A-B`

### Fixed

- Fixed various cosmetic issues, bugs, and added developer test library enhancements.

## [2.8.0] - 2011-09-13

### Added

- `listpri`/`lsp` now filters by term. For example, `todo.sh lsp A book` will only return tasks prioritized `A` with the word book in them.
- Added support for todo directory paths with spaces in them.
- Tasks with priority included and auto prepend date on (`-t`) get the date where expected.
- Smarter action completion messaging: `do`, `pri`, and `depri` all let you know if a task is already done, prioritized, or deprioritized.
- Made more parameters available to offer more control to custom actions (`-c`, `-A`, `-N`, `-T`)

### Changed

- Improved portability for Dropbox or USB key users. If not specified, todo.sh checks for a config file in its own directory; default todo.txt location is todo.sh's directory.
- Improved script performance thanks to optimized code
- Exposed `cleaninput()` for use in addons
- Improved testing framework:
  - Better escaped input handling
  - Abstracted make_action function to test custom action behavior
  - Added tests for source code compliance
  - Cleaner, simpler, modernized, optimized code

### Fixed

- Custom action output no longer prefaced by `TODO:` so it's easier to see when the core script vs. addon is performing an action
- `listpri` complains if specified priority is invalid
- Don't abort task listing when items contain certain escape sequences (`\c \033`)
- Condense whitespace ONLY whe task is quoted; automatically convert CRLF to space
- Don't delete `|` (pipe) from task input
- `-+` and `-@` no longer break task coloring if context or project appears at the end of the line

## [2.7.0] - 2010-08-03

### Added

- Added generalization of the _PRI_X_ color support to all priorities
- Added highlighting of done, but not yet archived tasks via _COLOR_DONE_
- Color map (BLACK, ...) now supports spaces in the color definitions, making it possible to override the default ANSI escape codes with e.g. Conky tags (`${color black}`)

### Changed

- Cleanup: help messages, consistent output messages
- Exporting `die()` function for use in custom commands
- `prepend` and `replace` actions keep prepended date, `append` considers sentence delimiters
- Tests: several regression tests added

## [2.6.0] - 2010-05-11

### Added

- Added a case for the fixed replace command.

### Changed

- Changed odd tabs to spaces.
- Faster help/usage document outputs.
- Consolidated `TODOTXT_VERBOSE` tests.
- Refactored various add functionality to one function.
- Updated `_list()` output to match updated `addto`.

### Fixed

- Quoting regexp to parse properly.
- Fixed erroneous hide/show comments.
- Correctly fixed regexp quoting issue for bash v3.1.x and v3.2.x.
- Old versions of bash do not have `=~`
- Fix line endings.
- Fixed bug for replace command.

## [2.5.0] - 2010-05-05

### Added

- Support use of `$HOME/.todo/` for all todo.sh configuration
- Added new multiple do capability to help message
- Added option to disable final filter
- Added a new variable `$TODO_FULL_SH`
- Added new action `addm`
- Added support PAGER pipe for help output
- Added some additional mappings, plus a project context

### Changed

- Added 'silent' to a bunch of calls

### Fixed

- Fixing prepend and priority issue.
- Replace with `priority` set
- Multiple `do` items
- `prepend` not correct on prioritized tasks
- Invalid date range. Changed regex `[ -~]` to `[ ~-]`.
- `do`: no safeguard to `do` twice. Tests item is not marked done before attempting to mark item as "done".
- Fixed `add` does not escape line breaks
- `append` and `replace` unexpected behavior if there's an `&` in task (even in quotes)
- Tasks whose `ID` begins with `0` ought to be ignored.
- Fixed auto-complete function name for contexts

## [2.4.0] - 2009-05-11

### Added

- Added support for `TODOTXT_FINAL_FILTER` to provide a final custom list filter.
- Added support for custom sorting (can set in `todo.cfg`)
- Added parameterize for `.todo.actions.d` directory

### Removed

- Removed annoying trailing space on `pri` tasks
- Don't set colors in default `todo.cfg`.
- Don't set sort command in default `todo.cfg`.

### Fixed

- `listcon` and `listproj` now work correctly on Mac OS X 10.5
- `pri` accepted priorities of more than a single letter
- Support commands combination for `TODOTXT_SORT_COMMAND`; e.g. piped commands can be used: `export TODOTXT_SORT_COMMAND=" env LC_COLLATE=C sort -f -k2 - | grep -m 10 ."`
- Replace now echoes old item AND new item, like it used to.
- `depri` no longer wipes out tasks with more than just the priority in parentheses
- Now throws an error if you try to prioritize with more than one letter, ie, `todo.sh pri AA` doesn't work any more.

## [2.3.0] - 2009-04-02

### Added

- Added hide priority, context, and projects options now enabled `-P`, `-@` and `-+`
- Enabled recursive call of todo.sh from add-ons
- Exported variables for use in add-ons
- Added `-vv` option for debugging output
- Added short usage statement (that fits on one screen) with `-h`
- Added Makefile dist infrastructure for versioned releases in Downloads area on GitHub

### Changed

- Separated `_list` function for reuse by various versions of list command to reduce duplicate code
- Set `ls` as the default action

## [2.2.0] - 2009-03-??

### Fixed

- For awhile here during the GitHub transition, we stripped the version number from todo.sh and updated it kind of willy-nilly, so we're back-versioning all unversioned copies v 2.2.

## [2.1.0] - 2009-02-23

### Added

- Added "pluggability" with `~/.todo.actions.d/` support (via [Tammy and Ed](http://tech.groups.yahoo.com/group/todotxt/message/1739))
- Added `-t` param, off by default. When specified, it automatically prepends the current date to new todo's on add
- Searches for more Unix-y `~/.todo.cfg` if `~/todo.cfg` doesn't exist (via [Ed](http://tech.groups.yahoo.com/group/todotxt/message/1767))

### Fixed

- Corrected "ambiguous redirect" bug with done file (via [Jeff](http://tech.groups.yahoo.com/group/todotxt/message/1764))
- Corrected usage and help message with new params
- Corrected config file miscomment about colors

## [2.0.1] - 2009-02-17

### Fixed

- Restored `-d` parameter functionality broken in 2.0 (d'oh, thanks Jason, you made the changelog! )

## [2.0.0] - 2009-02-17

### Added

- Added `addto [DEST] "Text to add"` will append text to any file in the todo directory, like `ideas.txt` or `maybelater.txt`.
- Added `mv # [DEST]` will move a task from `todo.txt` to another file `[DEST]` in the todo directory, like if you decide your `"Learn French"` task should go into your `maybelater.txt` file.
- `depri #` removes priority from a task.
- `rm # [TERM]` or `del # [TERM]` will delete just the `[TERM]` from the task on line # in todo.txt.
- `listfile [SRC] [TERM]` or `lf [SRC] [TERM]` will list the contents of any text file in the todo directory, and filter by keyword `[TERM]`.
- `listcon` (`lsc`) and `listproj` (`lsprj`) lists contexts and projects, respectively, that appear in todo.txt. (Requires `gawk`)
- On task deletion, line number preservation is on by default (known issue, leaves blank lines). Optional, can be turned off with `-n` option.
- Auto-archive on task completion is now on by default; can be turned off with `-a` parameter.

### Changed

- Separated config file into a non hidden dot file.

### Fixed

- Better error handling throughout for all commands.
- Archive now defrags the file (removes blank lines; see line preservation option.)
- Using `/bin/bash` instead of `/bin/sh`

## [1.7.3] - 2006-07-29

### Added

- Added short action aliases – `add/a`, `list/ls`, `listpri/lsp`, `listall/lsa`, `prepend/prep`, `append/app`, `del/rm`

## [1.7.2] - 2006-07-28

### Added

- `listpri` automatically capitalizes lowercase priorities
- `listpri` now displays friendly error message, and the # of tasks returned in verbose mode

### Changed

- `do` action removes priority from task automatically
  Update:

### Fixed

- Actions are now case-insensitive (ie, `todo.sh Add` will work)

## [1.7.1] - 2006-07-21

### Changed

- I'm a big dummy and didn't keep track of what I fixed here. Sorry!

## [1.7.0] - 2006-07-19

### Added

- Interactive `add`, `append`, `prepend`, and `replace` (tx, Ben!)
- Action `listall` displays tasks from both todo.txt and done.txt
- Option `-f` forces delete action and disables interactive input (for todobot.pl)
- Option `-h` displays full help message.

### Deprecated

- Option `-q` deprecated; Use `-v` to turn on verbose mode

### Changed

- A very short version of usage message displays by default instead of the long version.
- Comment in info about `.todo` file being required

### Fixed

- No colors display for done tasks (tx, Tanja!)
- Sort is now case-insensitive (tx, Lonnie!)

## [1.6.3] - 2006-07-06

### Added

- Line numbers now padded, up to 100 characters. (tx, Tanja!)

## [1.6.2] - 2006-07-05

### Fixed

- Windows config files with spaces now work (tx Ron)

## [1.6.1] - 2006-07-05

### Changed

- The default location of your `.todo` file is now `$HOME/.todo`

### Fixed

- No colors mode (`-p`) now works as expected

## [1.6.0] - 2006-07-04

### Added

- Action `prepend` adds text to an item at the beginning of the line.
- Configuration file is now separated from script into `.todo` file
- Specify a config file other than `.todo` using the `-d` option
- Option `-q` quiets todo.sh's chattiness.
- Option `-V` shows version and license information.

### Changed

- The option to turn off colors is now `-p` (no longer `-nc` as in 1.5.2)

## [1.5.2] - 2006-06-26

### Fixed

- Items that start with `x ` (an x with a space after) are archived now to avoid lines that start with a word like `xander` from being archived. (tx, Tannie!)
- Report now only archives items that start with `x ` as well.

## [1.5.1] - 2006-06-26

### Fixed

- Items with an `x` in them at all were being deleted on archive with 1.5; all fixed now.

## [1.5.0] - 2006-06-24

### Added

- Option to turn off colors (to avoid characters in piped text files or IM bot), ie `todo.sh -nc [COMMAND]`
- A date is added to a completed todo, ie `x 2006-06-24` (tx SETH)
- Action `remdup` removes exact duplicate lines from todo.txt (tx Tannie)
- Action `del` removes any blank lines from todo.txt (tx Tannie)

### Changed

- Using `sed -i` instead of copying tmp file (tx Tannie)

### Fixed

- Colors show in OS/X 10.4 (tx SETH & misha)

## [1.4.0] - 2006-06-17

### Added

- Tasks are color-coded by priority in Cygwin (Thanks, Abraham, Manuel and Luis!)

### Changed

- Switched endless `if-then` to a `case` statement, and tightened up `wc -l` regex. (Thanks, Sash!)

### Fixed

- If you `replace`/`do`/`append` to a non-existent task, your todo.txt is no longer overwritten and the error is handled gracefully. (Thanks, Scott!)

## [1.3.0] - 2006-05-29

### Added

- Displays the number of newly added todo (Thanks, Amy!)
- Confirms whether or not you really want to delete a todo
- Displays success messages and confirmations on `append`, `replace`, `do`, etc.
- Added licensing information in comments. GPL, baby!

### Changed

- Alphabetized command workflow in if/then construction
- Tightened up `sed` commands, removed unnecessary `grep`s and `cat`s (Thanks, Sash!)
- Stripped whitespace around number lines from wc results

### Removed

- Removed filenames from `report.txt` format, for easier graphing or Excel imports.

### Fixed

- Todos are now sorted alphabetically when listed by a term. (ie: `todo list flowers)

## [1.2.0] - 2006-05-15

### Added

- `list` is case insensitive. ie, `todo list Mac` will match lines with "mac" and "Mac"

### Changed

- `todo list` matches multiple [TERM]s. ie, `todo list mac offline` will match all lines that contain the words "mac" and "offline"
- `repri` and `pri` actions combined into `pri` action (Thanks Mike!)
- Quotes no longer required with `add` and `replace` (Thanks Karl!)
- Any priority added to a todo must be uppercase to preserve sort order, enforced now. ie `todo pri 1 a` will return a usage error.

### Fixed

- File "sanity checks" and cleanup function, test script and various fantastic stylistic improvements added. Extra big thanks to Karl!

## [1.1.0] - 2006-05-12

### Added

- Supports file paths with spaces (ie `C:\Documents and Settings\gina\todo.txt`)

## 1.0.0 - 2006-05-11

### Added

- Consolidated into one master script with usage notes and released.

[Unreleased]: https://github.com/todotxt/todo.txt-cli/compare/v2.13.0...HEAD
[2.13.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.12.0...v2.13.0
[2.12.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.11.0...v2.12.0
[2.11.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.10.0...v2.11.0
[2.10.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.9.0...v2.10.0
[2.9.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.8.0...v2.9.0
[2.8.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.7.0...v2.8.0
[2.7.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.6.0...v2.7.0
[2.6.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.5.0...v2.6.0
[2.5.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.4.0...v2.5.0
[2.4.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.3.0...v2.4.0
[2.3.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.2.0...v2.3.0
[2.2.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.1.0...v2.2.0
[2.1.0]: https://github.com/todotxt/todo.txt-cli/compare/v2.0.1...v2.1.0
[2.0.1]: https://github.com/todotxt/todo.txt-cli/compare/v2.0.0...v2.0.1
[2.0.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.7.3...v2.0.0
[1.7.3]: https://github.com/todotxt/todo.txt-cli/compare/v1.7.2...v1.7.3
[1.7.2]: https://github.com/todotxt/todo.txt-cli/compare/v1.7.1...v1.7.2
[1.7.1]: https://github.com/todotxt/todo.txt-cli/compare/v1.7.0...v1.7.1
[1.7.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.6.3...v1.7.0
[1.6.3]: https://github.com/todotxt/todo.txt-cli/compare/v1.6.2...v1.6.3
[1.6.2]: https://github.com/todotxt/todo.txt-cli/compare/v1.6.1...v1.6.2
[1.6.1]: https://github.com/todotxt/todo.txt-cli/compare/v1.6.0...v1.6.1
[1.6.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.5.2...v1.6.0
[1.5.2]: https://github.com/todotxt/todo.txt-cli/compare/v1.5.1...v1.5.2
[1.5.1]: https://github.com/todotxt/todo.txt-cli/compare/v1.5.0...v1.5.1
[1.5.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/todotxt/todo.txt-cli/compare/v1.0.0...v1.1.0
[#8]: https://github.com/todotxt/todo.txt-cli/pull/8
[#148]: https://github.com/todotxt/todo.txt-cli/pull/148
[#156]: https://github.com/todotxt/todo.txt-cli/pull/156
[#160]: https://github.com/todotxt/todo.txt-cli/pull/160
[#169]: https://github.com/todotxt/todo.txt-cli/pull/169
[#217]: https://github.com/todotxt/todo.txt-cli/pull/217
[#218]: https://github.com/todotxt/todo.txt-cli/pull/218
[#219]: https://github.com/todotxt/todo.txt-cli/pull/219
[#228]: https://github.com/todotxt/todo.txt-cli/pull/228
[#230]: https://github.com/todotxt/todo.txt-cli/pull/230
[#246]: https://github.com/todotxt/todo.txt-cli/pull/246
[#246]: https://github.com/todotxt/todo.txt-cli/pull/246
[#249]: https://github.com/todotxt/todo.txt-cli/pull/249
[#254]: https://github.com/todotxt/todo.txt-cli/pull/254
[#264]: https://github.com/todotxt/todo.txt-cli/pull/264
[#270]: https://github.com/todotxt/todo.txt-cli/pull/270
[#271]: https://github.com/todotxt/todo.txt-cli/pull/271
[#276]: https://github.com/todotxt/todo.txt-cli/pull/276
[#289]: https://github.com/todotxt/todo.txt-cli/pull/289
[#295]: https://github.com/todotxt/todo.txt-cli/pull/295
[#300]: https://github.com/todotxt/todo.txt-cli/pull/300
[#301]: https://github.com/todotxt/todo.txt-cli/pull/301
[#346]: https://github.com/todotxt/todo.txt-cli/pull/346
[#354]: https://github.com/todotxt/todo.txt-cli/pull/354
[#359]: https://github.com/todotxt/todo.txt-cli/pull/359
[#386]: https://github.com/todotxt/todo.txt-cli/pull/386
