buku/README.md

440 lines
19 KiB
Markdown
Raw Normal View History

2016-04-22 16:11:16 -05:00
<h1 align="center">Buku</h1>
2015-11-10 01:15:35 -06:00
2016-04-23 00:46:27 -05:00
<p align="center">
2016-05-23 22:18:02 -05:00
<a href="https://github.com/jarun/Buku/releases/latest"><img src="https://img.shields.io/github/release/jarun/buku.svg" alt="Latest release" /></a>
2016-04-23 00:46:27 -05:00
<a href="https://aur.archlinux.org/packages/buku"><img src="https://img.shields.io/aur/version/buku.svg" alt="AUR" /></a>
<a href="http://braumeister.org/formula/buku"><img src="https://img.shields.io/homebrew/v/buku.svg" alt="Homebrew" /></a>
2016-04-26 03:36:14 -05:00
<a href="https://github.com/jarun/buku/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-GPLv3-yellow.svg?maxAge=2592000" alt="License" /></a>
2016-06-03 19:32:38 -05:00
<a href="https://travis-ci.org/jarun/Buku"><img src="https://travis-ci.org/jarun/Buku.svg?branch=master" alt="Build Status" /></a>
2016-04-23 00:46:27 -05:00
</p>
2016-04-22 16:11:16 -05:00
<p align="center">
2016-09-21 00:03:57 -05:00
<a href="https://asciinema.org/a/2bc3vq5ndxfvg0sm9jp8xlz03"><img src="https://asciinema.org/a/2bc3vq5ndxfvg0sm9jp8xlz03.png" alt="Asciicast" width="734"/></a>
2016-04-22 16:11:16 -05:00
</p>
2015-11-10 01:15:35 -06:00
2016-10-11 00:11:07 -05:00
`buku` is a powerful bookmark management utility written in Python3 and SQLite3. When I started writing it, I couldn't find a flexible cmdline solution with a private, portable, merge-able database along with browser integration. Hence, `buku` (after my son's nickname).
2016-02-28 05:08:04 -06:00
2016-10-21 06:45:10 -05:00
With tagging and multiple options to search bookmarks, including regex and a deep scan mode (particularly for URLs), finding a bookmark is very easy. Multiple search results can be opened in the browser at once.
2016-10-11 00:11:07 -05:00
2016-10-11 13:58:08 -05:00
Though a terminal utility, it's possible to add bookmarks to `buku` without touching the terminal! Refer to the section on [GUI integration](#gui-integration). If you prefer the terminal, thanks to the shell completion scripts, you don't need to memorize any of the options. There's an Easter egg to revisit random forgotten bookmarks too.
2016-02-28 05:08:04 -06:00
2016-09-11 10:24:33 -05:00
<br>
<p align="center">
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=RMLTQ76JSXJ4Q"><img src="https://img.shields.io/badge/paypal-donate-orange.svg?maxAge=2592000" alt="Donate" /></a>
&nbsp;
<a href="https://gitter.im/jarun/Buku"><img src="https://img.shields.io/gitter/room/jarun/buku.svg?maxAge=2592000" alt="gitter chat" /></a>
</p>
2016-04-26 03:19:16 -05:00
2016-08-27 09:37:07 -05:00
## Table of Contents
2016-09-05 11:27:11 -05:00
- [Features](#features)
2016-04-19 13:57:58 -05:00
- [Installation](#installation)
- [Dependencies](#dependencies)
- [Installing from this repository](#installing-from-this-repository)
2016-10-23 10:44:16 -05:00
- [Running as a standalone utility](#running-as-a-standalone-utility)
- [Debian package](#debian-package)
2016-04-19 13:57:58 -05:00
- [Installing with a package manager](#installing-with-a-package-manager)
2016-09-11 10:24:33 -05:00
- [Shell completion](#shell-completion)
2016-04-19 13:57:58 -05:00
- [Usage](#usage)
- [Cmdline options](#cmdline-options)
- [Operational notes](#operational-notes)
2016-10-01 11:19:14 -05:00
- [GUI integration](#gui-integration)
2016-11-11 20:38:28 -06:00
- [Add bookmarks from anywhere](#add-bookmarks-from-anywhere)
2016-10-01 11:19:14 -05:00
- [Import bookmarks to browser](#import-bookmarks-to-browser)
2016-11-11 20:38:28 -06:00
- [As a library](#as-a-library)
2016-04-19 13:57:58 -05:00
- [Examples](#examples)
- [Contributions](#contributions)
2016-05-31 11:21:10 -05:00
- [Mentions](#mentions)
2016-09-11 10:24:33 -05:00
- [Copyright](#copyright)
2016-04-19 13:57:58 -05:00
2016-09-05 11:27:11 -05:00
## Features
- Add, open, tag, comment on, update, remove, shorten URLs
- Multiple search options, continuous search at prompt
- Portable, merge-able database, to sync between systems
2016-11-12 11:06:31 -06:00
- Import/export bookmarks in markdown or HTML (FF, Chrome compatible)
2016-09-05 11:27:11 -05:00
- Fetch page title from web, refresh all titles in a go
2016-09-13 02:40:12 -05:00
- Open (multiple) search results directly in default browser
2016-09-05 11:27:11 -05:00
- Manual password protection using AES256 encryption
- Tab-completion scripts (Bash, Fish, Zsh), man page with examples
- Several options for power users (see help or man page)
- Fast and clean interface, distinct symbols for record fields
- Minimal dependencies
2016-08-27 09:37:07 -05:00
## Installation
2016-08-27 09:37:07 -05:00
### Dependencies
2016-06-12 12:39:03 -05:00
`buku` requires Python 3.3 or later.
2015-11-08 16:04:49 -06:00
2016-09-05 11:27:11 -05:00
To install package dependencies, run:
$ sudo pip3 install cryptography beautifulsoup4
2016-02-28 08:11:27 -06:00
or on Ubuntu:
$ sudo apt-get install python3-cryptography python3-bs4
2016-08-27 09:37:07 -05:00
### Installing from this repository
2016-02-28 08:11:27 -06:00
If you have git installed, run:
2016-08-13 14:31:35 -05:00
$ git clone https://github.com/jarun/Buku/
or download the latest [stable release](https://github.com/jarun/Buku/releases/latest) or [development version](https://github.com/jarun/Buku/archive/master.zip).
2016-02-28 08:11:27 -06:00
Install to default location (`/usr/local`):
2016-02-28 08:11:27 -06:00
2016-04-10 07:41:00 -05:00
$ sudo make install
To remove, run:
2015-11-08 16:04:49 -06:00
2016-02-28 08:11:27 -06:00
$ sudo make uninstall
`PREFIX` is supported. You may need to use `sudo` with `PREFIX` depending on your permissions on destination directory.
2016-10-23 10:44:16 -05:00
#### Running as a standalone utility
2016-02-28 08:11:27 -06:00
`buku` is a standalone utility. From the containing directory, run:
$ chmod +x buku.py
$ ./buku.py
2016-10-23 10:44:16 -05:00
#### Debian package
If you are on a Debian (including Ubuntu) based system visit [the latest stable release](https://github.com/jarun/Buku/releases/latest) and download the `.deb` package. To install, run:
$ sudo dpkg -i buku-$version-all.deb
Please substitute `$version` with the appropriate package version.
2016-08-27 09:37:07 -05:00
### Installing with a package manager
2016-02-28 08:11:27 -06:00
`buku` is also available on
2016-10-19 22:11:18 -05:00
- [AUR](https://aur.archlinux.org/packages/buku/) for Arch Linux
2016-11-04 15:33:54 -05:00
- [Ubuntu](https://launchpad.net/ubuntu/+source/buku)
2016-10-19 22:11:18 -05:00
- [Homebrew](http://braumeister.org/formula/buku) for OS X
- [Debian Sid](https://packages.debian.org/sid/buku)
- [Ubuntu PPA](https://launchpad.net/~twodopeshaggy/+archive/ubuntu/jarun/)
2016-11-04 15:33:54 -05:00
- Void Linux repos ( `$ sudo xbps-install -S buku` )
2016-02-09 00:12:08 -06:00
2016-09-11 10:24:33 -05:00
## Shell completion
Shell completion scripts for Bash, Fish and Zsh can be found in respective subdirectories of [auto-completion/](https://github.com/jarun/Buku/blob/master/auto-completion). Please refer to your shell's manual for installation instructions.
2016-10-01 11:19:14 -05:00
`buku` has a [rofi frontend](https://github.com/carnager/buku_run) written by Rasmus Steinke.
2016-08-27 09:37:07 -05:00
## Usage
2016-08-27 09:37:07 -05:00
### Cmdline options
2016-06-08 11:57:50 -05:00
usage: buku [OPTIONS] [KEYWORD [KEYWORD ...]]
2016-06-22 09:47:33 -05:00
A powerful command-line bookmark manager. Your mini web!
2016-02-28 08:11:27 -06:00
2016-04-29 13:09:39 -05:00
general options:
-a, --add URL [tag, ...]
2016-05-18 22:24:46 -05:00
bookmark URL with comma-separated tags
-u, --update [...] update fields of bookmark at DB indices
2016-10-11 02:39:58 -05:00
accepts indices and ranges
2016-04-29 13:09:39 -05:00
refresh all titles, if no arguments
refresh titles of bookmarks at indices,
if no edit options are specified
2016-06-16 16:08:38 -05:00
-d, --delete [...] delete bookmarks. Valid inputs: either
a hyphenated single range (100-200),
OR space-separated indices (100 15 200)
2016-07-10 10:45:43 -05:00
delete search results with search options
2016-05-20 13:26:01 -05:00
delete all bookmarks, if no arguments
-h, --help show this information and exit
edit options:
--url keyword specify url, works with -u only
2016-11-12 11:06:31 -06:00
--tag [+|-] [...] set comma-separated tags
2016-07-11 12:18:40 -05:00
clear tags, if no arguments
2016-11-12 11:06:31 -06:00
works with -a, -u
2016-07-11 12:18:40 -05:00
append specified tags, if preceded by '+'
remove specified tags, if preceded by '-'
2016-04-29 13:09:39 -05:00
-t, --title [...] manually set title, works with -a, -u
2016-05-20 13:26:01 -05:00
if no arguments:
-a: do not set title, -u: clear title
2016-05-17 15:11:31 -05:00
-c, --comment [...] description of the bookmark, works with
-a, -u; clears comment, if no arguments
2016-11-12 11:06:31 -06:00
--immutable N disable title fetch from web on update
2016-11-05 17:32:03 -05:00
works with -a, -u
N=0: mutable (default), N=1: immutable
2016-04-29 13:09:39 -05:00
search options:
-s, --sany keyword [...]
search records with ANY keyword
2016-04-29 13:09:39 -05:00
-S, --sall keyword [...]
2016-11-12 11:06:31 -06:00
search records with ALL keywords
2016-11-06 08:41:45 -06:00
special keywords -
2016-11-12 11:06:31 -06:00
"blank": entries with empty title/tag
"immutable": entries with locked title
--deep match substrings ('pen' matches 'opened')
--sreg expression run a regex search
--stag [...] search bookmarks by a tag
2016-06-08 11:57:50 -05:00
list tags alphabetically, if no arguments
2016-04-29 13:09:39 -05:00
encryption options:
-l, --lock [N] encrypt DB file with N (> 0, default 8)
hash iterations to generate key
-k, --unlock [N] decrypt DB file with N (> 0, default 8)
hash iterations to generate key
power toys:
-e, --export file export bookmarks to Firefox format html
2016-09-20 13:02:04 -05:00
use --tag to export only specific tags
2016-11-12 11:06:31 -06:00
-i, --import file import bookmarks from html file; Firefox
and Google Chrome formats supported
2016-10-22 15:56:27 -05:00
--markdown use markdown with -e and -i
supported format: [title](url), 1 per line
-m, --merge file merge bookmarks from another buku database
-p, --print [...] show details of bookmark by DB index
accepts indices and ranges
2016-04-29 13:09:39 -05:00
show all bookmarks, if no arguments
2016-11-12 11:06:31 -06:00
-f, --format N fields to show in -p or search output
1: URL, 2: URL and tag, 3: title
2016-04-29 13:09:39 -05:00
-r, --replace oldtag [newtag ...]
replace oldtag with newtag everywhere
2016-04-29 13:09:39 -05:00
delete oldtag, if no newtag
-j, --json Json formatted output for -p and search
--noprompt do not show the prompt, run and exit
2016-10-01 10:29:53 -05:00
-o, --open [N] open bookmark at DB index N in web browser
open a random index if N is omitted
2016-11-12 09:47:36 -06:00
--shorten N/URL shorten using tny.im url shortener service
accepts either a DB index or a URL
2016-11-06 09:30:45 -06:00
--tacit reduce verbosity
--upstream check latest upstream version available
-z, --debug show debug information and extra logs
2016-04-29 13:09:39 -05:00
2016-07-03 05:06:50 -05:00
symbols:
> title
+ comment
# tags
2016-08-27 09:37:07 -05:00
### Operational notes
2016-04-24 09:37:51 -05:00
- The SQLite3 database file is stored in:
- **$XDG_DATA_HOME/buku/bookmarks.db**, if XDG_DATA_HOME is defined (first preference) or
- **$HOME/.local/share/buku/bookmarks.db**, if HOME is defined (second preference) or
2016-04-30 23:37:16 -05:00
- the **current directory**.
2016-06-28 12:51:19 -05:00
- If the URL contains characters like `;`, `&` or brackets they may be interpreted specially by the shell. To avoid it, add the URL within single or double quotes (`'`/`"`).
2016-10-11 02:39:58 -05:00
- URLs are unique in DB. The same URL cannot be added twice.
2016-11-06 11:47:25 -06:00
- Bookmarks with immutable titles are listed with bold `(L)` after the URL.
- **Tags**:
2016-10-11 02:39:58 -05:00
- Comma (`,`) is the tag delimiter in DB. A tag cannot have comma(s) in it. Tags are filtered (for unique tags) and sorted. Tags can be replaced.
- **Update** operation:
- If --title, --tag or --comment is passed without argument, clear the corresponding field from DB.
- If --url is passed (and --title is omitted), update the title from web using the URL.
2016-11-05 17:32:03 -05:00
- If indices are passed without any other options (--url, --title, --tag, --comment and --immutable), read the URLs from DB and update titles from web. Bookmarks marked immutable are skipped.
2016-06-16 16:08:38 -05:00
- **Delete** operation:
- When a record is deleted, the last record is moved to the index.
2016-06-17 00:24:55 -05:00
- Delete doesn't work with range and indices provided together as arguments. It's an intentional decision to avoid extra sorting, in-range checks and to keep the auto-DB compaction functionality intact. On the same lines, indices are deleted in descending order.
2016-07-10 10:45:43 -05:00
- Can delete bookmarks matching a search, when combined with any of the search options.
- **Search** works in mysterious ways:
2016-04-19 14:08:39 -05:00
- Case-insensitive.
- Matches exact words in URL, title and tags.
2016-10-22 01:42:11 -05:00
- --sany : match any of the keywords in URL, title or tags.
- --sall : match all the keywords in URL, title or tags.
- --deep : match **substrings** (`match` matches `rematched`) in URL, title and tags.
2016-10-21 06:45:10 -05:00
- --sreg : match a regular expression (ignores --deep).
- --stag : search bookmarks by a tag, or show all tags alphabetically (if no arguments).
2016-06-06 12:26:12 -05:00
- Search results are indexed serially. This index is different from actual database index of a bookmark record which is shown in bold within `[]` after the URL.
2016-10-11 02:39:58 -05:00
- **Encryption** is optional and manual. AES256 algorithm is used. To use encryption, the database file should be unlocked (-k) before using buku and locked (-l) afterwards. Between these 2 operations, the database file lies unencrypted on the disk, and NOT in memory. Also, note that the database file is *unencrypted on creation*.
2016-02-28 05:08:04 -06:00
2016-10-01 11:19:14 -05:00
## GUI integration
![buku](http://i.imgur.com/8Y6PTPw.png)
`buku` can integrate in a GUI environment with simple tweaks.
2016-11-11 20:38:28 -06:00
### Add bookmarks from anywhere
2016-10-01 11:19:14 -05:00
2016-10-02 23:50:30 -05:00
With support for piped input, it's possible to add bookmarks to `buku` using keyboard shortcuts on Linux and OS X. CLIPBOARD (plus PRIMARY on Linux) text selections can be added directly this way. The additional utility required is `xsel` (on Linux) or `pbpaste` (on OS X).
2016-10-01 11:19:14 -05:00
2016-10-02 23:50:30 -05:00
The following steps explore the procedure on Linux with Ubuntu as the reference platform.
2016-10-01 11:19:14 -05:00
1. To install `xsel` on Ubuntu, run:
$ sudo apt install xsel
2. Create a new script `bukuadd` with the following content:
#!/bin/bash
xsel | buku -a
`-a` is the option to add a bookmark.
3. Make the script executable:
$ chmod +x bukuadd
4. Copy it somewhere in your `PATH`.
5. Add a new keyboard shortcut to run the script. I use `<Alt-b>`.
#### Test drive
2016-10-02 23:50:30 -05:00
Select a URL anywhere or copy a link and press the keyboard shortcut to add it to the `buku` database. The addition might take a few seconds to reflect depending on your internet speed and the time `buku` needs to fetch the title from the URL. To avoid title fetch from the web, add the `-t` option to the script.
2016-10-01 11:19:14 -05:00
To verify that the bookmark has indeed been added, run:
$ buku -p | tail -3
and check the entry.
#### Tips
- To add the last visited URL in Firefox to `buku`, use the following script:
#!/bin/bash
sqlite3 $HOME/.mozilla/firefox/*.default/places.sqlite "select url from moz_places where last_visit_date=(select max(last_visit_date) from moz_places)" | buku -a
- If you want to tag these bookmarks, look them up later using:
$ buku -S blank
Use option `-u` to tag these bookmarks.
### Import bookmarks to browser
2016-10-02 23:50:30 -05:00
`buku` can export (or import) bookmarks in HTML format recognized by Firefox, Google Chrome and Internet Explorer.
2016-10-01 11:19:14 -05:00
To export all bookmarks, run:
$ buku --export path_to_bookmarks.html
To export specific tags, run:
$ buku --export path_to_bookmarks.html --tag tag 1, tag 2
Once exported, import the html file in your browser.
2016-11-11 20:38:28 -06:00
## As a library
`buku` can be used as a powerful bookmark management library. All functionality are available through carefully designed APIs. `main()` is a good usage example. It's also possible to use a custom database file in multi-user scenarios. Check out the documentation for the following APIs which accept an optional argument as database file:
BukuDb.initdb(dbfile=None)
BukuCrypt.encrypt_file(iterations, dbfile=None)
BukuCrypt.decrypt_file(iterations, dbfile=None)
NOTE: This flexibility is not exposed in the program.
2016-08-27 09:37:07 -05:00
## Examples
2016-05-17 15:11:31 -05:00
1. **Add** a bookmark with **tags** `linux news` and `open source`, **comment** `Informative website on Linux and open source`, **fetch page title** from the web:
2016-04-21 10:29:32 -05:00
2016-05-20 13:26:01 -05:00
$ buku -a https://tuxdiary.com linux news, open source -c Informative website on Linux and open source
Title: [TuxDiary Linux, open source, command-line, leisure.]
Added at index 336
336. https://tuxdiary.com
> TuxDiary Linux, open source, command-line, leisure.
+ Informative website on Linux and open source
# linux news,open source
where, >: title, +: comment, #: tags
2016-11-05 17:32:03 -05:00
2. **Add** a bookmark with tags `linux news` and `open source` & **immutable custom title** `Linux magazine`:
2016-02-28 08:32:10 -06:00
2016-11-05 17:32:03 -05:00
$ buku -a http://tuxdiary.com linux news, open source -t 'Linux magazine' --immutable 1
336. http://tuxdiary.com (L)
> Linux magazine
# linux news,open source
Note that URL must precede tags.
3. **Add** a bookmark **without a title** (works for update too):
2016-02-28 08:32:10 -06:00
$ buku -a http://tuxdiary.com linux news, open source -t
2016-05-20 13:26:01 -05:00
4. **Update** existing bookmark at index 15012014 with new URL, tags and comments, fetch title from the web:
$ buku -u 15012014 --url http://tuxdiary.com/ --tag linux news, open source, magazine -c site for Linux utilities
2016-05-20 13:46:44 -05:00
5. **Fetch and update only title** for bookmark at 15012014:
2016-05-20 13:26:01 -05:00
$ buku -u 15012014
2016-05-20 13:46:44 -05:00
6. **Update only comment** for bookmark at 15012014:
2016-05-20 13:26:01 -05:00
$ buku -u 15012014 -c this is a new comment
Applies to --url, --title and --tag too.
2016-10-22 01:25:41 -05:00
7. **Export** bookmarks tagged `tag 1` or `tag 2` to HTML and markdown:
2016-09-20 13:02:04 -05:00
2016-10-22 01:25:41 -05:00
$ buku -e bookmarks.html --tag tag 1, tag 2
$ buku -e bookmarks.md --markdown --tag tag 1, tag 2
2016-09-20 13:02:04 -05:00
All bookmarks are exported if --tag is not specified.
2016-10-22 01:25:41 -05:00
8. **Import** bookmarks from HTML and markdown:
$ buku -i bookmarks.html
2016-10-22 01:25:41 -05:00
$ buku -i bookmarks.md --markdown
2016-09-20 13:02:04 -05:00
9. **Delete only comment** for bookmark at 15012014:
2016-02-28 08:32:10 -06:00
2016-05-20 13:26:01 -05:00
$ buku -u 15012014 -c
Applies to --title and --tag too. URL cannot be deleted without deleting the bookmark.
2016-09-20 13:02:04 -05:00
10. **Update** or refresh **full DB** with page titles from the web:
2016-02-28 08:32:10 -06:00
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
2016-05-20 13:26:01 -05:00
This operation does not modify the indexes, URLs, tags or comments. Only title is refreshed if fetched title is non-empty.
2016-09-20 13:02:04 -05:00
11. **Delete** bookmark at index 15012014:
2016-02-28 08:32:10 -06:00
$ buku -d 15012014
2016-03-20 00:53:59 -05:00
Index 15012020 moved to 15012014
The last index is moved to the deleted index to keep the DB compact.
2016-09-20 13:02:04 -05:00
12. **Delete all** bookmarks:
2016-02-28 08:32:10 -06:00
$ buku -d
2016-09-20 13:02:04 -05:00
13. **Delete** a **range or list** of bookmarks:
2016-06-16 16:08:38 -05:00
2016-10-22 01:42:11 -05:00
$ buku -d 100-200
$ buku -d 100 15 200
2016-09-20 13:02:04 -05:00
14. **Search** bookmarks for **ANY** of the keywords `kernel` and `debugging` in URL, title or tags:
2016-02-28 08:32:10 -06:00
$ buku -s kernel debugging
2016-09-20 13:02:04 -05:00
15. **Search** bookmarks with **ALL** the keywords `kernel` and `debugging` in URL, title or tags:
2016-02-28 08:32:10 -06:00
$ buku -S kernel debugging
2016-09-20 13:02:04 -05:00
16. **Search** bookmarks **tagged** `general kernel concepts`:
2016-04-19 12:30:06 -05:00
$ buku --stag general kernel concepts
2016-09-20 13:02:04 -05:00
17. List **all unique tags** alphabetically:
2016-05-01 03:43:26 -05:00
$ buku --stag
2016-09-20 13:02:04 -05:00
18. **Encrypt or decrypt** DB with **custom number of iterations** (15) to generate key:
2016-02-28 08:32:10 -06:00
$ buku -l 15
$ buku -k 15
2016-09-05 10:51:06 -05:00
The same number of iterations must be specified for one lock & unlock instance. Default is 8, if omitted.
19. **Show details** of bookmark at index 15012014 and ranges 20-30, 40-50:
2016-05-01 03:43:26 -05:00
$ buku -p 20-30 15012014 40-50
2016-09-20 13:02:04 -05:00
20. **Show all** bookmarks with real index from database:
2016-05-01 03:43:26 -05:00
$ buku -p
2016-05-03 12:52:36 -05:00
$ buku -p | more
2016-09-20 13:02:04 -05:00
21. **Replace tag** 'old tag' with 'new tag':
2016-05-01 03:43:26 -05:00
$ buku -r 'old tag' new tag
2016-09-20 13:02:04 -05:00
22. **Delete tag** 'old tag' from DB:
2016-05-01 03:43:26 -05:00
$ buku -r 'old tag'
2016-09-20 13:02:04 -05:00
23. **Append (or delete) tags** 'tag 1', 'tag 2' to (or from) existing tags of bookmark at index 15012014:
2016-06-12 05:48:10 -05:00
$ buku -u 15012014 --tag + tag 1, tag 2
2016-07-11 12:18:40 -05:00
$ buku -u 15012014 --tag - tag 1, tag 2
2016-09-20 13:02:04 -05:00
24. **Open URL** at index 15012014 in browser:
2016-05-01 03:43:26 -05:00
$ buku -o 15012014
2016-11-12 09:47:36 -06:00
25. List bookmarks with **no title or tags** for bookkeeping:
2016-03-29 07:43:43 -05:00
2016-05-01 08:44:17 -05:00
$ buku -S blank
2016-11-12 09:47:36 -06:00
26. List bookmarks with **immutable title**:
2016-11-06 08:41:45 -06:00
$ buku -S immutable
2016-11-12 09:47:36 -06:00
27. **Shorten URL** www.google.com and the URL at index 20:
$ buku --shorten www.google.com
$ buku --shorten 20
28. More **help**:
2016-02-28 08:32:10 -06:00
$ buku
$ man buku
2015-11-08 16:04:49 -06:00
2016-08-27 09:37:07 -05:00
## Contributions
2016-10-22 13:35:16 -05:00
Pull requests are welcome. Please visit [#78](https://github.com/jarun/Buku/issues/78) for a list of TODOs.
2015-11-10 00:34:37 -06:00
2016-08-27 09:37:07 -05:00
## Mentions
2016-05-31 11:21:10 -05:00
- [One Thing Well](http://onethingwell.org/post/144952807044/buku)
2016-10-02 23:50:30 -05:00
- [It's F.O.S.S.](https://itsfoss.com/buku-command-line-bookmark-manager-linux/)
2016-05-31 11:21:10 -05:00
2016-09-11 10:24:33 -05:00
## Copyright
Copyright © 2015-2016 [Arun Prakash Jana](mailto:engineerarun@gmail.com)