首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在触发绑定键后取消zle函数?

如何在触发绑定键后取消zle函数?
EN

Unix & Linux用户
提问于 2022-07-05 05:21:15
回答 1查看 52关注 0票数 0

希望你做得很好。

我的.zshrc中有以下内容:

代码语言:javascript
复制
# 1. invoke zoxide to pick dir
# 2. open target dir in ranger
# 3. when exiting ranger, cd into last dir
zoxide_to_ranger () {
    eval 'ranger "$(zoxide query -i)" --choosedir=$HOME/.rangerdir < $TTY'
    LASTDIR=$(< ~/.rangerdir)
    cd "$LASTDIR" || exit

    # ensure `precmds` are run after `cd`
    local precmd
    for precmd in $precmd_functions; do
      $precmd
    done
    zle reset-prompt
}

zle -N zoxide_to_ranger
bindkey '^f' zoxide_to_ranger

正如内联注释中所建议的那样,它是一个方便的工具,当我触发Ctrl-f时,它会提示我一个fzf菜单,在选择时它会在dir中打开游标符。

问题是,当我想通过按Esc取消选择时,它仍然会打开护林员并发送给我home dir,这不是我想要的。

因此,我的问题是,在触发bindkey之后,如何取消这样的zle函数?

配置:

zsh 5.9 (x86_64-pc-linux-gnu)

操作系统: Manjaro Linux

任何投入都是非常感谢的。谢谢您:)

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-07-05 12:39:29

eval线正在做几件事。可能太多了。一种方法是分离zoxide调用,并检查它是否返回了什么。另一种需要是检查~/.rangerdir中是否有目录(或其他什么),并在使用后清空该文件。这些新检查创建了函数必须清理和退出的多个点:

代码语言:javascript
复制
function zoxide_to_ranger {
  local zz; zz=$(zoxide query -i)
  [[ -z $zz ]] && { zle reset-prompt; return }

  # not sure if the 'eval' is necessary; does ranger ever exit with
  # shell commands to be run?
  ranger $zz --choosedir=~/.rangerdir < $TTY

  local dd; dd=$(< ~/.rangerdir)
  [[ -z $dd ]] && { zle reset-prompt; return }
  :> ~/.rangerdir

  # this could be "local" unless you use it elsewhere
  LASTDIR=$dd
  cd $LASTDIR || { zle reset-prompt; return }

  local precmd; for precmd in $precmd_functions; $precmd
  zle reset-prompt
}
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/708627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档