Clean up lisp terminal code
This commit is contained in:
parent
3ec8e72a17
commit
24343b1543
|
@ -20,7 +20,10 @@ import java.util.concurrent.Executors
|
|||
|
||||
class LispTerminal(configuration: TerminalConfiguration) {
|
||||
|
||||
private val terminal = configuration.terminal!!
|
||||
private val terminal = configuration.terminal!!.apply {
|
||||
addResizeListener { _, _ -> resize() }
|
||||
}
|
||||
|
||||
private val inputWriter = SafeOutputStream(configuration.inputWriter)
|
||||
private val outputReader = SafeInputStream(configuration.outputReader)
|
||||
private val controlSequenceHandler = ControlSequenceHandler()
|
||||
|
@ -33,29 +36,8 @@ class LispTerminal(configuration: TerminalConfiguration) {
|
|||
private var originColumn = 0
|
||||
private var originRow = 0
|
||||
|
||||
private val leadingEdge: TerminalPosition
|
||||
@Synchronized get() {
|
||||
val inputLength = inputLine.length
|
||||
val totalColumns = terminalSize.columns
|
||||
val rowDifference = inputLength / totalColumns
|
||||
val columnDifference = inputLength % totalColumns
|
||||
|
||||
return TerminalPosition(originColumn + columnDifference, originRow + rowDifference)
|
||||
}
|
||||
|
||||
private val isBufferFilled: Boolean
|
||||
@Synchronized get() {
|
||||
val row = leadingEdge.row
|
||||
val column = leadingEdge.column
|
||||
|
||||
return row == terminalSize.rows - 1
|
||||
&& column >= terminalSize.columns - 1
|
||||
&& originRow <= 0
|
||||
}
|
||||
|
||||
init {
|
||||
setOriginToCurrentPosition()
|
||||
terminal.addResizeListener { _, _ -> resize() }
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
|
@ -88,7 +70,17 @@ class LispTerminal(configuration: TerminalConfiguration) {
|
|||
|
||||
@Synchronized
|
||||
private fun moveCursorToEndOfInput() {
|
||||
terminal.cursorPosition = leadingEdge
|
||||
terminal.cursorPosition = getLeadingEdge()
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
private fun getLeadingEdge(): TerminalPosition {
|
||||
val inputLength = inputLine.length
|
||||
val totalColumns = terminalSize.columns
|
||||
val rowDifference = inputLength / totalColumns
|
||||
val columnDifference = inputLength % totalColumns
|
||||
|
||||
return TerminalPosition(originColumn + columnDifference, originRow + rowDifference)
|
||||
}
|
||||
|
||||
fun start() {
|
||||
|
@ -363,13 +355,20 @@ class LispTerminal(configuration: TerminalConfiguration) {
|
|||
private fun doCharacter(character: Char) {
|
||||
val cursorPosition = terminal.cursorPosition
|
||||
|
||||
if (!isBufferFilled)
|
||||
if (!isBufferFilled())
|
||||
if (isPossibleToMoveRight(cursorPosition))
|
||||
insertCharacter(character, cursorPosition)
|
||||
else
|
||||
appendCharacter(character, cursorPosition)
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
private fun isBufferFilled() = getLeadingEdge().let { leadingEdge ->
|
||||
leadingEdge.row == terminalSize.rows - 1
|
||||
&& leadingEdge.column >= terminalSize.columns - 1
|
||||
&& originRow <= 0
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
private fun insertCharacter(character: Char, cursorPosition: TerminalPosition) {
|
||||
val shiftedPosition = shiftPositionIfNewRowAdded(cursorPosition)
|
||||
|
@ -385,7 +384,7 @@ class LispTerminal(configuration: TerminalConfiguration) {
|
|||
@Synchronized
|
||||
private fun shiftPositionIfNewRowAdded(cursorPosition: TerminalPosition): TerminalPosition {
|
||||
val oldOriginRow = originRow
|
||||
moveCursorRight(leadingEdge)
|
||||
moveCursorRight(getLeadingEdge())
|
||||
|
||||
return if (isNewRowAdded(oldOriginRow)) adjustCursorPosition(cursorPosition) else cursorPosition
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue