Bash 如何更改终端大小事件?
我正在开发一个Scala脚本,它在Bash脚本中运行(在Linux机器上)。为了拥有一个复杂的用户界面,我现在需要始终知道确切的终端大小 那么,如何获取终端窗口大小(行、列)更改事件?像mc(Midnight Commander)这样的程序似乎会立即对窗口大小的变化做出反应。我也想要这个:) 更新: 在larsks和Thomas Dickey的帮助下,我找到了一个解决方案,如下所示:Bash 如何更改终端大小事件?,bash,scala,terminal,Bash,Scala,Terminal,我正在开发一个Scala脚本,它在Bash脚本中运行(在Linux机器上)。为了拥有一个复杂的用户界面,我现在需要始终知道确切的终端大小 那么,如何获取终端窗口大小(行、列)更改事件?像mc(Midnight Commander)这样的程序似乎会立即对窗口大小的变化做出反应。我也想要这个:) 更新: 在larsks和Thomas Dickey的帮助下,我找到了一个解决方案,如下所示: import sun.misc.{Signal, SignalHandler} Signal.handle(n
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的同样简单的解决方案,我会更高兴:)当在X11下运行时,窗口大小的更改会导致向程序发送一个
SIGWINCH
信号。您需要安排使用Scala为信号处理提供的任何机制来响应此信号(可能是某种机制,但我不知道任何Scala)。SIGWINCH
独立于X11产生:
可能最早用于PostScript渲染系统),以及SIGWINCH
- (Telnet窗口大小选项)是另一个起点
SIGWINCH
。不管它的历史如何,它不仅仅是一个X11特性
在Java中,您可以用来捕获SIGWINCH
。Scala是Java的基础,但这提供了一个起点。例如,有几个Github项目可能对阅读以下内容很有用: