Merge pull request #101 from alxbl/omzsh-plugin

Thanks for making this project, it's really cool! I'd been looking for something like this for a while.
I noticed that your shell widget is pretty much stand-alone and I wanted to be able to use navi directly as an [oh-my-zsh][1] plugin, so I added a few things to the widget and moved it to the root of the repository so that the repo can be cloned straight into the `plugins` folder and detected when added in the plugin array.

I think it should be similarly simple with `fish`, but I'm not too familiar with that shell, so I'll leave it to someone else. The `navi.plugin.zsh` file should still be sourcable as a widget for people not using oh-my-zsh, so technically the `shell/` directory could be removed and `navi widget`updated to use the new file.

## What's included
- oh-my-zsh plugin
- install documentation
- no PATH modification required when used with OMZ
- Added bonus: #51 is kind of unofficially addressed by this (assuming one uses OMZ)

## Future Work
- Pre-filter using `$BUFFER` when hitting `Alt+G` to get something similar to `navi query`
- Update `navi widget zsh` to use `navi.plugin.zsh`

Let me know what you think. I'm working on a few cheatsheets, and will open PRs for those as they become ready.

Cheers,
Alex

[1]: https://github.com/robbyrussell/oh-my-zsh
This commit is contained in:
Denis Isidoro 2019-10-02 10:13:48 -03:00 committed by GitHub
commit d9a7486eb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 14 deletions

View File

@ -52,12 +52,39 @@ brew install denisidoro/tools/navi
Alternatively, you can `git clone` this repository and run `make`:
```sh
git clone --depth 1 http://github.com/denisidoro/navi /opt/navi
git clone --depth 1 https://github.com/denisidoro/navi /opt/navi
cd /opt/navi
sudo make install
# install fzf: https://github.com/junegunn/fzf
```
### Using oh-my-zsh
Make sure that your oh-my-zsh `$ZSH_CUSTOM` directory is configured, then clone navi into the plugins directory.
```sh
export ZSH_CUSTOM='/path/to/.zsh'
plugins_dir="$ZSH_CUSTOM/plugins"
mkdir -p "$plugins_dir"
cd "$plugins_dir"
git clone https://github.com/denisidoro/navi
```
Then, add it to the oh-my-zsh plugin array:
```
# Sample ~/.zshrc
ZSHCFG="$HOME/.zsh"
ZSH="$ZSHCFG/oh-my-zsh"
ZSH_CUSTOM="$ZSHCFG"
plugins=(docker tmux fzf navi)
# ...
source "$ZSH/oh-my-zsh.sh"
```
Finally, you can use it as a [shell widget](#shell-widget).
This method has the advantage of not requiring root to install and disadvantage of not allowing you to invoke the script by calling `navi` (unless you add an alias to it or copy it to a folder in `$PATH`).
Upgrading
---------
@ -65,6 +92,7 @@ Upgrading
- brew: `brew update; brew reinstall navi`
- git: `cd /opt/navi && sudo make update`
- oh-my-zsh: `cd "$(navi home)" && git pull`
Usage
-----

13
navi.plugin.zsh Normal file
View File

@ -0,0 +1,13 @@
local _navi_path=$(dirname $0:A)
_call_navi() {
local buff="$BUFFER"
zle kill-whole-line
local cmd="$(NAVI_USE_FZF_ALL_INPUTS=true $_navi_path/navi --print <> /dev/tty)"
zle -U "${buff}${cmd}"
# zle accept-line
}
zle -N _call_navi
bindkey '\eg' _call_navi

View File

@ -1,11 +0,0 @@
_call_navi() {
local buff="$BUFFER"
zle kill-whole-line
local cmd="$(NAVI_USE_FZF_ALL_INPUTS=true navi --print <> /dev/tty)"
zle -U "${buff}${cmd}"
# zle accept-line
}
zle -N _call_navi
bindkey '\eg' _call_navi

View File

@ -97,7 +97,7 @@ handler::widget() {
local widget
case "$SH" in
zsh) widget="${SCRIPT_DIR}/shell/widget.zsh" ;;
zsh) widget="${SCRIPT_DIR}/navi.plugin.zsh" ;;
*) echoerr "Invalid shell: $SH"; exit 1 ;;
esac
@ -144,4 +144,4 @@ main() {
handler::main
;;
esac
}
}