よんちゅBlog

― このブログは自分用のメモや日々の問題などを共有するためのものです ―

20121005185841 お知らせ:  2013/07/17 ブログデザインをリニューアルしました。

(zsh補完関数) httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! (ついでに派生物もまとめてみた)

一般的な Web Programmer ならば、HTTP Status code はすべて暗記していると聞きました。

しかし、僕は初心者なので、なかなか覚えきれていないので、HTTPのステータスコードをさがすのに便利なツールを用意しました。

_httpstatus です。インストール方法は _httpstatus をfpathの通ったところに置きzshを再起動するだけです。
(注意:httpstatusコマンド本体は含まれておりません)

$ cp _httpstatus /usr/local/share/zsh/site-functions
$ exec zsh

sample02

700番以降は…例のアレです。

今日の参考文献:
httpstatus コマンドで、HTTP のステータスコードをすばやくしらべる! - tokuhirom's blog.


See also:
ついでに、リリースラッシュのほとぼりが冷めてきたので、気づいた範囲で派生物をまとめてみた。
(誤りなどあれば教えて下さい。)

Alfled.app:


Bookmarklet:


C++:


cURL:


emacs:


F#:


Go:


Groovy:


Haskell:


Io:


Javascript:


JSX:


Makefile:


node.js:


Perl:


PHP:


Powershell:


Python:


Ruby:


Scala:


Shell(bash/ksh/zsh):


vim:


その他:

メモリ使用率を表示する (Mac/Linux+出力カスタマイズ+精度指定)

以前、以下の記事にてメモリ使用率を表示するスクリプトを紹介しましたが、あれからもう少し汎用的なスクリプトに改良したので紹介します。

前回はMacでしか動作せず、メモリ使用率(%)を表示するのみでしたが、今回からMacに加えてLinuxでも動作するようにしました。

また、出力も使用率(%)だけでなく、使用量(GB)、空き率(%)、空き量(GB)、総量(GB)なども表示できるようにしました。
さらに、出力形式のカスタマイズや精度(小数点第何位まで求めるか)なども指定できるようにしました。

sample02

インストール方法

下記Githubからcloneまたはダウンロードし、PATHの通った所に置きます。

$ git clone https://github.com/yonchu/used-mem.git
$ mv used-mem/used-mem ~/bin

gitが使用できない場合は
ここから直接ダウンロードして下さい。

使用方法

Usage:
  used-mem [出力フォーマット]

フォーマット用文字列:
  #f : 空きメモリ率(%).
  #u : 使用メモリ率(%).
  #F : 空きメモリ量(GB).
  #U : 使用メモリ量(GB).
  #T : 総メモリ(GB).

出力フォーマットが未指定の場合は、メモリ使用率(%)とメモリ使用量(GB)/総メモリ(GB)が表示されます。

$ used-mem
77.8%(6.2G/8.0G)

フォーマットを指定した場合、

$ used-mem '#f%(#FG/#TG)'
22%(2G/8G)

$ used-men '#.1u%'
77.8%

$ used-mem 'Free: #.2f % (#.3F GB) | Used: #.2u % (#.3U GB) | Total: #.3T GB'
Free: 38.32 % (3.065 GB) | Used: 61.68 % (4.933 GB) | Total: 7.998 GB

精度の指定は、#.Nu のように指定し、小数点以下N桁まで表示します。
C言語シェルスクリプトのprintf文と同じような指定方法です。

精度指定の最大値はデフォルトでは小数点以下3桁までです。
4桁以上指定したい場合は以下のように実行します。

$ MAX_SCALE=5 used-mem '#.5u%'
97.73180%

tmuxで使用

tmuxで使用するとこんな感じになります。

  • $ used-mem 'Ⓜ #.1u%'

sample01

  • $ used-mem 'Ⓜ #.1u%(#.1UG/#.1TG)'

sample02

  • $ used-mem 'Free: #.2f % (#.3F GB) | Used: #.2u % (#.3U GB)'

sample03

蛇足

精度指定の最大値がデフォルト3桁とやや小さめになっているのは、検証不足のためです (-_-;)
32bitの環境で、bcコマンドが使用できない場合に、どこまで最大精度を大きくできるか分からなかったんですよね。
(手元に32bitの環境がなくて… / 今時の環境はbcコマンドぐらい入ってると思うけど…)

今更ながらzshにzawを導入

zsh Advent Calendar 2012の影響を受けました。

