我正在开发一个运行在Bash脚本(在Linux机器上)的Scala脚本。为了拥有复杂的用户界面,我现在需要始终确切的终端大小。
那么如何才能让终端窗口大小(行,列)改变事件?像mc(Midnight Commander)这样的程序似乎对窗口大小的变化做出了立即的反应。我也想要这个:))
更新 在 larsks 和 Thomas Dickey 的帮助下,我找到了一个解决方案,如下所示:
import sun.misc.{Signal, SignalHandler}
Signal.handle(new Signal("WINCH"), TerminalSizeChangedHandler)
object TerminalSizeChangedHandler extends SignalHandler
{
override def handle(sig: Signal)
{
println("terminal size changed");
}
}
该dowside,它依赖于sun.misc类。如果有人在没有sun.misc的情况下向我展示了一个同样简单的解决方案,那将会更加快乐:)
答案 0 :(得分:2)
在X11下运行时,窗口大小更改应导致向您的程序发送SIGWINCH
信号。您需要安排使用Scala为信号处理提供的任何机制来响应此信号(可能是like this,但我不知道任何Scala)。
答案 1 :(得分:0)
SIGWINCH
独立于X11:
尽管如此,X10R4(1986年12月)在xterm中使用了SIGWINCH
。无论它的历史如何,它都不仅仅是X11的特色。
在Java中,您可以使用POSIXSignalHandler来捕获SIGWINCH
。 Scala是Java的not identical,但这提供了一个起点。例如,有一些Github项目可能很有用: