在 GNU 屏幕中使用终端转义序列

在 GNU 屏幕中使用终端转义序列

我有一个 ruby​​ 终端脚本,我想打印出超链接。我是这样实现的:

puts("\e]8;;https://example.com\aThis is a link\e]8;;\a")

这在“普通”终端(gnome-terminal 顺便说一句)窗口中工作得很好。

但我需要在 GNU 中运行这个脚本screen,其中转义序列根本不起作用。其他序列(例如颜色)工作正常,超链接序列(根据来源可能是仅限 gnome 终端的东西)不是。 (screen在 gnome 终端内运行)

我怎样才能screen确认我的链接序列并正确显示它?

答案1

您可以通过将一些文本放入,对(以 printf 格式)内来将其传递到终端screen本身运行。ESC PESC \\033P%s\033\\

因此,您应该将\eP..\e\\序列的所有部分括起来,除了屏幕上显示的文本 ( "This is a link"):

printf '\eP\e]8;;https://example.com\a\e\\This is a link\eP\e]8;;\a\e\\\n'
printf '\eP\e]8;;%s\a\e\\%s\eP\e]8;;\a\e\\\n' https://example.com 'This is a link'

或者,从 C:

puts("\eP\e]8;;https://example.com\a\e\\This is a link\eP\e]8;;\a\e\\");
printf("\eP\e]8;;%s\a\e\\%s\eP\e]8;;\a\e\\\n", url, title);

将替换文本放在太里面\eP..\e\\可能会导致屏幕失去对光标位置的跟踪。


这记录在 GNU 屏幕中手动的

ESC P  (A)     Device Control String
               Outputs a string directly to the host
               terminal without interpretation

“字符串”应该以ST(“字符串终止符”)转义符结尾,即。\e\\——从此\eP..\e\\

相关内容