zawの本家はzsh-users/zawですが、それをforkしたnakamuray/zawを使っている方が多かったので私もそちらを使うことにしました。

$ cd dotfiles
$ git submodule add git://github.com/nakamuray/zaw.git .zsh/zaw

便利なsourceを作成している方がたくさんいたのでそれらも追加しました。

設定は以下

設定の読み込み

ちなみに自分はzshの基本設定以外は ~/.zsh/plugins ディレクトリに に xxxx.plugin.zsh のようなファイル名で設定ファイルを追加し、それらを .zshrc 内で読み込むようにしています。

oh-my-zsh のような使い方を自前でやっている感じですね。
oh-my-zshを導入すればいいんじゃないかって感じですが…なかなか踏み切れないんですよね。

if [ -d ~/.zsh/plugins ]; then
    for plugin in ~/.zsh/plugins/*.zsh; do
        if [ -f "$plugin" ]; then
            echo "Loading plugin: ${plugin##*/}"
            source "$plugin"
        fi
    done
fi

vim `which command` を手軽に行いたい

いちいち "which 〜" とか打つのが面倒だったので

コマンド名は適当に短くして使用すると良いかもね。
自分は "vc" にしてる。

さらに zsh の場合は下記の設定を.zshrcに設定することでコマンドの補完が行える

compdef _command vc

カッコイイtmuxを目指して!! - tmux-powerlineを改良したよ

この記事は既に内容がだいぶ古いです…

tmux-powerlineは2012年12月半ばあたりで大幅なバージョンアップが行われたため、この記事の設定方法は使用できません。
また、この記事で挙げていた旧tmux-powerlineの問題もほぼ解決されました。
Modularize files and functions by jfelchner · Pull Request #92 · erikw/tmux-powerline

最新のtmux-powerlineの設定方法は本家のREADEMEを見て頂くの一番速いかと思います。

また、最新のtmux-powerlineの私の設定はこちらにありますので、参考までにどうぞ。

tmux-powerlineとは、tmuxのステータスバーをvim-powerlineのようにかっこ良くしてくれるスクリプトです。

Macだとデフォルトでこんな感じになります。

f:id:yonchu:20121114145556p:plain

どうでしょう。なかなか良い感じではないでしょうか。
iTunesの曲名や天気など、そこまでやるか〜と思ってしまうようなものまであります。

カスタマイズも簡単!

カスタマイズも非常に簡単で、各項目の表示/非表示を切り替えるだけならスクリプト内の該当行をコメントアウトするだけですみます。
また、色の変更も簡単に行うことができます。

以下、status-left.sh より一部抜粋
ステータスラインに表示される各項目は基本的に以下の形式をとっています。

# status-left.sh

declare -A hostname    # 名前は被らなければなんでもOK
hostname+=(["script"]="${segments_path}/hostname.sh")    # 使用するスクリプト名
hostname+=(["foreground"]="colour0")    # フォアグランドカラーを指定 (256色)
hostname+=(["background"]="colour33")    # バックグラウンドカラーを指定 (256色)
hostname+=(["separator"]="${separator_right_bold}")
register_segment "hostname"    # ←この行をコメントアウトするだけで表示/非表示を切り替え可能

ただし、出力内容の微調整や標準では未対応の情報を表示させたい場合には、自分でスクリプトを書き換えるか、新しく作成する必要があります。
独自スクリプトを作成した場合は、そのスクリプトのパスを指定するか、そのスクリプトをPATHの通った所におきスクリプト名を指定することで利用できます。

だがしかし、不便な点も…

しかし、この tmux-powerline にはいくつか不便な点があります。

ざっと上げてみると、

  • bashのバージョンが4以上でなければならない (e.g. macのデフォルトのbashは3.x)
  • OSを自動で判別してくれない(config.shを環境に応じて書き換えなければならない)
  • 設定が外出しできない
  • tmux-powerlineのオン/オフが、切り替えはできるがオフの時の表示スタイルが指定できない。
  • ウィンドウサイズによって出す情報を可変できない。(ウィンドウが小さいと何も表示されなくなってしまう)

っとまあこんな感じで、実際に使用してみると意外と使いづらい点が多かったりします。
色々な環境で作業をしている方、さらに設定ファイル等を使いまわしている方にとっては結構致命的な点もありますよね。

というわけで、上記の問題をそれなりに解決してくれるラッパースクリプトを作りました。
その名も "tmux-powerline-wrapper"
そのままですね。

