Initial commit - plumb - Open certain URL patterns with an ad-hoc opener (plumber)
 (HTM) hg clone https://bitbucket.org/iamleot/plumb
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) changeset 51858d13cfbcd1966bfe15978aafecbe95f0355d
 (HTM) Author: Leonardo Taccari <iamleot@gmail.com>
       Date:   Sat, 24 Mar 2018 16:02:52 
       
       Initial commit
       
       Diffstat:
        dplumb          |   53 +++++++++++++++++++++++
        openers/arxiv   |    7 +++
        openers/dilbert |    8 +++
        openers/gopher  |    5 ++
        openers/image   |   10 ++++
        openers/media   |    5 ++
        openers/pdf     |   10 ++++
        openers/txt     |    5 ++
        openers/txtweb  |    5 ++
        openers/web     |    5 ++
        plumb           |  125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        11 files changed, 238 insertions(+), 0 deletions(-)
       ---
       diff -r 000000000000 -r 51858d13cfbc dplumb
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/dplumb    Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,53 @@
       +#!/bin/sh
       +
       +#
       +# Copyright (c) 2018 Leonardo Taccari
       +# All rights reserved.
       +# 
       +# Redistribution and use in source and binary forms, with or without
       +# modification, are permitted provided that the following conditions
       +# are met:
       +# 
       +# 1. Redistributions of source code must retain the above copyright
       +#    notice, this list of conditions and the following disclaimer.
       +# 2. Redistributions in binary form must reproduce the above copyright
       +#    notice, this list of conditions and the following disclaimer in the
       +#    documentation and/or other materials provided with the distribution.
       +# 
       +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
       +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
       +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
       +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
       +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
       +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
       +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
       +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
       +# POSSIBILITY OF SUCH DAMAGE.
       +#
       +
       +
       +: ${PLUMB_DMENU:=dmenu -l 10}
       +
       +plumb "$(
       +awk \
       +'
       +BEGIN {
       +       FS = RS = "[ \t\n]+"
       +}
       +
       +/:\/\// {
       +       # Get rid of possible delimiters (<...>, (...), [...])
       +       if (match($0, /\<[0-9A-Za-z]+:\/\/[^>]+\>/) ||
       +           match($0, /\([0-9A-Za-z]+:\/\/[^)]+\)/) ||
       +           match($0, /\[[0-9A-Za-z]+:\/\/[^]]+\]/)) {
       +               print substr($0, RSTART + 1, RLENGTH - 2)
       +       } else {
       +               print $0
       +       }
       +}
       +' |
       +${PLUMB_DMENU} )"
       +
       +exit 0
       diff -r 000000000000 -r 51858d13cfbc openers/arxiv
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/arxiv     Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,7 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       id="$(printf "%s\n" "$u" | cut -d : -f 2)"
       +       pdfurl="https://arxiv.org/pdf/${id}.pdf"
       +       plumb "${pdfurl}"
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/dilbert
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/dilbert   Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,8 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       gifurl=$(curl -s -L "$u" |
       +           xmllint --html --xpath '//meta[@property="og:image"]/@content' - 2>/dev/null |
       +           sed -e 's/^ content="//' -e 's/"$/.gif/')
       +       plumb "${gifurl}"
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/gopher
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/gopher    Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,5 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       tmux new-window "sacc \"$u\""
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/image
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/image     Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,10 @@
       +#!/bin/sh
       +
       +mkdir -p ${XDG_CACHE_HOME:-~/.cache}/imagecache
       +cd ${XDG_CACHE_HOME:-~/.cache}/imagecache
       +
       +for u in "$@"; do
       +       f="$(basename "$u")"
       +       curl -s --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0" -Lz "$f" -O "$u"
       +       open "$f"
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/media
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/media     Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,5 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       tmux new-window "mpv \"$u\""
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/pdf
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/pdf       Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,10 @@
       +#!/bin/sh
       +
       +mkdir -p ${XDG_CACHE_HOME:-~/.cache}/pdfcache
       +cd ${XDG_CACHE_HOME:-~/.cache}/pdfcache
       +
       +for u in "$@"; do
       +       f="$(basename "$u")"
       +       curl -s --user-agent "Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0" -Lz "$f" -O "$u"
       +       open "$f"
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/txt
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/txt       Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,5 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       tmux new-window "w3m \"$u\""
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/txtweb
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/txtweb    Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,5 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       tmux new-window "w3m \"$u\""
       +done
       diff -r 000000000000 -r 51858d13cfbc openers/web
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/openers/web       Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,5 @@
       +#!/bin/sh
       +
       +for u in "$@"; do
       +       www-browser "$u"
       +done
       diff -r 000000000000 -r 51858d13cfbc plumb
       --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
       +++ b/plumb     Sat Mar 24 16:02:52 2018 +0100
       @@ -0,0 +1,125 @@
       +#!/bin/sh
       +
       +#
       +# Copyright (c) 2018 Leonardo Taccari
       +# All rights reserved.
       +# 
       +# Redistribution and use in source and binary forms, with or without
       +# modification, are permitted provided that the following conditions
       +# are met:
       +# 
       +# 1. Redistributions of source code must retain the above copyright
       +#    notice, this list of conditions and the following disclaimer.
       +# 2. Redistributions in binary form must reproduce the above copyright
       +#    notice, this list of conditions and the following disclaimer in the
       +#    documentation and/or other materials provided with the distribution.
       +# 
       +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
       +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
       +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
       +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
       +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
       +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
       +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
       +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
       +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
       +# POSSIBILITY OF SUCH DAMAGE.
       +#
       +
       +
       +: ${PLUMB_OPENERS_PATH:=${HOME}/.plumb/openers}
       +: ${PLUMB_NOOPEN:=no}
       +
       +
       +#
       +# Print usage information and exit.
       +#
       +usage()
       +{
       +       echo "usage: $0 [-n] [url ...]"
       +
       +       exit 1
       +}
       +
       +
       +#
       +# Launch the requested opener given an URL.
       +#
       +open()
       +{
       +       opener="$1"
       +       url="$2"
       +
       +       if [ "${PLUMB_NOOPEN}" = "yes" ]; then
       +               echo "${opener} \"${url}\""
       +       else
       +               ${PLUMB_OPENERS_PATH}/${opener} "${url}"
       +       fi
       +}
       +
       +
       +main()
       +{
       +
       +       while getopts n f; do
       +               case $f in
       +                       n) PLUMB_NOOPEN="yes";;
       +                       ?) usage;;
       +               esac
       +       done
       +       shift $((OPTIND - 1))
       +
       +
       +       for u in "$@"; do
       +               case $u in
       +               *://*.pdf )
       +                       open "pdf" "$u"
       +                       ;;
       +               *://*.txt | *://*.patch | *://*.diff | *://*.log )
       +                       open "txt" "$u"
       +                       ;;
       +               *://*.jpg | *://*.jpeg | *://*.png | *://*.gif )
       +                       open "image" "$u"
       +                       ;;
       +               *://*.mp3 | *://*.ogg | *://*.m3u8 | *://*.opus | *://*.flac | \
       +               *://*.mp4 | *://*.webm | *://*.gifv | \
       +               *://youtu.be/* | *://www.youtube.com/* | *://youtube.com/* | \
       +               ytdl://* )
       +                       open "media" "$u"
       +                       ;;
       +               gopher://* )
       +                       open "gopher" "$u"
       +                       ;;
       +               http://feed.dilbert.com/*/[0-9]*-[0-9]*-[0-9]* | \
       +               http://dilbert.com/strip/[0-9]*-[0-9]*-[0-9]* )
       +                       open "dilbert" "$u"
       +                       ;;
       +               *://codepad.org/* | *://paste.* | *://pastebin.* | \
       +               *://sprunge.us/* | *://slexy.org/* | *://ix.io/* )
       +                       open "txtweb" "$u"
       +                       ;;
       +               *://mail-index.netbsd.org/* | *://mail-index.NetBSD.org/*  | \
       +               *://www.mail-archive.info/* | *://lkml.org/* | \
       +               *://marc.info/* | *://www.openwall.com/lists/* )
       +                       open "txtweb" "$u"
       +                       ;;
       +               *://gnats.netbsd.org/* | *://gnats.NetBSD.org/* )
       +                       open "txtweb" "$u"
       +                       ;;
       +               *://*/meta/report.html )
       +                       open "txtweb" "$u"
       +                       ;;
       +               http://* | https://* )
       +                       open "web" "$u"
       +                       ;;
       +               arxiv://* )
       +                       open "arxiv" "$u"
       +                       ;;
       +               esac
       +       done
       +
       +}
       +
       +
       +main "$@"