我有一个 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 P
ESC \
\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\\
。