zsh customize: URL ハンドラ

URL ハンドラ

何これ?

小澤氏の日記で紹介されていた、zsh ウィジェットを少し拡張したものです。プロンプトにそのまま URL を打ちこんで Enter を押せば、ブラウザで表示したり、ダウンロードが可能。

特徴

  • ブラウズかダウンロードかを選択可能
  • 特定のサフィックスでダウンロード
  • プロンプトを出さないようにも出来る
  • FTPとかも

実行イメージ

一番単純な URL の表示

sugi@tempest:~% http://slashdot.jp/ [Enter]

URL を入力して Enter を押すと、

sugi@tempest:~% _resolv_url http://slashdot.jp/
Browse or Download this URL? [B/d] [Enter]

プロンプトが表示されるので、どちらかを選択。(Enter で大文字の方を選択)

sugi@tempest:~% _resolv_url http://slashdot.jp/
Browse or Download this URL? [B/d]
sugi@tempest:~% Message: Galeon already running, using existing process

URL が galeon に送られる。

特定のサフィックスでダウンロード

sugi@tempest:~% http://ftp.us.debian.org/debian/pool/main/b/base-files/base-files_3.0.2_i386.deb [Enter]
Browse or Download this URL? [b/D] [Enter]
--09:12:55--  http://ftp.us.debian.org/debian/pool/main/b/base-files/base-files_3.0.2_i386.deb
           => `base-files_3.0.2_i386.deb'
Resolving ftp.us.debian.org... done.
Connecting to ftp.us.debian.org[35.9.37.225]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30,956 [application/x-debian-package]

100%[====================================>] 30,956        55.17K/s    ETA 00:00

09:12:56 (55.17 KB/s) - `base-files_3.0.2_i386.deb' saved [30956/30956]

インストールと最低限の設定

  1. ダウンロードとファイルの展開
  2. functions以下のファイルを全てfpathの通ったディレクトリにコピー
  3. ~/.zshrc に以下の記述を追加
if autoload +X -U _accept_line_with_url > /dev/null 2>&1; then
    zle -N accept-line-with-url _accept_line_with_url
    bindkey '^M' accept-line-with-url
    bindkey '^J' accept-line-with-url
fi

各種設定

WWW_BROWSER (env) : 起動するブラウザ。(default: www-browser). %s はURLに置換されます。例: export WWW_BROWSER="netscape-remote %s"

DOWNLOADER (env) : 起動するダウンロードコマンド(default: wget). 例: export DOWNLOADER="wget -nv"

browse_or_download_method (shell var) : プロンプトを出すかどうかを変更する。以下の値が有効。

  • "ask" もしくは空 — 毎回尋ねる(default)
  • "auto" — ディフォルトを自動選択
  • "download" or "browse" — 常に指定された動作をする

例: browse_or_download_method="auto"

設定サンプル

~/.zshrc

if [ -d ~/lib/zsh/functions ]; then
    fpath=(~/lib/zsh/functions $fpath)
fi
......(snip).......
if autoload +X -U _accept_line_with_url > /dev/null 2>&1; then
    zle -N accept-line-with-url _accept_line_with_url
    bindkey '^M' accept-line-with-url
    bindkey '^J' accept-line-with-url
fi

~/.zshenv

if [[ -z "$DISPLAY" ]]; then
  export WWW_BROWSER="w3m"
else
  export WWW_BROWSER="galeon -n %s &!"
fi
export DOWNLOADER="wget -S"

ダウンロード