Skip to content
forked from sysid/bkmr

Super fast CLI bookmark manager and launcher

License

Notifications You must be signed in to change notification settings

MIracleyin/bkmr

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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. standard Rust install via cargo
  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 [345]
   https://techspot.zzzeek.org/2015/02/15/asynchronous-python-and-databases/
   async, knowhow, py

Found: 1
345

real    0m0.259s
user    0m0.220s
sys     0m0.037s



time bmkr search 'zzz*' --np
-bash: bmkr: command not found

real    0m0.014s
user    0m0.005s
sys     0m0.009s

About

Super fast CLI bookmark manager and launcher

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 91.5%
  • Makefile 8.5%