如何在 GNU 屏幕中设置“字符发送延迟”? (就像迷你电脑一样)

如何在 GNU 屏幕中设置“字符发送延迟”? (就像迷你电脑一样)

Minicom 有一个有用的设置,称为“字符发送延迟”:

迷你电脑截图

GNU 屏幕也有类似的设置吗?

答案1

我不是screen专家,所以可能有更好的解决方案,但这对您来说可能已经足够了。slowpaste仅适用于paste命令,但可以使用xsel将当前X11选择复制到文件,然后使用屏幕readreg命令将该文件读入寄存器。最后,paste可以粘贴寄存器的内容。以下内容~/.screenrc对我有用:

defslowpaste 100
bindkey ^v exec sh -c 'xsel -o >/tmp/sel; screen -X eval "readreg p /tmp/sel" "paste p"'

使用slowpaste和 以毫秒为单位的每字符延迟似乎在此启动文件中不起作用,因为还没有当前窗口,但设置默认值效果defslowpaste很好。

这会将control-v密钥绑定到包含 2 个命令的 shell 脚本。第一个运行xsel -o将 X11 选择放入文件中/tmp/sel。第二个使用 2 个内置命令调用 screen: readreg将文件读入寄存器p,并使 paste字符以 100 毫秒的延迟出现。

这使用了 Stéphane Chazelas 的信息回答关于exec立即返回,因此您不能将eval其与其他命令链接起来;答案还解释了如何使用默认的exec“fdpat”,例如,...现在可以xsel用 a替换cat,并读取用户的输入直到文件结尾control-D

答案2

似乎没有一般的 TX 延迟。但是,对于使用命令粘贴文本pastescreen有一个slowpaste设置:

命令:slowpaste 毫秒

命令:defslowpaste 毫秒

(没有任何)

定义通过粘贴命令将文本插入当前窗口的速度。如果 Slowpaste 值非零,则会逐字符写入文本。每次写入后,屏幕将暂停 msec 毫秒,以允许应用程序处理输入。仅当您的底层系统在粘贴大量文本时暴露出流量控制问题时,才使用 Slowpaste。 defslowpaste 指定新窗口的默认值。

来源:https://www.gnu.org/software/screen/manual/screen.html

您可以将以下行添加到您的文件中,.screenrc以获得来自 stdin 的输入的“慢粘贴模式”:

bindkey ^V exec ... sh -c 'cat >"$HOME/.screen-slowpaste.tmp" && screen -S "$STY" -X eval "slowpaste 1" "readreg p \"$HOME/.screen-slowpaste.tmp\"" "paste p"'

它的工作原理是注册一个新的键绑定,CTRLV用于cat侦听来自 stdin 的输入(通过发送 EOFCTRLD来完成)并将其保存到名为$HOME/.screen-slowpaste.tmp.然后,将内容读入寄存器readreg并粘贴。在此示例中,延迟已设置为 1 毫秒slowpaste 1

SCREENSLOWPASTE="$(cat </dev/stdin)"您还可以通过将输入保存为环境变量并将其复制到寄存器中来跳过临时文件register p "$SCREENSLOWPASTE"。但是,此变体可以粘贴的文本量非常有限,并且您很快就会遇到“命令太长”错误。

相关内容