Skip to main content

๐ŸŒ€ Read URL

z-shell/z-a-readurlโ€‹

An aannex allows to automatically download the newest version of a file to which URL is hosted on a webpage.

It works as follows:

  • Invoke snippet (or simply pass the http://โ€ฆ address using the for syntax) on the web-page that hosts the URL to the file to download, provide dlink'โ€ฆ' ice with the expected file-download URL replacing the version with the %VERSION% keyword, also provide as'โ€ฆ' ice with one of the following values:
  1. readurl,
  2. readurl|command,
  3. readurl|completion,
  4. readurl|null.
note

The part after the | has the same meaning as in the normal as'โ€ฆ' ice.

Example:

zi id-as=fzf as='readurl|command' extract for \  dlink='/junegunn/fzf-bin/releases/download/%VERSION%/fzf-%VERSION%-linux_amd64.tgz' \    https://github.com/junegunn/fzf-bin/releases/

The snippet is just an example. The same effect is obtained by loading as junegunn/fzf-bin plugin with from'gh-r' ice.

As it can be seen, the dlink'โ€ฆ' can be a relative or an absolute path and also a full URL (i.e.: beginning with the http://โ€ฆ prefix).

Intermediate download pageโ€‹

Sometimes, like it is in the case of terraform command, the final download link isn't on the download page, but on a page that's listed on it. In such case use the dlink0'โ€ฆ' ice to provide the pattern for the additional, intermediate download page. For example, in case of terraform, the ZI command is:

zi id-as=terraform as='readurl|command' extract for \  dlink0='/terraform/%VERSION%/' \  dlink='/terraform/%VERSION%/terraform_%VERSION%_linux_386.zip' \    http://releases.hashicorp.com/terraform/

Sometimes the URL of the download page differs from the URL of the archive in just a few /-sections. In such case, it is possible to skip the dlink'โ€ฆ' ice by appending a ++-separated fragment of the archive URL, like so:

zi as'readurl|command' extract for \  http://domain.com/download-page++/archive.zip

If the archive URL has some different /-sections, then it's possible to strip the conflicting ones from the download URL by using +++, ++++, etc. โ€“ the number of the /-section that'll be stripped equals to the number of the + minus 2. So, for example:

zi as'readurl|command' extract for \  http://domain.com/download-page/removed-section+++/archive.zip

Summaryโ€‹

The annex provides:

  1. Two new ices: dlink'โ€ฆ' and dlink0'โ€ฆ'.
  2. A handling of the special values of the as'' ice, i.e.: of as'readurl', as'readurl|command', etc.

The annex works only with snippets, not plugins.

Install Read URLโ€‹

Simply load like a regular plugin, i.e.:

zi light z-shell/z-a-readurl

After executing the above command (possibly via .zshrc) it's then possible to use the dlink'โ€ฆ' and dlink0'โ€ฆ' ices and also the special as'readurl|โ€ฆ' value of the as'' ice.

Sorting the matched URLs / package versionsโ€‹

Sometimes the download page doesn't list the package versions from newest to the oldest, but in some other order. In such case it's possible to sort the URLs / package versions by prepending the chosen dlink ice (dlink0'โ€ฆ' or dlink'โ€ฆ') with the exclamation mark (dlink'!โ€ฆ', etc.). See the next section for an example:

Filtering the matched URLsโ€‹

Sometimes there are some unwanted URLs that match the dlink'โ€ฆ'/dlink0'โ€ฆ' regex / pattern. In such case it's possible to filter them out by appending a filtering regex to the dlink'โ€ฆ' ice as: dlink='the-main-regex~%the-unwanted-URLs-regex%' (or the same for dlink0'โ€ฆ'). An example package that can benefit from this is the Open Shift client, which doesn't sort the URLs from latest to the oldest โ€“ hence the exclamation mark (!) prepend โ€“ and it has special URLs like stable-4.4 or candidate-4.5 together with the regular version URLs (like 4.5.0-rc.1):

zi id-as"ocp" as"readurl|command" for \  dlink0'!%VERSION%~%(stable|latest|fast|candidate).*%' \  dlink"openshift-client-windows-%VERSION%.zip" \    https://mirror.openshift.com/pub/openshift-v4/clients/ocp/

The above snippet of Zsh code / ZI invocation will sort the URLs (dlink0'!โ€ฆ') and then filter out the special ones from the results (via โ€ฆ~%(stable|latest|fast|candidate).*%), this way selecting the latest version of the Open Shift client.

Other Examplesโ€‹

Pulumi, a tool to create, deploy, and manage modern cloud software.

zi id-as'pulumi' as'readurl|null' extract'!' for \
dlink='https://get.pulumi.com/releases/sdk/pulumi-%VERSION%-linux-x64.tar.gz' \
sbin'pulumi*' \
https://www.pulumi.com/docs/get-started/install/versions/