Skip to main content

Console Bibliography

Project description

coBib

coBib

pipeline coverage PyPI

coBib is a simple, command-line based bibliography management tool. It is the result of the need for an easy-to-use alternative to full-blown reference managers like Mendeley or Zotero. As such it follows some basic design goals:

  • plain-text database: which means you get full access and control over the database.
  • git-integration: as a benefit of the above, you can keep track of your database through version control.
  • centralized database, location-independent library: this means, that coBib only manages the database file in a centralized fashion but allows you to spread the actual contents of your library across the entire file system (this is the major different to papis).
  • command-line and TUI support: all features are available through the command-line as well as a curses-based TUI.

Installation

For all common purposes you can install coBib via pip:

pip install cobib

Note: Use pip3 if you still have Python 2 installed.

If you would also like to install the man-page and (crude!) Zsh completion, you need to download the source code and do the following:

git clone https://gitlab.com/mrossinek/cobib
cd cobib
make install_extras

Arch Linux

coBib is packaged in the AUR.

Windows

Windows is NOT supported! This is due to the fact that Python under Windows does not ship with the curses module. However, if you are using Windows 10 you should be able to install and use coBib within the Linux subsystem.

Getting started

To get started, you must initialize the database:

cobib init

If you would like to enable the git-integration, you should run:

cobib init --git

and enable config.database.git (see also configuration).

Be sure to check out my Quickstart blog post for a more guided introduction compared to the following section!

Usage

Adding new entries

You can now add new entries to your database (see also cobib.commands.add[^1]):

cobib add --bibtex some_biblatex_file.bib
cobib add --arxiv <some arXiv ID>
cobib add --doi <some DOI>
cobib add --isbn <some ISBN>

Note: when adding data from a .bib file, make sure that it is in the BibLaTex format!

Viewing your database and entries

You can view the contents of your database with (see also cobib.commands.list):

cobib list

You can show a specific entry with (see also cobib.commands.show):

cobib show <some entry label>

You can open an associated file of an entry with (see also cobib.commands.open):

cobib open <some entry label>

You can even search through your database with (see also cobib.commands.search):

cobib search "some text"

Editing your database

You can delete an entry with (see also cobib.commands.delete):

cobib delete <some entry label>

You can edit an entry manually with (see also cobib.commands.edit):

cobib edit <some entry label>

You can also apply simple modifications to multiple entries at once with (see also cobib.commands.modify):

cobib modify tags:private -- <some entry label> <another entry label> ...

Exporting your database

You can export your database with (see also cobib.commands.export):

cobib export --bibtex my_bibliography.bib
cobib export --zip my_library.zip

Integrated version control

If you have enabled the git-integration, you can undo and re-apply changes to your database with (see also cobib.commands.undo and cobib.commands.redo):

cobib undo
cobib redo

Getting help

Each subcommand provides additional help via:

cobib <subcommand> --help

and you can find extensive information in the online documentation (linked above) and the man-page:

man cobib

TUI

Finally, you can also use coBib's TUI for a more interactive experience (see also cobib.tui), by simply typing

cobib

Configuration

You can overwrite the default configuration by placing a config.py file in ~/.config/cobib/. The easiest way to get started with this file is by copying example.py or by using:

cobib _example_config > ~/.config/cobib/config.py

You can then modify it to your liking.

You may also specify a different config file at runtime by using the -c or --config command line argument.

Finally, be sure to take a look at the man page (man cobib) and/or the online documentation for more information.

Documentation

coBib's documentation is hosted here.

If you would like to generate a local version during development, you need to clone the source code, and install pdoc in order to generate it:

git clone https://gitlab.com/mrossinek/cobib.git
cd cobib
pip install pdoc
pdoc -d google -e cobib=https://gitlab.com/mrossinek/cobib/-/blob/master/src/cobib/ -t html -o docs src/cobib tests

You can then browse the documentation from docs/cobib.html.

History

