答案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 延迟。但是,对于使用命令粘贴文本paste
,screen
有一个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"
。但是,此变体可以粘贴的文本量非常有限,并且您很快就会遇到“命令太长”错误。