imz*_*hev 864 terminal keyboard readline scrolling freeze
这种情况在我身上经常发生:在我(以不同的意图)按下Ctrl-S终端后,与它的交互(输入或输出)被冻结。这可能是一种“滚动锁定”或其他什么。
在此之后如何解冻终端?
(这个时候,我一直与apt-shell
一个内bash
内urxvt
-不是知道哪个人负责的特殊处理Ctrl-S:我和向后搜索命令的历史C-r,像往常一样readline的,但后来我想“回到" 以通常的方式转发历史——至少在 Emacs 中—— C-s( 1 , 2 , 3 ),但这导致终端冻结。好吧,滚动/分页以查看过去的事情在终端中仍然有效,但没有交互进程在那里运行。)
ak2*_*ak2 1035
Ctrl——Q
要完全禁用它,请坚持stty -ixon
使用启动脚本。要让任何键让事情再次流动,请使用stty ixany
.
ps:执行此操作的既不是终端也不是外壳,而是操作系统的终端驱动程序。
RBe*_*eig 448
Ctrl——Q确实是答案。我想我会折腾一下这个太长的历史,无法放在ak2 正确答案的边缘。
在黑暗时代,终端是通过长电线或电话线连接到远程设备(最初是另一个终端,因为电传打字机比电报键更容易学习操作)的大型设备。到 Unix 开发时,ASCII 代码已经很成熟(尽管来自 IBM 的竞争性 EBCDIC 代码仍然是一股不可忽视的力量)。
最早的终端机保存了接收到的每个字符的打印记录。只要字符到达的速度不超过打印头可以输入它们的速度,至少。但是,一旦基于 CRT 的终端成为可能,问题就出现了,CRT 上只有大约 25 行,而 80 个字符的 25 行代表了足够的 RAM,以至于没有人认真考虑过为那些滚动到顶部的字符提供更多的 RAM。屏幕。
所以需要一些约定来表示发送端应该暂停以让读者跟上。
7 位 ASCII 码有 33 个码位专门用于控制字符(0 到 31 和 127)。他们有些有真正完善的目的,如NUL
(空白纸带领导者线程,差距和接头),DEL
(“划掉”在纸带上字符显示的冲压所有的七孔), BEL
(丁!) CR
,LF
和TAB
. 而是四个被明确定义的用于控制终端设备本身(DC1
以DC4
又名CTRL + Q键,Ctrl + R键,Ctrl + S和Ctrl + T)。
我最好的猜测是,一些工程师认为(按照助记符的方式),“停止”的“S”和“继续”的“Q”还不错,并被指定DC3
为“请停止发送”和DC1
“好的” ,现在继续发送”。
甚至在 Unix 离开贝尔实验室的巢穴走向世界时,这种约定也已经很好地建立起来了。
该约定称为软件流控制,在实际串行设备中极为常见。正确实现并不容易,因为它阻止将这些字符中的任何一个用于通信通道中的任何其他目的,并且必须在任何未决接收字符之前处理停止信号以避免发送超过接收端可以处理。
如果可行,使用来自串行数据流的带外附加信号进行流量控制是非常可取的。在可以负担额外信号线的直接有线连接上,您会发现正在使用硬件握手,这可以释放这些字符以供其他用途。
当然,今天的终端窗口没有使用实际的物理串口,有滚动条,根本不需要软件握手。但约定俗成。
我记得 Richard Stallman 在 emacs 的第一个版本中收到了关于他将 Ctrl+S 映射到增量搜索的投诉的说法,并且他对任何必须依赖 7 位软件流控制连接的用户都相当冷漠。
Pre*_*raj 14
控制键:在 Shell 上执行特殊功能
归档时间: |
|
查看次数: |
492418 次 |
最近记录: |