備忘録

いろいろ忘れないためのブログ

percol の追加機能いろいろ

| Comments

percol が粛々とアップデートされているので、追加機能をいろいろ紹介します。ほと んどのことが README.md に書いてあるので、詳しくはそちらを。

percol 起動中のトグル操作

--match-method オプションでマッチメソッドを変更できますが、percol が起動中に もマッチメソッドが変更できるようになりました。また大文字小文字を考慮するかも切 り替えられるようになりました。

toggle_finder() というコマンドを使うと、現在のマッチメソッドと指定したマッチ メソッドをトグルできます。 toggle_case_sensitive() で大文字小文字の考慮をト グルです。README に書いてある ~/.percol.d/rc.py の設定例は以下。

from percol.finder import FinderMultiQueryMigemo, FinderMultiQueryRegex
percol.import_keymap({
    "M-c" : lambda percol: percol.command.toggle_case_sensitive(),
    "M-m" : lambda percol: percol.command.toggle_finder(FinderMultiQueryMigemo),
    "M-r" : lambda percol: percol.command.toggle_finder(FinderMultiQueryRegex)
})

自分は regex <-> string のトグルと、migemo <-> string のトグルをして欲しかった ので、自分で toggle_two_finders() というコマンドを作りました。 percol/command.py に toggle_finder() を真似して

を追記し、percol を再インストールして rc.py を以下のように設定しています。

from percol.finder import FinderMultiQueryString, FinderMultiQueryMigemo, FinderMultiQueryRegex
percol.import_keymap({
    "M-c" : lambda percol: percol.command.toggle_case_sensitive(),
    "M-m" : lambda percol: percol.command.toggle_two_finders(FinderMultiQueryMigemo, FinderMultiQueryString),
    "M-r" : lambda percol: percol.command.toggle_two_finders(FinderMultiQueryRegex, FinderMultiQueryString)
})

これでだいぶ Emacs ライクな操作性になりました。migemo のトグルは C-e かと思っ てましたが、最近の migemo.el は M-m になってるらしいので、M-m にした。

プロンプトのカスタマイズ

プロンプト文字がカスタマイズできるようになりました。多分もとからできたんだと 思いますが、README に新たに追加されたので紹介。

PROMPT が左のプロンプト、 RPROMPT が右のプロンプトを表しています。クラス内 の変数に応じてプロンプトを変更したり、自分独自の format specifier を定義したり できます。自分の設定はこのようになっています。README の設定とほぼ同じです。

# Change PROMPT in response to the status of case sensitivity
percol.view.__class__.PROMPT = property(
    lambda self:
    ur"<bold><cyan>QUERY </cyan>[a]:</bold> %q" if percol.model.finder.case_insensitive
    else ur"<bold><yellow>QUERY </yellow>[A]:</bold> %q"
)
# Display finder name in RPROMPT
percol.view.prompt_replacees["F"] = lambda self, **args: self.model.finder.get_name()
percol.view.RPROMPT = ur"\<%F\> (%i/%I) [%n/%N]"

この設定でプロンプトはこうなります。

percol_prompt_example.png

[a] の部分で大文字小文字の考慮が、~<string>~ の部分で現在のマッチメソッドが わかります。これでがんがんトグルできます。他にも文字色や背景色の変更や装飾もで きるので、自分好みにカスタマイズしましょう。

日本語を含む履歴検索

percol を一番利用しているのが zsh の履歴検索なんですが、日本語が文字化けしてし まうのが難点でした。最近 history コマンドをつかうと、ちゃんと日本語が含まれた コマンドも参照できることに気づきました。

そして percol の README もいつの間にか history コマンドを使うようになってまし た。なのでそのまま引用します。

function exists { which $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=$(history -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
fi

これを .zshrc に追加して、履歴検索するとこうなります。

percol_history_search_japanese.png

ばっちり日本語も表示できています。これで履歴検索は完璧ですね。

その他もろもろ

あとは自分があまり理解してなかったり、試してないのでさらっと。

  • PyPI からインストールできるようになりました。PyPI は python のパッケージ管理 システムなんですよね?
  • Lazy Array での検索が可能になりました。。Lazy Array がよくわかってないですが、 全部の候補を検索してから表示するのではなく、候補を検索したはしから順々に表示 されるってこといいんですかね? 候補数が正確に表示されない代わりに、パフォー マンスの向上が狙えるようです。デフォルトで有効になるので、無効にしたい場合は --eager オプションをつけましょう。

おわりに

少しずつ percol が便利になってます。あとは percol のクエリを履歴に保存しておく 機能があると非常に便利そう。んで M-pM-n で参照できると。熟練の pythonista なら実装してくれるはず…|д゚)チラッチラッ

もっとユーザーが増えて、もっとハックされていくといいですね。みんなでもっと percol を使いましょう!

Comments