Browse Source

refactor(percol): fix style, bind keys for vi-mode and remove dependencies

Marc Cornellà 2 years ago
parent
commit
90903779b9
2 changed files with 35 additions and 29 deletions
  1. 13 10
      plugins/percol/README.md
  2. 22 19
      plugins/percol/percol.plugin.zsh

+ 13 - 10
plugins/percol/README.md

@@ -1,20 +1,23 @@
-## percol
+# percol
 
-Provides some useful function to make [percol](https://github.com/mooz/percol) work with zsh history and [jump plugin](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/jump/jump.plugin.zsh)
+Provides some useful function to make [percol](https://github.com/mooz/percol) work with zsh history and
+the [jump plugin](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/jump), optionally.
 
-### Requirements
+To use it, add `percol` to the plugins array in your zshrc:
 
-```shell
-pip install percol
+```zsh
+plugins=(... percol)
 ```
 
-And [jump](https://github.com/ohmyzsh/ohmyzsh/blob/master/plugins/jump/jump.plugin.zsh) for `oh-my-zsh` is a optional requirement.
+## Requirements
 
-### Usage
+- `percol`: install with `pip install percol`.
 
-For default
+- (_Optional_) [`jump`](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/jump) plugin: needs to be
+  enabled before the `percol` plugin.
 
-- `^-r` bind to `percol_select_history`.You can use it to grep your history with percol.
+## Usage
 
-- `^-b` bind to `percol_select_marks`.You can use it to grep your bookmarks with percol.
+- <kbd>CTRL-R</kbd> (bound to `percol_select_history`): you can use it to grep your history with percol.
 
+- <kbd>CTRL-B</kbd> (bound to `percol_select_marks`): you can use it to grep your jump bookmarks with percol.

+ 22 - 19
plugins/percol/percol.plugin.zsh

@@ -1,22 +1,25 @@
-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
-    }
+(( ${+commands[percol]} )) || return
 
-    zle -N percol_select_history
-    bindkey '^R' percol_select_history
+function percol_select_history() {
+  # print history in reverse order (from -1 (latest) to 1 (oldest))
+  BUFFER=$(fc -l -n -1 1 | percol --query "$LBUFFER")
+  CURSOR=$#BUFFER
+  zle -R -c
+}
+zle -N percol_select_history
+bindkey -M emacs '^R' percol_select_history
+bindkey -M viins '^R' percol_select_history
+bindkey -M vicmd '^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
+if (( ${+functions[marks]} )); then
+  function percol_select_marks() {
+    # parse directory from marks output (markname -> path) and quote if necessary
+    BUFFER=${(q)"$(marks | percol --query "$LBUFFER")"##*-> }
+    CURSOR=$#BUFFER
+    zle -R -c
+  }
+  zle -N percol_select_marks
+  bindkey -M emacs '^B' percol_select_marks
+  bindkey -M viins '^B' percol_select_marks
+  bindkey -M vicmd '^B' percol_select_marks
 fi