数年前にRTMに入れたままになってましたが、ようやくpercolをインストー
ルしました。zshでhelmっぽい履歴検索をやりたかったためです。
https://github.com/mooz/percol
※ 最近の毎週木曜日は、会社の人ともくもくしています。
作者はあのKeySnail
のmoozさん。2年くらい前にお会いしましたが、お元気
でしょうか。
README.mdに書いてあったHOMEにインストールする方法だと、以下のエラー
が出て使えませんでした。Python力ゼロなので分かりません。
$ ps aux | percol
Traceback (most recent call last):
File "/Users/masutaka/.local/bin/percol", line 29, in <module>
from percol.cli import main
ImportError: No module named percol.cli
試しにpyenvでPythonをインストールし、そこにpipでpercolをインストー
ルすることにしました。
pyenvはbrewでインストールできます。python-build的なものやpipも同時
に入るので楽ちん。
最新のPython2系とpercolはこんな感じでインストールできます。
$ pyenv install 2.7.7
$ pyenv global 2.7.7 && pyenv rehash && rehash
$ pip install percol
$ pyenv rehash && rehash
percolの設定ファイルは~/.percol.d/rc.pyです。色を自分好みに、キーバ
インドをREADME.mdに書いてあったEmacs風にしました。
percol.view.PROMPT = ur"<on_blue>QUERY></on_blue> <on_red><on_red>%q</on_red>"
percol.view.CANDIDATES_LINE_BASIC = ("black", "on_white")
percol.view.CANDIDATES_LINE_SELECTED = ("black", "on_green", "underline")
percol.view.CANDIDATES_LINE_MARKED = ("black", "on_cyan")
percol.view.CANDIDATES_LINE_QUERY = ("red", "bold")
# Emacs like
percol.import_keymap({
"C-h" : lambda percol: percol.command.delete_backward_char(),
"C-d" : lambda percol: percol.command.delete_forward_char(),
"C-k" : lambda percol: percol.command.kill_end_of_line(),
"C-y" : lambda percol: percol.command.yank(),
"C-t" : lambda percol: percol.command.transpose_chars(),
"C-a" : lambda percol: percol.command.beginning_of_line(),
"C-e" : lambda percol: percol.command.end_of_line(),
"C-b" : lambda percol: percol.command.backward_char(),
"C-f" : lambda percol: percol.command.forward_char(),
"M-f" : lambda percol: percol.command.forward_word(),
"M-b" : lambda percol: percol.command.backward_word(),
"M-d" : lambda percol: percol.command.delete_forward_word(),
"M-h" : lambda percol: percol.command.delete_backward_word(),
"C-n" : lambda percol: percol.command.select_next(),
"C-p" : lambda percol: percol.command.select_previous(),
"C-v" : lambda percol: percol.command.select_next_page(),
"M-v" : lambda percol: percol.command.select_previous_page(),
"M-<" : lambda percol: percol.command.select_top(),
"M->" : lambda percol: percol.command.select_bottom(),
"C-m" : lambda percol: percol.finish(),
"C-j" : lambda percol: percol.finish(),
"C-g" : lambda percol: percol.cancel(),
})
~/.zshrcもREADME.mdとほぼ同じ。最近hirocaster氏が紹介した、ghnとの
連携
も追加。でもghnはだいぶもたつく感じ。
function exists { type $1 > /dev/null }
if exists percol; then
function percol_select_history() {
local tac
exists gtac && tac="gtac" || { exists tac && tac="tac" || { tac="tail -r" } }
BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
CURSOR=$#BUFFER # move cursor
zle -R -c # refresh
}
zle -N percol_select_history
bindkey '^R' percol_select_history
function ghn_open() {
local url=$(ghn list | percol --query "$LBUFFER")
if [ -n "$url" ]; then
open ${url}
fi
}
zle -N ghn_open
bindkey '^xgo' ghn_open
fi
しばらく使ってみます。