ラベル homebrew の投稿を表示しています。 すべての投稿を表示
ラベル homebrew の投稿を表示しています。 すべての投稿を表示

2014/06/12

zsh環境の正常化とpecoとzshが連携出来ないお話

ghqを使ったローカルリポジトリの統一的・効率的な管理について - delirious thoughts をやってみようと思い、ghq と gem-src は無事導入できた。 最近は golang 製の percol である lestrrat/peco というものがあるらしく、全く使っていない pip を使うよりいいなとやってみたが zsh の連携が出来ない。
function peco-src() {
    local selected_dir=$(ghq list --full-path | peco --query "$LBUFFER")
    if [ -n "$selected_dir" ]; then
        BUFFER="cd ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-src
bindkey '^S' peco-src
こんなのを.zshrcに書いたが、Ctrl-S で起動しないし、直接 peco-src とやってディレクトリを選択するとエラーになる。
peco-src:zle:4: widgets can only be called when ZLE is active
peco-src:zle:6: widgets can only be called when ZLE is active
あれこれいじったり調べていると、どうも自分の zsh の環境が少しおかしいことに気づく。
% echo $module_path
/usr/lib/zsh/5.0.2/zsh
% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)
明らかにおかしい。どうやら、実行しているシェルは Mac に元から入っていた zsh のようだ。
おそらく、購入時に環境設定した時には chsh -s /bin/zsh したんだろう。
さっそく、homebrew の zsh に切り替える。
% sudo sh -c "echo /usr/local/bin/zsh" >> /etc/shells
% chsh -s /usr/local/bin/zsh
しかし、下記のエラーが出た。
/Users/pinzolo/.zshenv:1: command not found: rbenv
/Users/pinzolo/.zshenv:2: command not found: pyenv
compinit:183: module `zsh/parameter' has no such feature: `p:dis_patchars': autoload cancelled
compinit:183: module `zsh/parameter' has no such feature: `p:patchars': autoload cancelled
rbenv と pyenv のエラーは .zshenv の先頭に export PATH="/usr/local/bin:$PATH" を追加したら消えた。
compinit のエラーは zsh を再インストールしたら消えた。
% brew uninstall zsh
% brew install zsh --enable-etcdir
しかし、それでも peco-src は動かない。
/usr/local/Cellar/zsh/5.0.5/libzle.so はあるし、.zshrc 内では zle は動いていると思われる。
実行時にエラーが出るんだが、どうしてなんだろうか?
調べても同様の状況の人が出てこない。どうしたものか

2014/04/28

rbenv で ruby がインストールできなくなった

おもむろに最新パッチレベルとそろそろruby2.1.1を入れようと思って、

CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl` --with-gcc=clang" rbenv install 2.0.0-p451
を叩いたらエラーでインストールできなかった。
エラーログを見てみると下記のようなエラーメッセージが出ていたので、どうやら readline 関連でエラーが出ているらしい。
readline.c:1886:26: error: use of undeclared identifier 'Function'
    rl_pre_input_hook = (Function *)readline_pre_input_hook;
                         ^
readline.c:1886:36: error: expected expression
    rl_pre_input_hook = (Function *)readline_pre_input_hook;

調べてみると、どうやら readline が 6.3 になって rbenv でインストールしようとしたらエラーになるということらしい。
参考:MacでRuby 2.x.xがインストールできないバグ (homebrew + rbenv) - Qiita
readline を以前のバージョンに戻せばインストールできるとのことなので、

pinzolo@ileach % brew info readline
readline: stable 6.3.3 (bottled) http://tiswww.case.edu/php/chet/readline/rltop.html This formula is keg-only. OS X provides the BSD libedit library, which shadows libreadline. In order to prevent conflicts when programs look for libreadline we are defaulting this GNU Readline installation to keg-only. /usr/local/Cellar/readline/6.2.2 (30 files, 1.6M) /usr/local/Cellar/readline/6.2.4 (30 files, 1.6M) /usr/local/Cellar/readline/6.3.3 (40 files, 2.1M) * Poured from bottle From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/readline.rb
6.2.4 が入っていることを確認して、
pinzolo@ileach % brew switch readline 6.2.4
Cleaning /usr/local/Cellar/readline/6.2.2 Cleaning /usr/local/Cellar/readline/6.2.4 Cleaning /usr/local/Cellar/readline/6.3.3 Opt link created for /usr/local/Cellar/readline/6.2.4
readline を切り替えて再度インストールしたら無事インストールできた。