stty 设置被病理性改变

stty 设置被病理性改变

我刚刚设置了一台新计算机,像往常一样必须更改设置才能xterm使删除键正常工作。 (Ctrl-H 发送^H、退格发送^?、删除发送^[[3~。这当然是客观上正确的方法。)虽然默认的 xterm 设置有问题,但在此设置中一切正常,至少在 xterm 端是这样。

问题是,由于某种原因,sttyxterm 中的设置始终设置为erase = ^H.除了在非 readline 标准输入中搞乱东西之外,这还使得开始在其窗口中默默地翻译,这使得像 emacs 这样的东西变得相当痛苦tmux^H^?

我不知道为什么stty要这样设置。这不是默认设置;单独键入stty以显示与默认值的差异会显示该erase = ^H;行,手动键入stty erase ^?会删除该行。 (这也解决了 stdin 和 tmux 的问题。)但是,在我启动的每个终端中输入此内容非常乏味,虽然我可以将其放入.bashrc或其他内容中,但我觉得这不是正确的方法。

是什么导致stty使用这个特定的不正确的非默认设置?我怎样才能让它停止?

答案1

有很多方法可以做到这一点。你提到的方式可能是一种。xterm是一个运行另一个程序的程序 - 它将另一个程序包装在 pty 中 - 通常是您的 shell - 并将您提供给包装的程序的输入传送到通道。关于伪终端的问题是它们只是模拟设备 - 因此xterm需要猜测您最终将在其上打字的设备。当然,您可以得到更具体的信息。xterm尊重各种环境变量 - 更好的是,xresources。

man xterm

  • ttyModes(班级TtyModes
    • 指定包含终端设置关键字及其可能绑定的字符的字符串。允许的关键字包括:布尔克,杜斯普,埃夫,停产,停产2,擦除,擦除2,冲水,整数,,下一个,辞职,转数,开始,地位,停止,悬念,开关韦拉斯。控制字符可以指定为^char(例如,^c^u)并且^?可用于指示删除(127)。用来^-表示undef。使用\034来表示^\,因为 X 资源中的文字反斜杠会转义下一个字符。
    • stty这对于覆盖默认终端设置非常有用,而无需每次xterm启动时都执行操作。但请注意,给stty定主机上的程序可能使用不同的关键字; xterm的表是内置的。
    • 如果ttyModes资源指定了擦除值,则会覆盖ptyInitialErase资源设置,即xterm 初始化终端以匹配该值。

相关内容