Welcome to the lab.

Gather 2.1 with saved presets

I put out version 2.1.0 of the Gather CLI today. It adds a couple of fixes and one feature that I think is worth mentioning.

Gather has a lot of command line options. This makes it very flexible, but it’s a PITA to remember all of the settings for a specific action. With v2.1+ you can add --save NAME to a long command to save it with a name, and then recall those flags and switches with --config NAME next time you run it.

For example, if you have a command such as:

gather --min-upvotes 1 --include-comments --metadata --nvu-add --fallback-title "Web Capture %date" https://brettterpstra.com/2023/01/16/searchlink-better-searches-better-results/ --save nvu

The --save nvu at the end will save all previous switches in the command. In the future I can just run:

gather --config nvu <URL>

To save a command you do have to have a valid call, which means you must include --stdin, --paste, or pass a URL as an argument in the command. The URL provided is not stored, only the command line options used in the call (meaning if the command uses --stdin, future calls to that config will also require STDIN input).

The config files are stored as YAML in ~/.config/gather/configs/*.yml. These files can be edited by hand, and you can duplicate a file with a new name to create a new config manually. The --config NAME flag just searches for a the NAME.yml file in this directory, so it doesn’t have to be created with the --save flag.

The nvu.yml file created by the command above looks like:

acceptedOnly: false
fallbackTitle: Web Capture %date
file: ''
html: false
includeComments: true
includeSource: true
includeTitle: true
inlineLinks: false
metadata: true
metadataYaml: false
minUpvotes: 1
nvAdd: false
nvUrl: false
nvuAdd: true
nvuNotebook: ''
nvuUrl: false
paragraphLinks: true
paste: false
readability: true
stdin: false
titleOnly: false
unicode: true
urlOpen: false
urlTemplate: ''

You can use --config NAME in Shortcuts/Services. You’ll need to define the configuration on the command line (or manually create it), but can then reference it from anywhere you can call Gather.

To update to the latest version, download the package below. If you’ve successfully installed via Homebrew, you should be able to just run brew upgrade gather-cli.

Gather CLI v2.1.0

A Frankenstinian combination of html2text and Arc90 Readability. This command line tool makes clipping web pages into Markdown text without ads and comments simple.

Published 01/04/12.

Updated 02/07/23. Changelog

DonateMore info…

Increment Templated Service/PopClip update

I’ve updated the Increment Templated Service and PopClip extension. It’s a small update, but the tool is useful enough that I want to highlight it.

The Increment Templated Service and PopClip extension allow you to write text with placeholders, and then repeat that text multiple times, using the placeholders to make changes in each iteration.

For example:

Here's paragraph ##1..3##.


Here's paragraph 1.
Here's paragraph 2.
Here's paragraph 3.

It gets more complex, and you can define start/end points, increment values, use string arrays, and reference index numbers in each iteration. See the PopClip extension docs for a more detailed explanation (anything that works in the PopClip extension also works in the Service.)

The update that I’ve just released allows reference placeholders to contain more complex math equations. In an iteration, you can include ##x## for a 1-indexed reference, or ##i## for a zero indexed reference. Previously you could include one mathematical operator, e.g. ##i*10## in the placeholder. Now you can include any mathematical expression, e.g. ##(i+5)*20/3##. Not a big deal, and if I didn’t think this little tool deserved more attention, the update on its own wouldn’t be enough to prompt a post. But it’s one of those tools that you don’t use every day, but when you need it, it’s a timesaver. Worth having in your toolkit, either as a Service (Quick Action), or as a PopClip extension.

Just as a side tip, you can use % as a modulus operator in equations, so getting even-odd numbering is as easy as ##i%2##.

Last minute update

Shortly after writing this, I decided to add one more feature to the Service/extension. You can now specify an array of strings after a modifier, allowing insertion of strings based on an index. To do so, include a # separator, followed by a comma-separated list of strings. They’ll be inserted based on the result of the index reference (zero-indexed, so 0 is the first element). For example:

div-##one,two,three,four,five##.##i%2#odd,even## {}


div-one.odd {}
div-two.even {}
div-three.odd {}
div-four.even {}
div-five.odd {}

You can also do parallel arrays:

hello ##mother,father,sister,brother##, you are a ##i#parent,parent,sibling,sibling##


hello mother, you are a parent
hello father, you are a parent
hello sister, you are a sibling
hello brother, you are a sibling

That should cover what few variations aren’t already handled.

Downloads for both versions below.

Increment Templated Service v3.0.2

Repeats a selected block of text a specified number of times, replacing placeholders with the count of the current item with variable start and end numbers.

Published 07/01/12.

Updated 02/06/23. Changelog

DonateMore info…

Brett's PopClip Extensions v1.45.2

A few PopClip extensions for Markdown writing and other useful tools

Published 11/30/14.

Updated 02/07/23. Changelog

DonateMore info…

Web Excursions for February 03, 2023

Web excursions brought to you in partnership with MindMeister, the best collaborative mind mapping software out there.

Share the apps in your Dock and see what everyone else is using (only shows apps pinned to Dock). Power users love this stuff, I know I do.
Tweet To Image - Create beautiful shareable images from tweets.
A free service to create nice shareable images from tweets. Paste a tweet link, get a beautiful image. Options for light/dark, size/format, and show/hide interactions. Very nice.
The Movie Database API
The API I’ve always wished IMDb had. Free for non-commercial use.
Effective GPT - Get accurate ChatGPT prompts
I’ve been really into exploring ChatGPT lately. It’s amazing for everything from email replies to source code comments, given the right input. This site compiles good ChatGPT prompts and lets users down/upvote them. Doesn’t seem to have a lot of voting clout yet, but it’s a great source for prompts that can generate exactly the right kind of content.
ReplyBox - Privacy-Focused Comment System
Starting at $5/mo and 15x lighter than Disqus, this privacy-focused comment system seems like a win. I’m happy with Remarkbox for now, but always good to see new gladiators in the arena.

Check out MindMeister and start brainstorming, collaborating, and boosting productivity.

Stuff I’m Using in 2023

I just wanted to take a moment once again to point you to my “Stuff I Use” page on this site. It’s a bunch of my favorite tools and services with whom I have affiliate agreements, meaning if you try them and also love them, I get a little bit of the money you pay for them. Doesn’t cost you any extra; it’s a marketing cost for the developers.

Only things I truly love make it onto that page, and I will stand behind anything listed there. The latest addition is Tower, the Git GUI app for Mac and Windows that makes me smile every time I use it. If you use Git in any serious capacity, check it out, I think you’ll love it.

So if you’re looking for cool stuff and/or ways to support what I do, check out the Stuff I Use.

PopClip extensions and modifier keys

I mentioned in a recent post that I was getting unexpected behavior when using modifier keys with PopClip. Quite a few of my PopClip extensions provide alternate actions when triggered while holding down Control, Shift, Command, or Option. But as of recent versions of PopClip, holding down Option is a global shortcut that displays the result in the PopClip bar, and holding Shift forces the result to copy to the clipboard instead of pasting, overriding extension preferences.

I spoke with Nick from Pilot Moon about this and he let me know that you can override this new behavior with a defaults write command in Terminal. If you want my extensions to function and provide all of their alternate options, open Terminal and paste this into it:

defaults write com.pilotmoon.popclip DisableAlternateActions -bool YES

Once you do that, extensions like BulletList, which creates numbered lists when you hold down Option, will once again provide the expected behaviors when modifiers are held.

Nick mentioned he’s considering some alternative options for providing multi-action extensions, which is really exciting to me. Having to remember even one modifier key per extension is a pain, and extensions like CriticMarkup, which has 4 different modes based on modifier keys, are basically impossible to remember well enough to get the right result on the first try every time. I look forward to what Nick does on this front — his ideas sounded very appealing.

Brett's PopClip Extensions v1.45.2

A few PopClip extensions for Markdown writing and other useful tools

Published 11/30/14.

Updated 02/07/23. Changelog

DonateMore info…

PopClip extensions update

I’ve updated my PopClip Extensions to v1.44. This update includes a revised nvUltra extension (that actually works), and a new SearchLink extension.

The nvUltra extension allows you to set a permanent notebook to use, and then whenever it’s run it will add a new note with the selected text. Simple, convenient. I may eventually incorporate Gather into this and allow selecting rich (HTML) text and converting to Markdown, but for now it’s designed for plain text.

The SearchLink extension requires that SearchLink be installed, but if it doesn’t locate it in the expected location when it runs, it will install it automatically.

In case you missed it, I also recently updated the WebMarkdown extension to use Gather, and if Gather isn’t installed when you run it, it will download the package for you and walk you through installation.

I’ve noticed lately that some of my extensions that have alternate behaviors when holding Option are acting strangely, showing the result in the popup and putting it in the clipboard instead of pasting it. I need to talk to Pilot Moon about why that’s happening, but will update as needed once I get some answers.

Download the latest versions of all of the extensions below.

Brett's PopClip Extensions v1.45.2

A few PopClip extensions for Markdown writing and other useful tools

Published 11/30/14.

Updated 02/07/23. Changelog

DonateMore info…

SearchLink – better searches, better results

Here’s another short video for SearchLink.

The better your search, the better your results. You’re a web professional, you know how to Google, so put your query-crafting skills to use to harness the convenience of SearchLink. By adding the right keywords to a search, you’re guaranteed to get the link you were hoping for without leaving your editor.

YouTube Video

Find out more about SearchLink on the project page, and check out the wiki for all of the documentation.

SearchLink – browser history, bookmarks, and Pinboard

I made you a video with some SearchLink tips. Note that I’m using SearchLink 2.3.15+ in these videos.

First up, how would you like to be able to instantly access any page you’ve visited in any browser? Or be able to instantly recall pages you’ve bookmarked in your browser or on Pinboard? Here you go:

YouTube Video

As always, find out more about SearchLink on the project page, and check out the wiki for all of the documentation.

SearchLink 2.3 – improved inline search for Markdown writers

I’ve bumped SearchLink up to v2.3, with a whole bunch of new features. I’m going to continue the SearchLink tips series as I have time, but for now, here’s a rundown of what’s new.

I’ve moved the entire project into a GitHub repository where you can view the code and download the codesigned Services, and I’ve split the documentation up from the beast of a single-page document into a wiki that should be more manageable moving forward. This also allowed for some automation in testing and deployment, which should prevent mishaps.

Read on for all the new shiny.