From 2e03812328bd2bd56f8d2d6a90bbcea5c843b73b Mon Sep 17 00:00:00 2001 From: lgoldfinch Date: Tue, 11 Feb 2025 16:43:34 +0000 Subject: [PATCH] PR feedback and the like --- .../jvm/src/main/scala/terminus/JLineTerminal.scala | 8 ++++---- .../shared/src/main/scala/terminus/Dimensions.scala | 6 ++++-- .../src/main/scala/terminus/effect/Dimensions.scala | 13 +++++++++++-- .../scala/terminus/effect/DimensionsSuite.scala | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/core/jvm/src/main/scala/terminus/JLineTerminal.scala b/core/jvm/src/main/scala/terminus/JLineTerminal.scala index 53c8773..ffe574b 100644 --- a/core/jvm/src/main/scala/terminus/JLineTerminal.scala +++ b/core/jvm/src/main/scala/terminus/JLineTerminal.scala @@ -18,7 +18,8 @@ package terminus import org.jline.terminal.{Size, TerminalBuilder, Terminal as JTerminal} import org.jline.utils.InfoCmp.Capability -import terminus.effect.Eof +import terminus.effect.{Eof, TerminalDimensions} +import TerminalDimensions.* class JLineTerminal(terminal: JTerminal) extends Terminal { private val reader = terminal.reader() @@ -49,10 +50,9 @@ class JLineTerminal(terminal: JTerminal) extends Terminal { // Do we need to consider getBufferSize? // Use getSize if in full screen mode? // Error handling? Do we want to just return a message detailing the issue? -// - def getDimensions: Unit = { + def getDimensions: effect.TerminalDimensions = { val terminalSize: Size = terminal.getSize - writer.write(terminalSize.toString) + terminalSize.fromJLineSize } def application[A](f: Terminal ?=> A): A = { diff --git a/core/shared/src/main/scala/terminus/Dimensions.scala b/core/shared/src/main/scala/terminus/Dimensions.scala index efe054a..a6daf0a 100644 --- a/core/shared/src/main/scala/terminus/Dimensions.scala +++ b/core/shared/src/main/scala/terminus/Dimensions.scala @@ -1,9 +1,11 @@ package terminus -/** Functionality for getting the dimensions of the terminal */ +import terminus.effect.TerminalDimensions + +/** Functionalities related to the dimensions of the terminal */ trait Dimensions { object dimensions { - def getDimensions: effect.Dimensions ?=> Unit = effect ?=> + def get: effect.Dimensions ?=> TerminalDimensions = effect ?=> effect.getDimensions } } diff --git a/core/shared/src/main/scala/terminus/effect/Dimensions.scala b/core/shared/src/main/scala/terminus/effect/Dimensions.scala index 0992e8f..da0cf5f 100644 --- a/core/shared/src/main/scala/terminus/effect/Dimensions.scala +++ b/core/shared/src/main/scala/terminus/effect/Dimensions.scala @@ -1,6 +1,15 @@ package terminus.effect -/** Functionality for getting the dimensions of the terminal */ +import org.jline.terminal.Size + +/** Functionalities related to the dimensions of the terminal */ trait Dimensions extends Writer { - def getDimensions: Unit + def getDimensions: TerminalDimensions } + +final case class TerminalDimensions(noOfColumns: Int, noOfRows: Int) + +object TerminalDimensions { + extension (size: Size) def fromJLineSize: TerminalDimensions = + TerminalDimensions(size.getColumns, size.getRows) +} \ No newline at end of file diff --git a/core/shared/src/test/scala/terminus/effect/DimensionsSuite.scala b/core/shared/src/test/scala/terminus/effect/DimensionsSuite.scala index b8506c8..53e4d61 100644 --- a/core/shared/src/test/scala/terminus/effect/DimensionsSuite.scala +++ b/core/shared/src/test/scala/terminus/effect/DimensionsSuite.scala @@ -10,7 +10,7 @@ class DimensionsSuite extends FunSuite { // readLine() never finishes executing JLineTerminal.run { readLine() - JLineTerminal.dimensions.getDimensions + JLineTerminal.dimensions.get JLineTerminal.flush() }