使用与前一个窗口相同的目录生成新的终端窗口

use*_*904 8 linux bash shell-script gnome-terminal awesome

我正在使用 Gnome 终端和默认 bash 在最新的 Arch Linux 上运行 Awesome WM。我已经设法让这个工作,但我想知道这个实现是否有可能进行任何形式的改进。这个问题确实涉及开放新的选项卡,只与真棒WM产生新的终端窗口。

我已经重写了“cd”命令以将当前工作目录保存在“.cd_extend”文件中:

~/.bashrc

alias cd='source ~/.cd_extend'
Run Code Online (Sandbox Code Playgroud)

~/.cd_extend

#!/bin/bash

command cd $1
echo $(pwd) > ~/.terminal_directory
Run Code Online (Sandbox Code Playgroud)

当我生成一个新终端时,“.terminal_directory”被读取并作为参数附加到 gnome 终端的“--working-directory”标志。

~/.dotfiles/open_terminal.sh

#!/bin/bash

DIR=$(cat ~/.terminal_directory)
gnome-terminal --working-directory=$DIR
Run Code Online (Sandbox Code Playgroud)

awesomewm rc.lua

terminal   = "~/.dotfiles/open_terminal.sh"
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end)
Run Code Online (Sandbox Code Playgroud)

我想知道我是否错过了任何可以简化这一点的内部 bash 功能,以及是否有改进的余地。

Tho*_*gel 9

在 Arch Linux + GNOME 上(至少),您可以添加以下行~/.bashrc以在当前目录中打开新的终端窗口:

source /etc/profile.d/vte.sh
Run Code Online (Sandbox Code Playgroud)

已经有一个关于新标签的相关问题。事实证明,对于新窗口来说,答案是相同的。

  • 目前尚不清楚这如何回答这个问题。这是做什么的?请不要在评论中回复;[编辑]您的答案,使其更清晰、更完整(即解释如何回答问题)。 (2认同)

ImH*_*ere 5

在 Gnome-terminal 的菜单中,使用:

File --> Open Terminal 
Run Code Online (Sandbox Code Playgroud)

这将使用 pwd 作为目录打开一个新窗口。

此外,您可以设置打开的标签:

编辑 --> 首选项 --> 常规 --> 在以下位置打开新终端: --> 选择选项卡。

因此,新终端将在同一窗口中以相同的密码打开。
如果需要,您仍然可以打开新窗口:

Alt-F2 --> gnome-终端


use*_*904 2

经过几天的测试和询问,这似乎是最简单的实现。它可以通过 Awesome WM 读取的全局状态来完成,但是为了保持可预测性和易于实施,我保留了它。

~/.bashrc

function cd {
  command cd "$1"
  pwd > /tmp/terminal_pwd
}
Run Code Online (Sandbox Code Playgroud)

之后我可以打开终端,它从/tmp/terminal_pwd文件中读取并使用给定的工作目录打开一个新的 gnome shell。

很棒的 WM - rc.lua

 -- Terminal
  awful.key({ modkey, }, 'Return',
    function()
      awful.spawn.easy_async_with_shell(
        "if [[ -s /tmp/terminal_pwd ]]; then cat /tmp/terminal_pwd; else echo '~'; fi",
        function(path)
          awful.spawn.easy_async_with_shell('gnome-terminal --working-directory '..path, function() end)
        end)
    end),
Run Code Online (Sandbox Code Playgroud)