Change Log
==========

v0.20.1 2026-01-01

- Fix reopening of stdin on Windows (#347)


v0.20.0 2025-07-22

- Remove support for python 3.8 (638fb2e)
- Replace atomicwrites dependency with an inlined function (#343)
- Allow new version of vobject (f768845)
- Add new addressbook type "discover" (#341)
- Use python's glibc bindings for locale aware sorting, replacing the unidecode dependency (aad8d03, #338)
- Add support for KIND: vCard fields (#310)
- Remove command line options --strict-search, --uid and --target-uid (946999c)
- Allow address_book as field for list -F (512d8ce)
- Add new man page with subcommand listing (71fb6f0)
- Internal changes:
  - Rename default branch to main (369106c)
  - Remove setup.py (f6f0047)
  - Specify version (ranges) for dependencies (e4a3f71)
  - Replace sys.exit calls with exceptions and return values (b721246)
  - Use standard list, dict and tuple for type hints (9d17c5f)
  - Use python 3.13 in CI (17a8681, f6b7c5c)
  - Add extra opt dependency group for type checking (031682c)


v0.19.1: 2023-11-26

- Fix documentation builds on https://khard.readthedocs.io/


v0.19.0: 2023-11-23

- Remove support for python 3.7
- Run tests on python 3.11 and 3.12 in CI
- Fix yaml conversion of multiple addresses with same label (#323, #324)
- Improve error message for address book paths (884f1d9)
- Add pyproject.toml file and deprecate setup.py
- Remove deprecated options from --help and zsh completion
- Internal changes:
  - Add a general ask() function (#320, #326)
  - Use an exception to cancle user interactions (#325)
  - More and stricter type hints
  - Promote AddressBookCollection to a Sequence


v0.18.0: 2022-12-10
- Move project home on GitHub from @scheibler to @lucc
- Catch exceptions when loading the config (#294)
- Split $EDITOR env variable on spaces (#314)
- Add special phone number field query
- Add-email command improved: Attach email address to an existing contact
- Add-email command: new option --skip-already-added
- Add partial support for KIND: search query, display in details and listing (#309)
- Add show_kinds config option (#309)
- Add nix flake
- Remove support for python 3.6
- Remove deprecated subcommands "export" and "source"
- Switch from Travis to GitHub CI


v0.17.0: 2020-08-13
- Do not modify (clean up) search query to find more matches (4583efd)
- Remove special search handling for phone numbers (a570a85)
- Remove extra pruning from email, phone and postaddress subcommand (3f315f9, 1b9ce98, c704ce1)
- Add query syntax for search terms (#131)
- Add newline at the end of "show --format=pretty" (#256)
- Add -H to select header from which add-email should read (#258)
- Expand environment variables in paths in the config file (#269)
- Deprecate --strict-search (the new query syntax can be used instead)


v0.16.0: 2020-04-04
- Require python >= 3.6
- Require either default_action or a subcommand
- Twinkle sound samples converted to .ogg (#228)
- Expand documentation
- Build and server documentation on https://khard.readthedocs.io/
- Allow display=formatted_name in config
- New --fields option for list subcommand
- Internal changes:
  - Expanded the test suite
  - Use of python type annotations, checked on travis
  - Represent queries as custom data structures not regex
  - Use custom loggers per module


v0.15.0: 2019-10-24
- Require either default_action or a subcommand in the future (add deprecation
  warning for now)
- add man page for the config file
- make all options in the config file optional except for the address book
  definitions
- allow lists of strings for editor an merge_editor config options
- add a CONTRIBUTING file on Github
- handle ABLABELs on most fields
- add formatted name to the yaml template
- show formatted name in contact details
- make it possible to sort by and display formatted name in listings
- remove the khard-runner.py helper script
- validate the config file upon loading it
- internal code refactoring


v0.14.0: 2019-06-21
- Display ABLABELs for URLs and Private Objects
- Allow vcard selections to be aborted explicitly
- Unify edit and source subcommands
- Merge export and show subcommands
- Turn template export into a separate command
- Require python >= 3.5
- Add html documentation (generated with sphinx)
- Add man page (generated with sphinx)


v0.13.0: 2018-12-25
- New action postaddress: lists all postal (addresses analog to email and phone actions, #196)
- New zsh completion function for email addresses
- New config variables for the contact table section in khard.conf: preferred_email_address_type and preferred_phone_number_type
- Slight speed improvements
- Test suite created
- Several bug fixes


v0.12.2: 2018-01-21
- Fixed: Found contact twice when the whole uid was used with -u (#161)
- Fixed: A minor bug in the contact search function (#160)


v0.12.1: 2018-01-14
- Fix for issue #148: Config variable "sort" not longer mandatory in config file


v0.12.0: 2018-01-12
- Vcard: Support for anniversary attribute (#138)
- Config: New config parameter: localize_dates (#118)
- Action list: -p / --parsable prints a tab separated contact list (#141)
- Action remove: --force: Remove contact without confirmation (#140)
- Mutt: You have to update the query command in mutt's config file: set query_command= "khard email --parsable '%s'"
- Minor changes in khard example config, zsh completion function and twinkle scripts
- Fix: Results of phone number search improved
- Fix: Yaml parser switched from pyyaml to ruamel.yaml to allow special unicode characters in the contact template (#133)
- Fix: Accentuated characters sorted wrong in contact list (#127)


v0.11.4: 2017-02-16
- Unpinned vobject library version (base64 decoding/encoding bug was fixed upstream)
- New option: -c / --config /path/to/config.file
- Changed short option of --search-in-source-files from -c to -f to avoid confusion with the new -c / --config option
- Minor bug fixes


v0.11.3: 2016-09-20
- Pinned version of vcard library vobject to version 0.9.2 due to bug https://github.com/eventable/vobject/issues/39
- Added some new action aliases
- Fix for birthday date processing (#95)


v0.11.2: 2016-08-31
- Extended the photo parsing workaround from khard version 0.11.1 to all base64 encoded vcard attributes (#86 and #87)
- Show additional/middle names in name column of contact table (#89)
- Added khard-runner.py helper script to simplify source code launching


v0.11.1: 2016-07-31
- Workaround for the photo attribute parsing issue of vobject library 0.9.2 (#80)
- setup.py: try to convert readme file into restructured text format (pypi requirement) and specify encoding explicitly (#83)


v0.11.0: 2016-07-17
- Made khard python3 compatible (#59)
- Enhanced read and write support for vcard versions 3.0 and 4.0
- user input parser:
    - Improved robustness and error handling
    - Fixed org attribute parsing (#57)
    - Support for private vcard extensions (#51)
- New action birthdays (#64)
- New options:
    --display to display contacts by first or last name (#66)
    --search-in-source-files to speed up program initialization (#75)
    --skip-unparsable to skip unparsable vcard files (#75)
    --strict-search to narrow the contact search to the name field
- Added some aliases for program actions (#65)
- Removed davcontroller module due to the python3 incompatibility (script moved into the misc folder)
- Updated zsh completion function and khards example config file


v0.10.0: 2016-05-02
- New Action birthday: list birthdays, sorted by month and day
- option -p, --pretty was renamed to -p, --parsable: So, the pretty formatted email or
  phone number table is the default now. Please adapt the configuration files of potential email and
  phone applications (e.g.: mutt email -p %s)


v0.9.0: 2016-03-17
- Fully restructured command line interface for better usability:
    - general help with: khard -h
    - help for a specific action: khard action -h
- Updated zsh completion function
- New Action addressbooks
- New option -p|--pretty for email and phone actions to get pretty formatted output
- Fix: Only delete contact after modify, copy or move action was completed successfully


v0.8.1: 2016-01-16
- New option "show_uids" in config file to disable uid column in contact table


v0.8.0: 2016-01-15
- Sort contact table by first or last name (take note of changed behaviour of "sort" option)
- New option -g, --group-by-addressbook to group contact table by address book
- Changes in config file:
    - New group: contact table
        - new option: sort to sort contact table by first or last name
        - New option: group_by_addressbook to group contact table by address book
    - Moved show_nicknames option from group "general" to group "contact table"


v0.7.4: 2016-01-11
- Fixed uid dictionary creation


v0.7.3: 2016-01-08
- Cancel without further actions if the opened contacts editor is closed without saving (determined
  by modification date of template file)


v0.7.2: 2016-01-03
- Use of module atomicwrites to securely write vCards to disk


v0.7.1: 2016-01-01
- Added support for multiple instances of one vCard attribute


v0.7.0: 2015-12-18
- Support for vobject library version >= 0.8.2 from https://github.com/tBaxter/vobject
- Contact template syntax switched to yaml
- alot and mutt actions summarized to new email action (please have a look into the readme file for configuration changes)
- Support for extended name attributes
- Create and modify contact from stdin or from template file
- New action "export" to export data of existing contact in yaml format
- New argument --open-editor to open the preferred text editor after successful creation of new
  contact from stdin or template file
- New argument {-u, --uid} to select contact by uid
- Added write support for categories attribute
- Added wrapper script for sdiff
- Fixed a bug, which prevented the creation of new contacts with the add-email action


v0.6.3: 2015-10-24
- Added note attribute


v0.6.2: 2015-10-10
- Added completion function for zsh


v0.6.1: 2015-10-06
- Added title and role attribute
- Removed input restrictions of name and post address fields
- Parameter default_country in config file is not longer in use


v0.6.0: 2015-09-20
- New options copy contact and move contact
- Changed behavior of merge command (have a look into the readme file for details)
- Get path to editor and merge editor from the $PATH variable
- Code cleanup: new object class AddressBook


v0.5.0: 2015-09-05
- New option to merge two contacts
- Support for XDG_CONFIG_HOME parameter
- Post address: Added support for street and house number field with multiple lines


v0.4.1: 2015-07-16
- improved search results for phone, mutt and alot


v0.4.0: 2015-06-15
- new option "add-email": Get full email from stdin, filter senders mail address and add that
  address to an existing contact or create a new one. Feature tested with email client mutt.


v0.3.3: 2015-05-07
- twinkle option was renamed to phone: Now it prints all phone numbers like the mutt option does for
  e-mail addresses (more general approach for external phone clients)
- adapted twinkle plugin for use with the new phone option


v0.3.2: 2015-03-27
- Read-only support for Categories attribute


v0.3.1: 2015-03-26
- Nickname attribute added
- New parameter in config file: show_nicknames = yes / no


v0.3.0: 2015-03-25
- Added support for jabber, skype, twitter and webpage
- Created a filter for malformed vcard attributes


v0.2.2: 2015-03-14
- Added support for alot (MUA)


v0.2.1: 2015-01-14
- created pypi package
- missing attribute "fn" in VCard file is handled correctly now.


v0.2.0: 2014-10-01
- new project structure
- added twinkle plugin
- extended readme file


v0.1.0: 2014-09-18:
- initial release.

