我刚安装了一台新计算机,和往常一样,为了使删除键正常工作,我不得不更改xterm中的设置。(Ctrl发送^H,backspace发送^?,delete发送^[[3~.当然,这是客观上正确的做法。虽然默认的xterm设置是有问题的,但是在这个设置中一切都很好,至少在xterm的末尾是这样的。
问题是,由于某种原因,xterm中的stty设置总是设置为erase = ^H。除了在非读行标准输入中造成混乱之外,这还使得tmux开始在其窗口中默默地将^H转换为^?,这使得emacs之类的事情变得相当痛苦。
我不知道为什么stty是这样设置的。这不是默认设置;仅键入stty以显示与默认的差异将显示erase = ^H;行,手动键入stty erase ^?将移除这一行。(这也解决了stdin和tmux的问题。)然而,在我启动的每一个终端中输入这个都很乏味,虽然我可以把它放在.bashrc或其他什么地方,但我觉得这不是正确的方法。
是什么原因导致stty使用这个不正确的、非默认的设置?我怎么才能让它停下来?
发布于 2015-04-19 02:53:17
做这件事有很多方法。你提到的方式可能是一个。xterm是一个运行另一个程序的程序--它将另一个程序封装在pty中--通常是您的shell --并将输入输入传递给包装好的程序。关于伪终端的问题是,它们只是模拟的设备,所以xterm会猜测您最终将在其上输入的设备。当然,你可以说得更具体些。xterm授予各种环境变量--更好的是,xresources。
来自man xterm:
ttyModes ( TtyModes) ^char (例如,^c或^u),^?可用于指示删除(127)。使用^-表示undef。使用\034表示^\,因为X资源中的文字反斜杠将转义下一个字符。stty时都执行xterm。但是,请注意,给定主机上的stty程序可能使用不同的关键字;xterm's表是内置的。ttyModes资源指定擦除值,则重写ptyInitialErase资源设置,即xterm初始化终端以匹配该值。https://unix.stackexchange.com/questions/197161
复制相似问题