如何通过窗口管理器按键绑定在上次使用的终端的同一目录中打开一个新终端?

如何通过窗口管理器按键绑定在上次使用的终端的同一目录中打开一个新终端?

我正在使用平铺窗口管理器,并从gnome-terminal使用多个选项卡切换到urxvt由窗口管理器管理的多个实例。我怀念的功能之一是能够打开一个新终端,默认为上一个终端的工作目录。

简而言之:我需要一种方法来打开一个新的 urxvt (bash),默认为上次使用的 $PWD。

我想到的唯一解决方案是保存每个路径的当前路径,cd如下所示:

echo $PWD > ~/.last_dir

并以这种方式恢复新终端上的路径:

cd `cat ~/.last_dir`

我可以获取第二个命令,.bashrc但我不知道如何在每次目录更改时执行第一个命令:)

欢迎任何不涉及screen或使用的更简单的解决方案。tmux

答案1

我目前正在使用#1 解决方案的这个版本

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

在我里面.zshrc

答案2

这实际上是很微不足道的;如果您urxvt从现有urxvt窗口中运行,新窗口将位于同一目录中。为此,我使用了dup别名。urxvt &如果你想将它绑定到热键,你可以使用 bash 的bind命令。例如,将其绑定到F1

$ bind '"\e[11~": "urxvt &\n"'

答案3

我看到三种使用.last_dir.您可以放置echo $PWD > ~/.last_dir​​:

  1. 在一个特殊的函数中,它是以下内容的包装器cd

    function cd_
    {
      [[ -d "$@" ]] || return 1
      echo "$@" > ~/.last_dir
      cd "$@"
    }
    

    将其放入您的目录中~/.bashrc,然后cd_在每次您想要存储新工作目录时使用它来代替 cd。

  2. 在你的$PROMPT_COMMAND不建议):

    PROMPT_COMMAND="$PROMPT_COMMAND; pwd > ~/.last_dir"
    

    您可以直接从终端测试它或将其放入~/.bashrc.然而,此解决方案每次出现提示时都会触发磁盘写入,这可能会导致麻烦 - 但另一方面,.last_dir无论您如何到达那里,都会包含当前目录。

  3. 在一个定制的Perl 扩展脚本为了rxvt。我自己从未创建过,但您可以在网上找到很多示例。

答案4

当然,这是修改cd行为的一种可行方法,但我想展示一个更简单的解决方案。在里面男人狂欢(1)我发现如果有互动~/.bash_logout如果存在则退出并运行。因此,不必在每次调用最后一个路径时都存储路径,而是cd可以在退出时保存路径。

我的~/.bash_logout很简单:

echo $PWD >~/.lastdir

我在我的某个地方.bashrc放置了这一行:

[ -r ~/.lastdir ] && cd $(<~/.lastdir)

相关内容