Skip to content

sp1ff/pin

Repository files navigation

pin

Introduction

Pinboard is “social bookmarking for introverts”– a social bookmarking web service along the lines of (the now defunct) del.icio.us. pin is a command-line client for Pinboard. It is by no means complete; it supports a few operations which I have found useful in my workflow. Here are a few examples:

You can send a link http://foo.com/bar to Pinboard with title “splat” & tags a, b & c like so:

pin send -t a -t b -t c "http://foo.com/bar | splat"

You can setup canned tag clouds you use repeatedly & refer to them by name:

$> cat ~/.pin
token = "you:XXX"

[targets]

[targets.frobnitz]
tags = ["@review", "frobinate"]
read_later = true
...
# This link will get tags @review & frobinate, and have the "read later" flag set:
$> pin send -r frobnitz "http://foo.com/bar | splat"

You can send the link to Instapaper at the same time:

$> pin send -r frobnitz --with-instapaper "http://foo.com/bar | splat"

I use it for curating my tags:

$> pin get-tags 
| Tag                            | Use Count |
+--------------------------------+-----------+
| flapdoodl                      |         1 |
| flapdoodle                     |     10000 |
...
# Hmmm... likely a mis-spelling
$> pin rename-tag flapdoodl flapdoodle

or, say, deleting all links with a given combination of tags when they’re no longer useful:

ping delete old-company+jira

Type pin --help for a description of all flags & sub-commands.

License

pin is GPL v3 software.

Prerequistes

The Rust toolchain (Rust version 1.57 at minimum).

Installation

This crate is available on crates.io, but you can also download an Autotools tarball:

cd /tmp
curl -O https://www.unwoundstack.com/dist/pin-0.2.8.tar.xz
tar xf pin-0.2.8.tar.xz
cd pin-0.2.8
./configure
make
make check
sudo make install

Status & Roadmap

pin is still early code; I have chosen the version number (0.2) in the hopes of conveying that this is a preliminary release. pinboard.py provides far more complete coverage of the Pinboard API, albeit at the cost of forcing users to navigate Python’s package management. Still, pin provides an interface that is task-oriented, not API-oriented. For instance, deleting all links with a given tag combination is actually a complex operation; one needs to:

  • ask the API for all links that have that combination of tags
  • delete those links one at a time (because that is what the API allows)
  • while respecting the API’s rate limits

In other words, this package is intended to provide an interface organized around user operations, not API endpoints.

Bugs, comments, problems, PRs, feature requests &c welcome at sp1ff@pobox.com and in the issues.