【发布时间】:2015-07-23 17:33:30
【问题描述】:
我正在开发一个在 Bash 脚本中运行的 Scala 脚本(在 Linux 机器上)。为了拥有复杂的用户界面,我现在总是需要准确的终端尺寸。
那么如何获取终端窗口大小(行、列)更改事件?像 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");
}
}
不利的一面是,它依赖于 sun.misc 类。如果有人向我展示一个没有 sun.misc 的同样简单的解决方案,那会更开心:)
【问题讨论】:
-
由于 scala 是 java,我会指点你 stackoverflow.com/questions/1286461/…
-
在 Bash 中 export COLUMNS 之后,我可以在 Scala 中执行 sys.env("COLUMNS")。但该值仅反映 VM 启动时的情况。这没有帮助。那么像mc(午夜指挥官)这样的程序是如何做到的呢?
-
好吧,我对“午夜指挥官”一无所知,您是否知道该程序是否在 Java 上运行?如果是这样,看看他们是怎么做的(如果你能找到他们的代码)。如果它在 C/C++ 中,您也许可以将他们的技术与 JNI 一起使用以使用他们自己的方法。