Console Bibliography
Project description
coBib
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
- specifying
Changed
- use file paths relative to user-home (achieved by replacing
os.path
withpathlib
) (#69) - the shell helper
_list_tags
has been renamed to_list_labels
- (DEV): the
logging
andzsh_helper
modules have been relocated to thecobib.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 aPython
-based configuration (#54,!25)- for guidance on how to migrate an existing configuration please read https://mrossinek.gitlab.io/programming/cobibs-new-configuration/
- (DEV):
cobib.parser.Entry
has been moved tocobib.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 previouslyUndoCommand
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
JSONDecodeError
s thrown by theISBNParser
are caught and handled gracefully
Removed
- the functions
read_database()
andwrite_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
andemail
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 toTrue
and runningcobib init --git
- Note, that you must have at least set a
name
andemail
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 throughlist
-command filters or manual selection (by setting the--selection
flag)
- allows bulk modification of multiple entries in a
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
andsearch
has been renamed internally fromlist_arg
tofilter
- 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 theinit
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 theinit
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
andadd -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 theexport
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 to3
and behaves similar to Vim'sscrolloff
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
toexample.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
andSelect
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
XOR
ing 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 toint
) (#3,!4) - escape special LaTeX characters (#2,!5)
Fixed
list
no longer breaks with aKeyError
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 globalCONFIG
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 ofsqlite3
!1
Removed
sqlite3
database
0.1 - 2019-04-29
Added
- initial version with a basic
sqlite3
-based database
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 952ae1f911a856f27ca5cd5a73bca5a0cc38b13b64de0b9fe3d5376a10fd74fc |
|
MD5 | 4bc95c5afe2d3ebfd331a7477144bc2c |
|
BLAKE2b-256 | 3c7015810342b9d5433fb87e7487e669c26c92f9eaed831247c9a24bffd06334 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b48ca2d943e5dc7c41e3a7e88c1332a84261197f77801ccb8e0b7bead1682af |
|
MD5 | 671b01a5920514d73edc6fa1f63b63a6 |
|
BLAKE2b-256 | a89b84dc74f1cb3243d7141ee37ac381c2f8914627e4a1e1ec6f60a4166fb4ce |