if which percol &> /dev/null; then
    function percol_select_history() {
        local tac
        which gtac &> /dev/null && tac="gtac" || { which tac &> /dev/null && tac="tac" || { tac="tail -r" } }
        BUFFER=$(fc -l -n 1 | eval $tac | percol --query "$LBUFFER")
        CURSOR=$#BUFFER
        zle -R -c
    }

    zle -N percol_select_history
    bindkey '^R' percol_select_history

    if which marks &> /dev/null; then
        function percol_select_marks() {
            BUFFER=$(marks | percol --query "$LBUFFER" | awk '{print $3}')
            CURSOR=$#BUFFER # move cursor
            zle -R -c       # refresh
        }
        zle -N percol_select_marks
        bindkey '^B' percol_select_marks
    fi
fi