読者です 読者をやめる 読者になる 読者になる

計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

percolのインストールと設定

Python zsh Linux

percol

Pythonで書かれたツールコマンドラインEmacsのanything的なことができる

mooz/percol · GitHub

インストール

pipですぐインストールできる。pipのインストールはこっちに書いた

管理者権限のない環境でpipを使えるようにしてPython環境を整える - 計算物理屋の研究備忘録

管理者権限ありで、デフォルトの位置にインストールする場合は

$ pip install  percol

管理者権限なしで、例えば~/localにインストールする場合は

$ pip install --install-option="--prefix=$HOME/local" percol

設定

キーバインド

Emacsライクなキーバインドの設定例が公式サイトに載っているのでそのままとってくる。~/.percol.d/rc.pyに以下の様に書く

# 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(),
})

コマンド履歴の絞り込み検索

これも公式の設定例に書いてあるのでそのまま.zhsrcとかにコピーすればOK。C-rで使える。

#----- history search with percol
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=$(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
fi

cdrと連携してディレクトリ移動

これが一番便利で、一番多用する機能。

まず、zshcdrを使えるようにしておく

zshのcdrの設定 - 計算物理屋の研究備忘録

次にpercolの設定を.zshrcなどに書く
ここを参考にする

percolで最近行ったdirectoryにcdするやつを書きました - $shibayu36->blog;

ただしキーバインドはanythingでも使っているC-x bに変えた

.zshrc

#----- percol-cdr
#function exists { which $1 &> /dev/null }
if exists percol; then
   function percol-cdr () {
       local selected_dir=$(cdr -l | awk '{ print $2 }' | percol --query "$LBUFFER")
       if [ -n "$selected_dir" ]; then
           BUFFER="cd ${selected_dir}"
           zle accept-line
       fi
       zle clear-screen
   }
zle -N percol-cdr
bindkey '^xb' percol-cdr
fi