From 816208f081eefad63a0d8914cdb9bbb9a349742a Mon Sep 17 00:00:00 2001 From: Sam Halliday Date: Thu, 21 Jan 2021 10:33:44 +0000 Subject: [PATCH 1/3] Terminal support for GNU Emacs --- .../src/main/scala/sbt/internal/util/Util.scala | 2 ++ .../src/main/scala/sbt/internal/util/Terminal.scala | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) 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 }) From bb8b097f5a4eeb70d5724ab74fcdfd5942a635e0 Mon Sep 17 00:00:00 2001 From: Sam Halliday Date: Thu, 21 Jan 2021 10:34:48 +0000 Subject: [PATCH 2/3] git ignore .bsp --- .gitignore | 1 + 1 file changed, 1 insertion(+) 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 From 88baafa034cafb0ceeb3cd1d51a9168db336185a Mon Sep 17 00:00:00 2001 From: Sam Halliday Date: Thu, 21 Jan 2021 10:51:00 +0000 Subject: [PATCH 3/3] nohup the server from GNU Emacs --- .../src/main/scala/sbt/internal/client/NetworkClient.scala | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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)