作成したものはgithubにて公開しています。

tmux-powerline-wrapper について

まずは上記問題の対応状況について

  • bashのバージョンが4以上でなければならない (e.g. macのデフォルトのbashは3.x)

  → 起動前に判定する方法を提供 ※1

  • OSを自動で判別してくれない(config.shを環境に応じて書き換えなければならない)

  → 自動で判別します

  • 設定が外出しできない

  → できます

  • tmux-powerlineのオン/オフ切り替えはできるけど、オフの時の表示スタイルを指定できない。

  → 環境変数によりオン/オフを切り替え ※1

  • ウィンドウサイズによって出す情報を可変できない。(ウィンドウが小さいと何も表示されなくなってしまう)

  → ウィンドウサイズの情報を提供、それを使って細かく微調整できます

※1 bashが未対応の場合や、tmux-powerlineをオフにした場合、ユーザ指定のデフォルトスタイルを適用することができます。
つまり、tmux-powerline導入前のスタイルが適用されるわけです。

インストール方法

まずはbashのバージョンを確認します。
(以下は Mac OS X 10.8.2 のデフォルトbashの場合です)

$ bash--version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.

上記のようにbashのバージョンが4未満だった場合は、バージョンが4以上のbashをインストールする必要があります。
Macの場合はhomebrewを使用すれば簡単にインストールすることができます。

$ brew install bash

Linuxなどの場合は、パッケージを用意するなりご自身でコンパイルするなりして用意して下さい。

続いて、githubより tmux-powerlinetmux-powerline-wrapper を持ってきます。

$ mkdir ~/.tmux
$ cd ~/.tmux

$ git clone git://github.com/yonchu/tmux-powerline.git
$ git clone git://github.com/yonchu/tmux-powerline-wrapper.git

配置する場所は基本的にどこでも良いですが、必ず tmux-powerline と tmux-powerline-wrapper を同一ディレクトリに置き、ディレクトリ名を変更しないようにして下さい。

続いて、tmuxの設定ファイル "~/.tmux.conf" に以下の設定を追加します。
(頭3行は既に設定している場合は不要です)

set-option -g status on
set -g status-interval 5    # ステータスバーの更新間隔[sec] (デフォルト:15sec)  適当に変更して下さい
set-option -g status-utf8 on

# Left status line
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-left-length 100"
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-left '#(~/.tmux/tmux-powerline-wrapper/status-left.sh)'"

# Right status line
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-right-length 100"
if "~/.tmux/tmux-powerline-wrapper/test-tmux-powerline.sh" \
    "set-option -g status-right '#(~/.tmux/tmux-powerline-wrapper/status-right.sh)'"

tmux-powerline-wrapper の配置場所が上記と異なる場合は適宜変更して下さい。
tmux-powerline を使用しない場合に適用されるユーザスタイルおよびステータスラインの設定は、上記設定より前に行なって下さい。

※ 設定を2行以上にわたって記述する場合、"¥" 記号にて行の継続を指示する必要がありますが、この機能は tmux 1.7 から使用可能なため、それ以前のtmuxを使用する場合には1行で記述するようにして下さい。

続いて、tmux-powerline 側でカレントディレクトリを取得できるようにするため、使用シェルに応じて以下の設定を追加します。

bashの場合は、~/.bashrc に以下のように記述します。

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

zshの場合は、~/.zshrc に以下のように記述します。

PROMPT="$PROMPT"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

※ 既にプロンプトに何らかの設定を行なっている場合は、その設定のあとに上記設定を追加するようにして下さい。

なお、上記設定はプロンプトの表示内容には影響しないので心配しないでください。
この設定がなくてもだいたいの機能は動きますが、一部gitなどのVCS情報の表示機能などが正常に動作しません。

最後に、tmuxを起動して以下のように表示されれば成功です。(Macの場合)
(※ ウィンドウ幅によって表示される情報が増減します)

f:id:yonchu:20121114163005p:plain

"tmux-powerline-wrapper" 内の "sample.tmux.conf" に ".tmux.conf" のサンプル設定があるので参考にして下さい。

tmux-powerlineのオン/オフ切り替え

tmux 起動前の場合は、以下のようにして tmux-powerline をオフにすることができます。

$ DISABLE_TMUX_POWERLINE=true
$ export DISABLE_TMUX_POWERLINE

tmux起動後にオン/オフを切り替える場合は以下のコマンドを使用します。

# オン→オフ
$ tmux setenv -ug DISABLE_TMUX_POWERLINE

