Simple command line bookmark and/or tagging utility.
One way to see this program is to consider it a simple hashmap utility for bash that associates a set of strings (the tags) to another one (the url). Feel free to find other ways to use this program!
It is based on a sqlite database but supports input/output in json or msgpack and can even serve a web page for better integration with the browser.
This script is written using python3.
THIS VERSION IS IN DEVELOPMENT.
Simple command line browser independant bookmark utility Usage: bm add [-d DB] URL TAG... bm list [-d DB] [-f FMT] [-v] [TAG]... bm tags [-d DB] [-f FMT] [URL]... bm remove [-d DB] URL TAG... bm delete [-d DB] URL... bm import [-d DB] [-f FMT] FILE... Commands: add Tag a URL list List URLs matching some tags If TAG is empty, outputs all urls tags List tags associated to URLs If URLs is empty, outputs all tags with statistics remove Remove TAGs from URLs delete Remove URLs from the database import Import URLs into the database Arguments: URL An URL or path; if '-', looks for a list of URLs on stdin TAG A tag FILE Path to a file for import GROUP A set of tags; Using a group sets all the tags within that group Options: -h, --help Print this help and exit --version Print current version number and exit -d, --database DB Path to the database to use -f, --format FMT Input/Output format: text, json, msgpack, web -v, --verbose Display tags alongside the URL while listing
$ bm add "http://duckduckgo.com" bad search engine $ bm add "http://google.com" bad search engine $ bm add "http://python.org" python official $ bm list search engine http://duckduckgo.com http://google.com $ bm remove "http://duckduckgo.com" bad $ bm add "http://duckduckgo.com" cool $ bm tags "http://duckduckgo.com" cool engine search $ bm list search engine http://duckduckgo.com http://google.com $ bm list bad search engine http://google.com $ bm list http://duckduckgo.com http://google.com http://python.org $ bm tags cool engine search bad python official # Add all tags from a url to another $ bm tags http://duckduckgo.com | xargs bm add http://google.com # Add tags to a set of urls $ bm list search engine | xargs -I{} bm add {} website find data
As many cli tools, bm is designed the Unix way: with composability in mind. This is why its output is mainly plain text, one entry per line with simple separators.
I use urxvt and the urxvt-perls that allow fast link openning from the terminal.
My main browser is qutebrowser but I had bm linked with dwb or firefox before. To do that I keep in my configuration two keybindings that execute external commands:
set-cmd-text -s :spawn -- bm add '{url}' b set-cmd-text -s :spawn -- bm list -v -f web B
That way, when on a page, I press b to bookmark the current url and just type the tags on the browser prompt. B is for searching, note how it uses the html display with -f web to open the results in a new tab.
For synchronisation I relie on a script that scp's the bookmark file between my computers and then does a local file import.
These are only some personal examples, I hope you'll find yours!
bm will support the use of sets of tags. Anything starting with the symbol + will be understood as a tag set. If used instead of a URL it will add tags to the set. If used instead of a tag it will act as if all tags in the set were listed. This will not involve a change of database since it already has the required tables (I'm just a slow coder).
docopt https://github.com/docopt/docopt or "pip install docopt"
msgpack http://msgpack.org/ or "pip install msgpack-python"
This program is under the GPLv3 License.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
Main developper: Cédric Picard Email: [email protected]