我很难理解\[\e]0;$PWD\007\]
和的\[\e(0\]b\[\e(B\]
含义。
我正在 Windows 上的 MobaXterm 上设置提示符,这两个序列是默认序列。他们分别处于最开始和最结束。
我认为第二个是用来显示小箭头取代传统的$
,但我不知道它是如何实现这个结果的。它几乎看起来像垃圾。我想这是某种 unicode 技巧?
对于第一个,我完全不知道它的目的是什么。我对这部分更感到困扰$PWD
。
关于链接的问题:
好吧,正如我提到的,我知道第二个序列显示箭头,但为什么它使用两个由普通 b 分隔的转义序列?这很奇怪。
而且,关于第一个,它没有显示 PWD。在我的屏幕截图中,该序列显示在最开始的地方,甚至在打印日期之前。紫色路径使用经典的 \w。我不明白为什么它在转义序列中使用 $PWD,这就是我问这个问题的原因。
答案1
每个案例都包含一些“括号”某些数据的原因是它告诉终端开始做某事,然后发送数据,然后结束做某事。
第一个序列是xterm控制bash 可以使用它来将 的值$PWD
放入窗口标题(和图标名称)中。您不会在提示中看到任何内容。 shell 值$PWD
是数据,左侧开始转义序列,右侧完成该序列。
另一种切换到 VT100 画线字符集(请参见指定G0字符集:0
进入画线阶段,B
返回 Latin-1) 打印(某物)乙。但真正的 VT100 不会显示箭头键(它会显示“H T”,对于水平制表符):
然而,一些“VT100 仿真器”做出了自己的选择(尽管通常他们不理会原始的 VT100 选择)。有趣的是,虽然 MobaXterm 基于 PuTTY,但 PuTTY 在评论中记录了早期的 VT52 选择(尽管它没有实现乙):
/*
* From the VT100 Manual
* NOTE: The special graphics characters in the VT100
* are different from those in the VT52
*
* From VT102 manual:
* 137 _ Blank - Same
* 140 ` Reserved - Humm.
* 141 a Solid rectangle - Similar
* 142 b 1/ - Top half of fraction for the
* 143 c 3/ - subscript numbers below.
* 144 d 5/
* 145 e 7/
* 146 f Degrees - Same
* 147 g Plus or minus - Same
* 150 h Right arrow
* 151 i Ellipsis (dots)
* 152 j Divide by
* 153 k Down arrow
* 154 l Bar at scan 0
真正的 VT100 也会模拟 VT52,因此 PuTTY 有一些与 VT52 相关的代码。但显示的转义序列不会那么远——它只是 VT100。至于为什么 VT52 提供了向右箭头和向下箭头,但没有向上箭头或向左箭头,这一点尚不清楚,大约 40 年后。但 MobaXterm 的开发人员可能决定使用看起来不太有用的代码来改进东西。
MobaXterm 终端仿真器的源代码在其网站上为“MoTTY”。用于画线字符的表如下所示:
/* Character conversion arrays; they are usually taken from windows,
* the xterm one has the four scanlines that have no unicode 2.0
* equivalents mapped to their unicode 3.0 locations.
*/
static const WCHAR unitab_xterm_std[32] = {
//MOBAMODIF
// 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1,
0x2022, 0x2592, 0x27a4, 0x240c, 0x2714, 0x2718, 0x00b0, 0x00b1,
//END_MOBAMODIF
0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba,
0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x0020
};
第一行是他们更改的内容(注释来自 PuTTY,又改编自 xterm)。在 xterm 上将第一行渲染为 UTF-8 显示字符是什么(提示:第一个条目是八进制140,或`):
8226 ->0x2022 ->{•} (4 bytes, punct)
9618 ->0x2592 ->{▒} (4 bytes, printing)
10148 ->0x27a4 ->{➤} (5 bytes, printing)
9228 ->0x240c ->{␌} (4 bytes, printing)
10004 ->0x2714 ->{✔} (5 bytes, printing)
10008 ->0x2718 ->{✘} (5 bytes, printing)
176 ->0xb0 ->{°} (3 bytes, printing)
177 ->0xb1 ->{±} (3 bytes, printing)
建议的重复项与问题的任何部分都无关,特别是第二部分,因为提示字符串不使用 UTF-8,而是使用不同的编码。