intellij 嵌入式终端与 byobu 共享缓冲区

intellij 嵌入式终端与 byobu 共享缓冲区

我用了使 Byobu 在终端启动时运行。但是,当我在 IntelliJ 中打开嵌入式终端时,它会执行相同的操作并使用相同的缓冲区。这导致嵌入式终端如下所示: 在此处输入图片描述

我的常规终端如下所示: 利日杰

无论您修改哪个,文本和可视区域的大小都是相同的,因此它们肯定使用相同的缓冲区。

有没有办法让 IntelliJ 中的嵌入式终端不打开 Byobu?也许是线路设置上的某种条件_byobu_sourced会检查调用它的实体?

编辑:从技术上讲,这属于 AskDifferent,因为我是在 Mac 上执行此操作,但这个想法仍然适用于 Ubuntu 和 Mac。此外,AskUbuntu 上的用户更有可能遇到此问题,因为使用 Byobu 的 Ubuntu 用户比 Mac OS 用户多得多。由于这种差异,您的情况可能略有不同。

答案1

以下解决方案仅在某些情况下有效。但是,我发现 IntelliJ 在创建新 shell 时会在jediterm-bash.innamed中创建一个局部变量。在 Ubuntu 和 Mac 中分别__INTELLIJ_COMMAND_HISTFILE__添加以下内容可获得所需的结果:.bashrc.bash_profile

if [[ -z "$(env | grep __INTELLIJ_COMMAND_HISTFILE__)" ]]; then
    _byobu_sourced=1 . /usr/local/Cellar/byobu/5.129/bin/byobu-launch 2>/dev/null || true
fi

旧答案:

我发现的一个解决方案是捕获当前正在获取我的 的进程的 pid .bashrc。我使用它并将其与我确定为打开的终端的 shell pid 进行比较,以有条件地执行该_byobu_sourced行。它对我来说看起来是这样的:

intellij_pid=$(ps | grep 'bash' | grep 'IntelliJ' | awk '{print $1}' | head -n 1)
bash_pid=$(ps | grep '/bin/bash' | grep -v 'color' | grep -v 'IntelliJ'| awk '{print $1}' | head -n 1)

# if we're spawning a regular shell then connect to byobu, otherwise it's probably intellij or some other process so open a normal shell
if [[ "$$" == "$bash_pid" ]]; then
    echo "byobu shell sourcing"
    _byobu_sourced=1 . /usr/local/Cellar/byobu/5.129/bin/byobu-launch 2>/dev/null || true
elif    [[ "$$" == "$intellij_pid" ]]; then
    echo "IntelliJ shell spawning"
else
    echo "some other shell spawning?"
fi

结果是只在我的常规终端中运行 byobu,当源进程是 IntelliJ 或任何其他进程时跳过该行

相关内容