diff --git a/.gitignore b/.gitignore index 0fe4c39e5..a9190442a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ npm-debug.log .idea .bloop .metals +.bsp/ /project/metals.sbt diff --git a/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala b/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala index 06afd24a7..0155306c8 100644 --- a/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala +++ b/internal/util-collection/src/main/scala/sbt/internal/util/Util.scala @@ -64,6 +64,8 @@ object Util { lazy val isNonCygwinWindows: Boolean = isWindows && !isCygwin lazy val isCygwinWindows: Boolean = isWindows && isCygwin + lazy val isEmacs: Boolean = Option(System.getenv("INSIDE_EMACS")).isDefined + def nil[A]: List[A] = List.empty[A] def nilSeq[A]: Seq[A] = Seq.empty[A] def none[A]: Option[A] = (None: Option[A]) diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala index d7cca5535..dac378cdf 100644 --- a/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala +++ b/internal/util-logging/src/main/scala/sbt/internal/util/Terminal.scala @@ -317,7 +317,10 @@ object Terminal { props .map(_.color) .orElse(isColorEnabledProp) - .getOrElse(logFormatEnabled.getOrElse(true) && ((hasConsole && !isDumbTerminal) || isCI)) + .getOrElse( + logFormatEnabled + .getOrElse(true) && ((hasConsole && !isDumbTerminal) || isCI || Util.isEmacs) + ) } private[this] lazy val isColorEnabledProp: Option[Boolean] = sys.props.get("sbt.color").orElse(sys.props.get("sbt.colour")).flatMap(parseLogOption) @@ -867,7 +870,8 @@ object Terminal { .map(_.supershell) .getOrElse(System.getProperty("sbt.supershell") match { case null => - !(sys.env.contains("BUILD_NUMBER") || sys.env.contains("CI")) && isColorEnabled + !(sys.env.contains("BUILD_NUMBER") || sys.env + .contains("CI")) && isColorEnabled && !Util.isEmacs case "true" => true case _ => false }) diff --git a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala index 9ca556421..d6b376dac 100644 --- a/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala +++ b/main-command/src/main/scala/sbt/internal/client/NetworkClient.scala @@ -337,8 +337,13 @@ class NetworkClient( List(DashDashDetachStdio, DashDashServer) } + // https://github.com/sbt/sbt/issues/6271 + val nohup = + if (Util.isEmacs && !Util.isWindows) List("nohup") + else Nil + val processBuilder = - new ProcessBuilder(cmd: _*) + new ProcessBuilder((nohup ++ cmd): _*) .directory(arguments.baseDirectory) .redirectInput(Redirect.PIPE) processBuilder.environment.put(Terminal.TERMINAL_PROPS, props)