--
    --.--

    スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加
    2014
    12.23

    Homebrew - zshのプロンプトの設定とかエラー時の表示を変えたりとか

    寒いですねー>_<
    体は寒いけど、最近いいニュースがいくつかあったおかげで
    心はちょっとあったかいです^-^

    今回はzshネタの後半戦。
    プロンプトの見栄えを良くして使い勝手を向上させるお話です。

    プロンプトの表示設定


    プロンプトとはターミナルで毎回表示されるこれのこと。
    w6o6n: %

    なんとも味気ない^-^;;
    見栄えを良くするため、.zshrcファイルに以下の設定を書き込んでみましょう。

    # プロンプト表示設定
    setopt prompt_subst

    # エラー時に赤いプロンプトに
    # http://qiita.com/mollifier/items/59705ca90d8ad793b9cf
    PROMPT="%(?.%{${fg[blue]}%}.%{${fg[red]}%})%n%{${reset_color}%}: %# "

    # 左側にカレントパスを表示
    # https://wiki.archlinux.org/index.php/Zsh_(%E6%97%A5%E6%9C%AC%E8%AA%9E)
    RPROMPT="%{$fg[yellow]%}[%d]%{$reset_color%}"


    エラー時にプロンプトの色を変更

    直前に実行した命令がエラーを吐いたら、ユーザー名のところを赤くしてくれる素敵な設定です。

    Picture pop-up on Click!

    試しにわざと間違ったコマンドdetarame-commandを実行してみると…
    エラー表示とともにユーザー名が赤くなり、前のコマンドにエラーがあった事が一目で分かります

    次にまともなコマンド(which zsh)を実行すると…
    エラーがないのでユーザー名がに戻ります
    分かりやすくて素晴らしい!

    参考:zsh でコマンドが失敗したときにプロンプトの色を変えてエラーを知らせる - Qiita

    カレントパスを左側に表示

    右側のプロンプトにカレントパスを表示させていると、
    cdした時にプロンプトが長くなったりして見苦しかったりします。
    かといって表示させないと「今どこ?」ってなりそう(汗

    zshでは設定で簡単にカレントパス等の表示を右側にすることができます。
    試しにこんな感じで右側にカレントパスを黄色で表示させてみました。

    Picture pop-up on Click!

    コマンドが長くなると…
    表示が消えてくれるのでジャマになりません。

    Picture pop-up on Click!

    参考:Zsh (日本語) - ArchWiki



    深いディレクトリになると表示が長くなってジャマ^-^;
    そんな時はRPROMPTを以下のように記述すると
    5つを超える階層を短縮表示させることもできます。
    RPROMPT="%{$fg[yellow]%}[%(5~,%-2~/.../%2~,%d)]%{$reset_color%}"(.zshrcに記述)

    参考:続: zsh のプロンプトでカレントディレクトリを短縮表示 - bkブログ

    この他、普通のプロンプトの1行目に目立つ色でディレクトリ表示するのもいいかも♪
    参考:【iTerm2 + zsh】色設定をする - footmark

    ちょっと可愛いプロンプト

    ちょっといい感じなのでご紹介^-^

    前振りとして、コマンドを間違えた時にそれに近いコマンド候補を提示するようにしてみます。
    setopt correct(.zshrcに記述)

    わざと間違いコマンド(lu)を入力すると…
    それに近い候補(ul)を提示してくれています。n (no)を入力することで処理されずに終了しています。

    Picture pop-up on Click!

    で、ちょっと可愛くするために(笑).zshrcのPROMPTとSPROMPTを以下のように変更。

    # Zshをかわいくする.zshrcの設定
    # http://qiita.com/kubosho_/items/c200680c26e509a4f41c(一部改変)
    PROMPT="%m%(?.%{$fg[green]%}.%{$fg[cyan]%})%(?!(*'-') <!(*;-;%) <)%{${reset_color}%} %# "
    SPROMPT="%{$fg[magenta]%}(*'~'%)? < もしかして %B%{${fg[cyan]}%}%r%b%{$fg[magenta]%} ? [Yes(y),No(n),a,e]:%{${reset_color}"

    すると、こんな風に表示されるようになります。

    Picture pop-up on Click!

    エラーの時は泣いちゃいます!笑

    参考:Zshをかわいくする.zshrcの設定 - Qiita



    ちなみにy/n/a/eの4択になっていますが、aはabort(中止)、eはedit(編集)の略だそうです。

    Picture pop-up on Click!

    他にもいろいろな設定ができるので
    面白そうなのを見つけたらまたご紹介します!

    スポンサーサイト
    このエントリーをはてなブックマークに追加
    Comment:3  Trackback:0
    2014
    12.05

    Homebrew - zsh導入・処理終了後に通知する設定

    すっかり冬。寒くなっちゃいました。
    寒いのは苦手です。
    あまり暑くない夏、長い秋、台風、噴火といろいろありましたねー。
    異常気象なら暖冬だけにしてほしいです(ワガママ)



    ターミナルで時間のかかる処理があったりします。
    処理の過程を眺めているのも楽しいんですが、
    終わるまでじーっと見てるヒマがないこともしばしば。
    かねがね「処理が終わったら通知してくれないかなー?」と思っていました。

    ふとググってみると、以下の記事がヒット。
    zshでエラーや時間のかかる処理後に通知センターで通知するようにする - 僕の車輪の再発明

    これだ!
    私はシステム標準のBashを使っているので、この機能をBashに組み入れればOK!
    と思いきや…
    使われているコマンド(precmd/preexec)がBashでは使えないことが判明…

    もうzsh使った方が早いんじゃね?^-^;;
    zshは高機能で人気のシェルだし、良い機会なので導入してみる事に。

    どの辺が人気なのかはこちらなどが参考になるかと。
    ヾ(o゚ω゚o)ノ゙bashからzshに移行して2014年を迎えよう![ログインシェル] - Qiita

    2015.12.9追記
    今回のzshの話から逸脱しますが・・・
    Homebrewにbash-preexecというプログラムがありました。
    コレを使えばBashでも同様のことができそうです。
    難易度も低そうなので、興味のある方は挑戦してみて下さい!


    前振り・zshのインストールと初期設定を済ませる


    材料はこちら。
    ・zsh (http://www.zsh.org/)
    ・terminal-notifier (https://github.com/alloy/terminal-notifier)
    Snow Leopardではterminal-notifierの代わりにGrowlを使います(後述)。

    どちらもHomebrewを使って簡単にインストールできます。
    brew install zsh
    brew install terminal-notifier

    zshの初期設定

    以下のようなファイルを作ります(文字コード:UTF-8、改行コード:LF)。

    ~/.zshenv
    ホームディレクトリ、例えば/users/w6o6n/に.zshenvというファイルを作成し、
    最低限必要な設定(pathを通す等)を記述します。
    例えばこんな感じ。
    export PATH=/usr/local/bin:$PATH
    export PATH="$(brew --prefix)/sbin:$PATH"


    zsh固有の気の利いた書き方だとこんな感じになります。
    path=(/usr/local/bin(N-/) $(brew --prefix)/sbin(N-/) $path)
    参考:zsh で path にディレクトリを追加するときは (N-/) を付けよう - Qiita

    miとかで文字コード=UTF-8, 改行コード=LFで保存すればOK。
    .(ドット)から始まる名前は通常Finderでは不可視になるので
    見えるようにするにはこちらの記事などを参考にして下さい。

    ~/.zshrc
    インタラクティブシェルの細かい設定などを記述していきます。
    最初は空ファイルでも構いません。


    ターミナル起動時のインタラクティブシェルをzshにするには
    ターミナルの環境設定で「起動」タブを押し、開くシェルで「コマンド(完全パス):」を選択、
    /usr/local/bin/zshを入力すればOK!

    Picture pop-up on Click!


    ちなみにログインシェルをzshにするには
    過去の記事の「ログインシェルの設定」を参考にしてみて下さい。
    (etc/shells/usr/local/bin/zshを追加してchsh -s /usr/loca/bin/zsh
    私はログインシェルはBashのまま、インタラクティブシェルだけzshにするので変更しませんでした。

    時間のかかる処理の終了を通知:Mavericks + terminal-notifierで


    まんま以下の参考記事の方法です。
    zshでエラーや時間のかかる処理後に通知センターで通知するようにする - 僕の車輪の再発明

    # 一定時間以上かかる処理の終了を通知(Marvericks +terminal-notifier)
    # http://kazuph.hateblo.jp/entry/2013/10/23/005718
    # 変更箇所:16行目のエラーチェックを外し、-mオプションの重複を修正しています。
    autoload -Uz colors
    colors

    local COMMAND=""
    local COMMAND_TIME=""
    precmd() {
    if [ "$COMMAND_TIME" -ne "0" ] ; then
    local d=`date +%s`
    d=`expr $d - $COMMAND_TIME`
    if [ "$d" -ge "30" ] ; then
    COMMAND="$COMMAND "
    terminal-notifier -title "${${(s: :)COMMAND}[1]}" -message "$COMMAND";
    fi
    fi
    COMMAND="0"
    COMMAND_TIME="0"
    }
    preexec () {
    COMMAND="${1}"
    if [ "`perl -e 'print($ARGV[0]=~/ssh|^vi/)' $COMMAND`" -ne 1 ] ; then
    COMMAND_TIME=`date +%s`
    fi
    }

    (この設定だと30秒以上かかった処理が対象になります。13行目の30を書き換えれば変更可)

    時間のかかる処理の終了を通知:Snow LeopardでもGrowlを使えば可能


    通知センターのないSnow Leopardでも
    Growlとgrowlnotify、zshの組み合わせで同様のことができます。
    うちのSnow Leopardにも導入済みです!

    ・zshをHomebrewで導入(前述のとおり)

    ・Growlをインストールし、付属のgrowlnotifyもインストール
    Growlの入手先:Growl - Downloads
    growlnotifyのインストーラもExtraフォルダ内にあります。

    ・.zshrcにこのための設定を書き込む
    .zshrcに以下を記述。
    こちらもほぼ参考サイトのまんまです^-^;
    参考:処理時間が一定以上かかったらGrowlで通知するzshrc - 心魅 - cocoromi -

    # 一定時間以上かかる処理の終了を通知(Snow Leopard + Growl + growlnotify)
    # http://umezo.hatenablog.jp/entry/20100508/1273332857
    # http://kazuph.hateblo.jp/entry/2013/10/23/005718
    # 17行目の処理がMavericks + terminal-notifier版と違う所

    autoload -Uz colors
    colors

    local COMMAND=""
    local COMMAND_TIME=""
    precmd() {
    if [ "$COMMAND_TIME" -ne "0" ] ; then
    local d=`date +%s`
    d=`expr $d - $COMMAND_TIME`
    if [ "$d" -ge "30" ] ; then
    COMMAND="$COMMAND "
    growlnotify --appIcon Terminal --title "${${(s: :)COMMAND}[1]}" --message "$COMMAND";
    fi
    fi
    COMMAND="0"
    COMMAND_TIME="0"
    }
    preexec () {
    COMMAND="${1}"
    if [ "`perl -e 'print($ARGV[0]=~/ssh|^vi/)' $COMMAND`" -ne 1 ] ; then
    COMMAND_TIME=`date +%s`
    fi
    }


    時間がかかる処理が終わると、こんな感じでGrowlで通知されます。
    試しにターミナルでbrew doctorコマンドを実行すると、コマンド終了後にこんな通知が現れます。

    Picture pop-up on Click!


    「表示スタイルの変更」「通知をクリックするまで消さない」といった設定はGrowlで。
    システム環境設定のGrowlを開き、アプリケーションタブからgrowlnotifyを選んで
    「設定」ボタンを押すと設定できます。

    Picture pop-up on Click!


    ということで、味気なかったターミナルでの処理が少し楽しくなりそうです(^-^)
    次回もzshでのカスタマイズをお送りする予定です。
    このエントリーをはてなブックマークに追加
    Comment:1  Trackback:0
    back-to-top
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。