# オフ→オン
$ tmux setenv -g DISABLE_TMUX_POWERLINE true

その後、設定ファイル(.tmux.conf)のリロードを行なって下さい。
設定ファイルのリロード方法が分からない方は、tmuxに慣れるためにまず最初に覚えるべきキーバインド - よんちゅBlog を参考にして下さい。

カスタマイズ

ステータスバーの表示スタイルや表示情報をカスタマイズしたい場合は、
まず、tmux-powerline-wrapper 内にある ".tmux-powerlinerc"".tmux-powerline-status-left.sh", ".tmux-powerline-status-right.sh" をホームディレクトリまたは "~/.tmux" へコピーして下さい。

配置するディレクトリはどちらでもOKです。
両方に置いた場合は、ホームディレクトリのファイルが優先されます。

$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerlinerc ~/
$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerline-status-left.sh ~/
$ cp ~/.tmux/tmux-powerline-wrapper/.tmux-powerline-status-right.sh ~/

まず、".tmux-powerlinerc" のカスタマイズです。

# Usage of patched font for symbols. true or false.
#USE_PATCHED_FONT=false

# Weather Yahoo
# Tokyo, JP - http://weather.yahoo.com/japan/tokyo-prefecture/tokyo-26235342/
TMUX_POWERLINE_WEATHER_YAHOO_LOCATION='26235342'
TMUX_POWERLINE_WEATHER_YAHOO_UNIT='c'
TMUX_POWERLINE_WEATHER_YAHOO_UPDATE_PERIOD=600

今のところ、表示する天気の地域, 単位(c/f/k), 更新間隔[sec]、パッチ当てフォントを使用するかどうかが変更可能です。

表示される天気はデフォルトでは東京になっています。
変更したい場合は、 Yahoo! Weather へアクセスし、好きな地域を選択後、表示されたページのURLの末尾にある数値を設定ファイルに記述して下さい。

続いて、ステータスラインの変更です。
コピーした ".tmux-powerline-status-left.sh" または ".tmux-powerline-status-right.sh" を変更して下さい。

変更方法は、基本的に本家 tmux-powerline のときと同様です。
加えて、以下のようにウィンドウサイズによって表示する情報を可変させることができます。
(書き方はシェルスクリプトと同様です)

# .tmux-powerline-status-left.sh より抜粋

register_segment "tmux_session_info"
if [ "$window_width" -ge 160 ]; then
    register_segment "hostname"
fi
if [ "$window_width" -ge 200 ]; then
    register_segment "username"
fi
if [ "$window_width" -ge 140 ]; then
    register_segment "ostype"
fi
register_segment "lan_ip"
register_segment "wan_ip"
if [ "$window_width" -ge 188 ]; then
    register_segment "vcs_branch"
fi
if [ "$window_width" -ge 230 ]; then
    register_segment "vcs_compare"
    register_segment "vcs_staged"
    register_segment "vcs_modified"
    register_segment "vcs_others"
fi

"$window_width" が現在のウィンドウサイズを示しているので、それに応じて表示させる情報をカスタマイズして下さい。

また、現在のウィンドウサイズは、tmux起動後にターミナルにて "tmux-powerline-wrapper/segments/window-width.sh" を実行することで確認することができます。
微調整したい場合にご使用下さい。

ステータスバー表示に利用できるスクリプトは、tmux-powerline/segments 内と tmux-powerline-wrapper/segments 内にあります。
お好みに応じてご使用ください。
ここにないものについては各自自作して頂ければと思います。

注意事項

フォントパッチについて

ステータスラインを良い感じに表示させるためにはvim-powerline 同様、使用するフォントにパッチを当てる必要があります。
自身で好きなフォントにパッチを当てたい場合は、vim-powerline に同梱されているfontpatcher を使用すると良いでしょう。
また、パッチ当て済みのフォントもいくつか配布されています。

パッチ当て済みフォントを使用しない場合は、".tmux-powerlinerc" にて以下のように設定すると良いでしょう。

# Usage of patched font for symbols. true or false.
USE_PATCHED_FONT=false
256色対応

tmuxを256色で表示させるためには、使用しているターミナルが256色表示に対応している必要があります。

以上です。

なんだかtmuxの本来の使い方から外れてきているような気がしますね。
ステータスバーのウィンドウ名が全然見えなかったりして…
ステータスバーの複数行表示ができたりすると、色々夢が広がるんですけどねぇ。