/bkmr

Super fast CLI bookmark manager and launcher

Primary LanguageRustBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

bkmr

Ultrafast Bookmark Manager and Launcher

sysid blog: bkmr

Features:

  • full-text search with semantic ranking (FTS5)
  • fuzzy search --fzf (CTRL-O: open, CTRL-E: edit)
  • tags for classification
  • knows how to open HTTP URLs, directories, files (e.g. Office, Images, ....)
  • can execute URI strings as shell commands via protocol prefix: 'shell::' URI-Example: shell::vim +/"## SqlAlchemy" $HOME/document.md
  • automatically enriches URLs with title and description from Web

To fully use bkmr's full-text query power see: https://www.sqlite.org/fts5.html (chapter 3).

Usage

bkmr --help

A bookmark manager for the terminal

Usage: bkmr [OPTIONS] [NAME] [COMMAND]

Commands:
  search     Searches Bookmarks
  open       Open/launch bookmarks
  add        Add a bookmark
  delete     Delete bookmarks
  update     Update bookmarks
  edit       Edit bookmarks
  show       Show Bookmarks (list of ids, separated by comma, no blanks)
  tags       Tag for which related tags should be shown. No input: all tags are printed
  create-db  Initialize bookmark database
  help       Print this message or the help of the given subcommand(s)

Arguments:
  [NAME]  Optional name to operate on

Options:
  -c, --config <FILE>  Sets a custom config file
  -d, --debug...       Turn debugging information on
  -h, --help           Print help information
  -V, --version        Print version information

Examples

# FTS examples (https://www.sqlite.org/fts5.htm)
bkmr search 'security "single-page"'
bkmr search '"https://securit" *'
bkmr search '^security'
bkmr search 'postgres OR sqlite'
bkmr search 'security NOT keycloak'

# FTS combined with tag filtering
bkmr search -t tag1,tag2 -n notag1 <searchquery>

# Match exact taglist
bkmr search -e tag1,tag2

# Search by any tag and sort by bookmark age ascending
bkmr search -T tag1,tag2 -O

# Adding URI to local files
bkmr add /home/user/presentation.pptx tag1,tag2 --title 'My super Presentation'

# Adding shell commands as URI
bkmr add "shell::vim +/'# SqlAlchemy' sql.md" shell,sql,doc --title 'sqlalchemy snippets'

Tags must be separated by comma without blanks.

Installation

  1. cargo install bkmr
  2. initialize the database: bkmr create-db db_path
  3. add URLs

Configuration

Location of created sqlite database must be known:

export "BKMR_DB_URL=db-path"

Benchmarking

  • ca. 20x faster than the Python original twbm after warming up Python.
time twbm search 'zzz*' --np
0. zzzeek : Asynchronous Python and Databases [343]
   https://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
   async, knowhow, py


Found: 1
343

real    0m0.501s
user    0m0.268s
sys     0m0.070s



time bkmr search 'zzz*' --np
1. zzzeek : Asynchronous Python and Databases [343]
   https://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
   async knowhow py


real    0m0.027s
user    0m0.008s
sys     0m0.016s