终端多路复用器如何为基于 S-Lang 的控制台应用程序欺骗键盘输入?
How do terminal multiplexers spoof keyboard input for S-Lang-based console apps?
我正在尝试将控制台应用程序包装到合成环境中,就像我通过多路复用器所做的那样。但我注意到像 mc
(午夜指挥官)这样使用 S-Lang 库编写的应用程序能够获得部分键盘状态,即使它们的 stdin
没有附加到 TTY。
例如,cat /dev/zero|/usr/bin/mc
完全不影响应用程序的可操作性。
我试图了解 mc 在 tmux 中是如何工作的,但我找不到这三个组件(mc、tmux 和 slang)的代码中魔法发生的地方。
问题是我如何以编程方式启动像 mc
这样的应用程序,以便我能够通过文件描述符与其交互,而实际的标准输入根本无法用于该应用程序?
他们正在检查他们的标准输入是否来自终端,使用isatty
,如果没有关闭输入,重新打开 /dev/tty
.
除非应用程序采用这种方法采取特殊操作,否则管道输入将丢失。例如,它可以将数据读入缓冲区并用它做一些有用的事情。
我正在尝试将控制台应用程序包装到合成环境中,就像我通过多路复用器所做的那样。但我注意到像 mc
(午夜指挥官)这样使用 S-Lang 库编写的应用程序能够获得部分键盘状态,即使它们的 stdin
没有附加到 TTY。
例如,cat /dev/zero|/usr/bin/mc
完全不影响应用程序的可操作性。
我试图了解 mc 在 tmux 中是如何工作的,但我找不到这三个组件(mc、tmux 和 slang)的代码中魔法发生的地方。
问题是我如何以编程方式启动像 mc
这样的应用程序,以便我能够通过文件描述符与其交互,而实际的标准输入根本无法用于该应用程序?
他们正在检查他们的标准输入是否来自终端,使用isatty
,如果没有关闭输入,重新打开 /dev/tty
.
除非应用程序采用这种方法采取特殊操作,否则管道输入将丢失。例如,它可以将数据读入缓冲区并用它做一些有用的事情。