I have started this project when I was looking into alternatives to popular reference managers such as Mendeley, which has more features than I use on a regular basis and does not allow me to work from the command line which is where I spent most of the time that I spent on the computer.

Hence, I have decided to make it my own task of implementing a simple, yet fast, reference manager. coBib is written in Python and uses a YAML file to store its bibliography in a plain text format.

Changelog

You can find the detailed changes throughout coBib's history in the Changelog.

License

coBib is licensed under the MIT License.

[^1]: References like this one get interpreted by the documentation generator. If you are reading this as the README page, you may find the online documentation more enjoyable.

Changelog

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

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

3.1.1 - 2021-05-25

Pypi: https://pypi.org/project/cobib/3.1.1/

Fixed

  • Pypi package metadata

3.1.0 - 2021-05-24

Pypi: https://pypi.org/project/cobib/3.1.0/

Added

  • the YAML format of the database has been extended to support the following: (#55)
    • numbers can be stored as integers
    • the ID field is no longer required and will be properly inferred from the label
    • the following fields can be stored as lists: file, tags, url
  • three new configuration options were added to complement the above list format options:
    • config.database.stringify.list_separator.file
    • config.database.stringify.list_separator.tags
    • config.database.stringify.list_separator.url
  • the _lint_database shell utility has been added which can be used to detect possible improvements for the database
  • the append-mode of the ModifyCommand was implemented (#60):
    • specifying -a/--add will add the modification value to the field of the entries rather than overwrite it
    • this can be used for string or list concatenation and even number addition on numeric fields

Changed

  • use file paths relative to user-home (achieved by replacing os.path with pathlib) (#69)
  • the shell helper _list_tags has been renamed to _list_labels
  • (DEV): the logging and zsh_helper modules have been relocated to the cobib.utils package
  • + symbols will no longer be stripped from tags (this was a left-over artifact from pre-v1.0.0)

Deprecated

  • the config.database.format.month setting is deprecated in favor of proper three-letter code encoding to support common citation style macros (!34)

Fixed

  • renaming the label during the edit command does not leave the previous label entry behind:
    • a followup also ensured that renaming entries happens in-place (#75)
  • the sorting of the list command

3.0.0 - 2021-04-10

Pypi: https://pypi.org/project/cobib/3.0.0/

  • From now on, coBib is the official way of spelling!

Added

  • coBib's documentation is now generated by pdoc and hosted at https://mrossinek.gitlab.io/cobib/cobib.html
  • (DEV): the cobib.database.Database-Singleton has been added to centrally manage the bibliographic runtime data (!28)
  • the new option config.database.format.suppress_latex_warnings
  • the new option config.commands.edit.editor which takes precedence over the $EDITOR variable

Changed

  • the INI-style configuration is replaced with a Python-based configuration (#54,!25)
  • (DEV): cobib.parser.Entry has been moved to cobib.database.Entry
  • the cobib.parsers module has been extracted (prep for #49, !28)
  • the filenames of the associated files are preserved when exporting to a Zip file
  • when trying to add an entry with an existing label, the database is not written to and a warning is raised early
  • month conversion and special character escaping are only done upon saving entries to the database
  • the path to the default logfile can now be configured via config.logging.logfile and defaults to ~/.cache/cobib/cobib.log

Deprecated

  • the INI-style configuration is deprecated
    • new configuration options will not be added to this style
    • only bugs which fully break usability will be fixed with regards to this configuration style
    • legacy-support will be fully removed on 1.1.2022

Fixed

  • the ZSH helper utilities now respect the -c, -l, and -v command line options
  • the RedoCommand should only revert a previously UndoCommand operation (#65)
  • the SearchCommand got some contexts improvements and correctly splits grep results
  • unwrapping does not crash the TUI if the cursor was multiple lines below the new buffer height
  • line continuation guides are not swallowed by current line highlighting
  • ensure the TUI's top line does not become negative
  • the TUI's handler for resizing events
  • JSONDecodeErrors thrown by the ISBNParser are caught and handled gracefully

Removed

  • the functions read_database() and write_database() are no longer available (!28)

2.6.1 - 2021-02-05

Pypi: https://pypi.org/project/cobib/2.6.1/

Note: 2.6.1 was not released from the master-branch, which resulted in a non-linear development.

Changed

  • init --git will not initialize a repository unless git has configured both, name and email

Fixed

  • TUI no longer crashes when aborting to quit (#64)

2.6.0 - 2020-12-31

Pypi: https://pypi.org/project/cobib/2.6.0/

Added

  • Git integration (#44, !20):
    • will automatically track any changes done to the database file with git
    • must be enabled by setting the DATABASE/git option to True and running cobib init --git
    • Note, that you must have at least set a name and email in the git config!
  • Undo/Redo commands to operate on git history of the database (#59,!23)
    • for obvious reasons these commands require the Git integration (see above) to be enabled
  • the Prompt command inside of the TUI:
    • allows executing arbitrary CoBib CLI commands
    • the default key binding is :
  • the Modify command: (#60,!24)
    • allows bulk modification of multiple entries in a <field>:<value> format
    • for now, this will always overwrite the field with the new value!
    • an extension to appending values is planned for a later release
    • the set of entries to be modified can be specified just like with the export command through list-command filters or manual selection (by setting the --selection flag)

Changed

  • the viewport history is preserved correctly (#21,!22)
    • this allows performing a search while showing an entry and reverts back to the correct view after quitting the search
    • the changes mainly involved refactoring of the cobib/tui module
  • the positional argument of the modify and search has been renamed internally from list_arg to filter
    • this should not have any visible effect to an end-user but may be relevant to developers

Fixed

  • gracefully handle multiple terminal sizing issues with regards to popups (#58)
  • catch messages on stdout during deletion from TUI
  • added missing help strings to the TUI help menu

Removed

  • The --force argument to the init command has now been removed (after being deprecated in v2.5.0).

2.5.0 - 2020-12-08

Pypi: https://pypi.org/project/cobib/2.5.0/

Added

  • support for multiple associated files (#42,!19)
  • interactive menu when opening an entry with multiple associated files (!19)

Deprecated

  • The --force argument to the init command has been deprecated. I don't think there is any benefit to providing the user the option to nuke their database file from the CLI. Instead, they can simply edit the file manually.

Fixed

  • always store years as strings to be compatible with bibtexparser
  • handle invalid arXiv or DOI IDs gracefully (#57)

2.4.1 - 2020-11-01

Pypi: https://pypi.org/project/cobib/2.4.1/

Fixed

  • ISBN parser was missing the ENTRYTYPE and did not use strings for number fields
  • the ISBN parser can now handle empty entries (#53)
  • the TUI will not crash on stdout/stderr messages exceeding the window width
  • the TUI respects quoted strings in the prompt handler (#52)

2.4.0 - 2020-10-14

Pypi: https://pypi.org/project/cobib/2.4.0/

Added

  • the FORMAT/default_entry_type option used for manual entry addition
  • a manual insertion mode available through edit -a new_label and add -l new_label
  • a ISBN-based parser for adding new entries (#45)
  • the TUI-based select command (and corresponding settings) (#8,!18)
  • the --selection argument for the export command (!18)

Changed

  • TUI color highlighting is now prioritized (!17)

Fixed

  • support URLs in file field during open command (#47)
  • the TUI no longer crashes when encountering long prompt inputs (#48)
  • the edit command can handle labels which start with common substrings (#46)
  • support multiple ANSI colors on a single line (#50)

2.3.4 - 2020-09-14

Pypi: https://pypi.org/project/cobib/2.3.4/

Fixed

  • another AUR package installation error

2.3.3 - 2020-09-14

Pypi: https://pypi.org/project/cobib/2.3.3/

Fixed

  • AUR package installation error

2.3.2 - 2020-09-10

Pypi: https://pypi.org/project/cobib/2.3.2/

Added

  • option to default to case-insensitive searching (DATABASE/search_ignore_case)

Changed

  • clearing the prompt, aborts the command execution

Fixed

  • search command correctly handles missing arguments in TUI (#43)

2.3.1 - 2020-09-10

Pypi: https://pypi.org/project/cobib/2.3.1/

Fixed

  • faulty Pypi package

2.3.0 - 2020-09-10

Pypi: https://pypi.org/project/cobib/2.3.0/

Added

  • Logging functionality has been added. The verbosity level can be controlled via -v (INFO) and -vv (DEBUG). As soon as the TUI starts, all logging output is redirected to /tmp/cobib.log.
  • Command line argument -l or --logfile can be used to specify the output path of the log. This will overwrite the /tmp/cobib.log location.
  • the TUI/scroll_offset setting was added. It defaults to 3 and behaves similar to Vim's scrolloff setting.
  • Configuration validation has been added. This extends the logging functionality to support more runtime debug information.
  • popup window support: stdout and stderr messages are presented in a popup similarly to the help window

Changed

  • -v command line argument now refers to --verbose rather than --version
  • Performance of the add command has been improved by not refreshing the database when outside of the TUI.

Fixed

  • bug when resizing causes the window width to become greater than the buffer width (#39)
  • do not escape special characters in labels (#40)
  • avoid special character encoding in file paths

2.2.2 - 2020-08-13

Pypi: https://pypi.org/project/cobib/2.2.2/

Fixed

  • current line highlight if viewport is wider than buffer was not correctly reset
  • the ignore_non_standard_types setting had no effect

2.2.1 - 2020-08-10

Pypi: https://pypi.org/project/cobib/2.2.1/

Changed

  • when wrapping the TUI lines, indent until after the label column (#26)
  • renamed default.ini to example.ini in the documentation folder

Fixed

  • current line highlight after viewport width was not correctly reset
  • correctly convert boolean configuration options (#34)
  • fix crash of TUI in wrap command when viewport is empty (#37)
  • default configuration settings are managed centrally and consistently (#35)

2.2.0 - 2020-07-12

Pypi: https://pypi.org/project/cobib/2.2.0/

Added

  • allow configuring the program used to open associated files
  • prompt user before actually quitting CoBib (#33)
  • implements the Search command (#7, !12)

Fixed

  • the default value of the open command was not set correctly

2.1.0 - 2020-06-14

Pypi: https://pypi.org/project/cobib/2.1.0/

Added

  • added half- and full-page scrolling (#22)

Changed

  • importing from bibtex data defaults to not ignored non-standard entry types (#28)
  • suppress LaTex encoding warnings except when adding entries (#29)
  • Search and Select print warnings to the prompt while not implemented

Fixed

  • init command ensures directory of database file exists
  • remove window artifacts after help menu is closed (#20)
  • configuration file detection was missing a user home expansion (#31)

2.0.0 - 2020-06-06

Pypi: https://pypi.org/project/cobib/2.0.0/

Fixed

  • respect sort order reversing and filter XORing from the TUI (#18)
  • edit command on Mac OS (#19)

Changed

  • made init command safe against database overwriting
  • TUI: list entries in reverse order by default (config: TUI/reverse_order)

2.0.0b4 - 2020-05-16

Pypi: https://pypi.org/project/cobib/2.0.0b4/

Fixed

  • reset viewport position when updating buffer

2.0.0b3 - 2020-05-16

Pypi: https://pypi.org/project/cobib/2.0.0b3/

Fixed

  • properly assert valid current line number

2.0.0b2 - 2020-05-16

Pypi: https://pypi.org/project/cobib/2.0.0b2/

Fixed

  • fixed TUI startup

2.0.0b1 - 2020-05-16

Warning: do NOT use! The TUI is broken in this release!

Pypi: https://pypi.org/project/cobib/2.0.0b1/

Fixed

  • TUI does not crash when opening an entry with no associated file
  • correctly reset current line positions after filtering and editing

2.0.0b0 - 2020-04-28

Pypi: https://pypi.org/project/cobib/2.0.0b0/

Changed

  • internal: refactored the config into a class
  • centralized the database hanlding to improve performance (#12,!9)

Fixed

  • the Show command does not break after scrolling the viewport (#13)

2.0.0a2 - 2020-04-27

Pypi: https://pypi.org/project/cobib/2.0.0a2/

Added

  • user configuration options for:
    • TUI colors
    • TUI key bindings
    • TUI default list arguments
  • help window highlighting

Changed

  • sorting and filtering commands remain persistent when updating the list view

2.0.0a1 - 2020-04-23

Pypi: https://pypi.org/project/cobib/2.0.0a1/

Added

  • Added a basic curses-based TUI (#5,!7)

Changed

  • internal: refactored commands into separate module

1.1.0 - 2020-03-28

Pypi: https://pypi.org/project/cobib/1.1.0/

Added

  • add FORMAT.month configuration option to configure the default type for month fields (defaults to int) (#3,!4)
  • escape special LaTeX characters (#2,!5)

Fixed

  • list no longer breaks with a KeyError when a queried field does not exist in any bibliography entry (!2)
  • --label can now correctly overwrite the ID (#4,!3)

Changed

  • set_config() and global CONFIG exported to separate module

1.0.2 - 2020-01-12

Pypi: https://pypi.org/project/cobib/1.0.2/

Note: this removal is not seen as a MINOR version bump because this is essentially a long out-standing bug fix

Removed/Fixed

  • doi extraction from pdf files (476efc4f)
    • also removes the ability to add entries directly via pdf files

1.0.1 - 2020-01-12

Pypi: https://pypi.org/project/cobib/1.0.1/

Changed

  • metadata for pypi

1.0.0 - 2020-01-12

First MAJOR release. Also available via Pypi: https://pypi.org/project/cobib/1.0.0/ The project was renamed from CReMa to CoBib

Added

  • allow sorting the list output (2a5a94f1)
  • crude and slow (!!!) zsh completion (9f28f441)
  • support Darwin's open command

Changed

  • suppress list output when exporting
  • add used tags to columns when listing
  • sort YAML database entries by keys (d2af42d2)

Fixed

  • fixed arxiv parser (7ce3726f)

0.2 - 2019-09-02

Note: this release was not marked MAJOR because this is still a WIP and early alpha release.

Added

  • complete rewrite to use a plain-text yaml database instead of sqlite3 !1

Removed

  • sqlite3 database

0.1 - 2019-04-29

Added

  • initial version with a basic sqlite3-based database

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cobib-3.1.1.tar.gz (84.8 kB view details)

Uploaded Source

Built Distribution

cobib-3.1.1-py3-none-any.whl (94.6 kB view details)

Uploaded Python 3

File details

Details for the file cobib-3.1.1.tar.gz.

File metadata

  • Download URL: cobib-3.1.1.tar.gz
  • Upload date:
  • Size: 84.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.5

File hashes

Hashes for cobib-3.1.1.tar.gz
Algorithm Hash digest
SHA256 952ae1f911a856f27ca5cd5a73bca5a0cc38b13b64de0b9fe3d5376a10fd74fc
MD5 4bc95c5afe2d3ebfd331a7477144bc2c
BLAKE2b-256 3c7015810342b9d5433fb87e7487e669c26c92f9eaed831247c9a24bffd06334

See more details on using hashes here.

File details

Details for the file cobib-3.1.1-py3-none-any.whl.

File metadata

  • Download URL: cobib-3.1.1-py3-none-any.whl
  • Upload date:
  • Size: 94.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.5

File hashes

Hashes for cobib-3.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4b48ca2d943e5dc7c41e3a7e88c1332a84261197f77801ccb8e0b7bead1682af
MD5 671b01a5920514d73edc6fa1f63b63a6
BLAKE2b-256 a89b84dc74f1cb3243d7141ee37ac381c2f8914627e4a1e1ec6f60a4166fb4ce

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page