Reimplement __zoxide_hooked using SHLVL

This commit is contained in:
Ajeet D'Souza 2021-09-04 15:33:07 +05:30
parent d65b0021b3
commit 89ce75724d
1 changed files with 23 additions and 18 deletions

View File

@ -21,20 +21,25 @@ fn __zoxide_cd [path]{
# #
# Initialize hook to track previous directory. # Initialize hook to track previous directory.
__zoxide_oldpwd = $pwd var oldpwd = $builtin:pwd
before-chdir = [$@before-chdir [_]{ edit:add-var __zoxide_oldpwd $pwd }] set builtin:before-chdir = [$@builtin:before-chdir [_]{ edit:add-var oldpwd $builtin:pwd }]
{#- __zoxide_hooked requires https://github.com/elves/elvish/issues/1395 #}
# Initialize hook to add directories to zoxide. # Initialize hook to add directories to zoxide.
var shlvl = $E:SHLVL
if (builtin:eq $shlvl "") {
set shlvl = 0
}
if (builtin:not (builtin:eq $E:__zoxide_hooked_elvish $shlvl)) {
set E:__zoxide_hooked_elvish = $shlvl
{%- match hook %} {%- match hook %}
{%- when InitHook::None %} {%- when InitHook::None %}
{{ not_configured }} {{ not_configured }}
{%- when InitHook::Prompt %} {%- when InitHook::Prompt %}
edit:before-readline = [$@edit:before-readline []{ zoxide add -- $pwd }] set edit:before-readline = [$@edit:before-readline []{ zoxide add -- $pwd }]
{%- when InitHook::Pwd %} {%- when InitHook::Pwd %}
after-chdir = [$@after-chdir [_]{ zoxide add -- $pwd }] set builtin:after-chdir = [$@builtin:after-chdir [_]{ zoxide add -- $pwd }]
{%- endmatch %} {%- endmatch %}
}
{{ section }} {{ section }}
# When using zoxide with --no-aliases, alias these internal functions as # When using zoxide with --no-aliases, alias these internal functions as
@ -46,13 +51,13 @@ fn __zoxide_z [@rest]{
if (builtin:eq [] $rest) { if (builtin:eq [] $rest) {
__zoxide_cd ~ __zoxide_cd ~
} elif (builtin:eq [-] $rest) { } elif (builtin:eq [-] $rest) {
__zoxide_cd $__zoxide_oldpwd __zoxide_cd $oldpwd
} elif (and ('builtin:==' (builtin:count $rest) 1) (path:is-dir &follow-symlink=$true $rest[0])) { } elif (and ('builtin:==' (builtin:count $rest) 1) (path:is-dir &follow-symlink=$true $rest[0])) {
__zoxide_cd $rest[0] __zoxide_cd $rest[0]
} else { } else {
var path var path
try { try {
path = (zoxide query --exclude $pwd -- $@rest) set path = (zoxide query --exclude $pwd -- $@rest)
} except { } except {
} else { } else {
__zoxide_cd $path __zoxide_cd $path
@ -65,7 +70,7 @@ edit:add-var __zoxide_z~ $__zoxide_z~
fn __zoxide_zi [@rest]{ fn __zoxide_zi [@rest]{
var path var path
try { try {
path = (zoxide query -i -- $@rest) set path = (zoxide query -i -- $@rest)
} except { } except {
} else { } else {
__zoxide_cd $path __zoxide_cd $path
@ -86,19 +91,19 @@ edit:add-var {{cmd}}i~ $__zoxide_zi~
# Load completions. # Load completions.
{# zoxide-based completions are currently not possible, because Elvish only {# zoxide-based completions are currently not possible, because Elvish only
# prints a completion if the current token is a prefix of it. -#} # prints a completion if the current token is a prefix of it. -#}
fn __zoxide_z_complete [@args]{ fn __zoxide_z_complete [@rest]{
if (!= (count $args) 2) { if (!= (builtin:count $rest) 2) {
return builtin:return
} }
edit:complete-filename $args[1] | edit:complete-filename $rest[1] |
each [c]{ builtin:each [completion]{
dir = $c[stem] var dir = $completion[stem]
if (path:is-dir $dir) { if (path:is-dir $dir) {
put $dir builtin:put $dir
} }
} }
} }
edit:completion:arg-completer[{{cmd}}] = $__zoxide_z_complete~ set edit:completion:arg-completer[{{cmd}}] = $__zoxide_z_complete~
{%- when None %} {%- when None %}