Làm thế nào để giải phóng sau khi vô tình nhấn Ctrl-S trong một thiết bị đầu cuối?


729

Đó là một tình huống đã xảy ra khá thường xuyên với tôi: sau khi tôi nhấn (với một ý định khác) Ctrl-Strong một thiết bị đầu cuối, sự tương tác (đầu vào hoặc đầu ra) với nó bị đóng băng. Nó có lẽ là một loại "khóa cuộn" hoặc bất cứ điều gì.

Làm thế nào để tôi tháo thiết bị đầu cuối sau này?

(Lần này, tôi đã làm việc với apt-shellbên bashtrong - không urxvtchắc ai trong số họ chịu trách nhiệm xử lý đặc biệt Ctrl-S: Tôi đã tìm kiếm lịch sử của các lệnh ngược C-r, như thường lệ để đọc, nhưng sau đó tôi muốn "quay lại" "chuyển tiếp lịch sử với thông thường - ít nhất là trong Emacs-- C-s( 1 , 2 , 3 ), nhưng điều đó khiến thiết bị đóng băng. Chà, cuộn / phân trang để xem những thứ trong quá khứ vẫn hoạt động trong thiết bị đầu cuối, nhưng không có tương tác với các quy trình chạy ở đó.)


23
Tôi đã làm việc vimvà tôi nhấn Ctrl-S để lưu các chỉnh sửa của mình. Uh-ohXD
ADTC

4
Tại sao điều đó tồn tại ở nơi đầu tiên?
neverMind9

Câu trả lời:


862

Ctrl-Q

Để vô hiệu hóa hoàn toàn điều này, hãy dán stty -ixonvào một kịch bản khởi động. Để cho phép bất kỳ phím nào để có được mọi thứ một lần nữa, sử dụng stty ixany.

ps: Đây không phải là thiết bị đầu cuối cũng như vỏ không làm điều này, mà là trình điều khiển thiết bị đầu cuối của hệ điều hành.


8
Cảm ơn bạn! BTW, họ đề nghị Ctrl-C; nó cũng hoạt động chứ? (Và ở một nơi khác , họ đề nghị Ctrl-Q, giống như bạn.)
imz - Ivan Zakharyaschev

23
Ctrl-C không hoạt động, nhưng nó cũng gửi tín hiệu ngắt, điều mà người ta thường không muốn. (Btw, các phím được sử dụng cho những thứ này đều có thể định cấu hình thông qua stty.)
ak2

2
Tôi nhớ đã thử kết hợp này trên Apple của tôi] [bản sao và nó cũng hoạt động ở đó - Ctrl-Svà sau đó Ctrl-Qđể tiếp tục.
sashoalm

19
CẢM ƠN !! Điều này đã được một cái gì đó làm phiền tôi trong nhiều năm. Không chắc chắn tại sao VIM chỉ không thực hiện điều này như một lối tắt riêng để lưu thay vì bất cứ điều gì nó làm. Điều tốt để biết có một lối thoát khỏi nhà tù đó là màn hình VIM bị đóng băng do sử dụng tự nhiên CTRL + S (phím tắt lưu) có thể áp dụng trong gần như tất cả các ứng dụng NGOẠI TRỪ VIM.
Kraang Thủ

8
@SanuelJackson Ctrl-S "phím tắt lưu" có thể áp dụng trong gần như tất cả các ứng dụng DESKTOP EXCEPT vim. Và ngoại trừ Emacs. Và Nano. Và mọi "ứng dụng" khác mà bạn có thể chạy trên thiết bị đầu cuối, chính xác bởi vì nó đã được thiết bị đầu cuối sử dụng để kiểm soát luồng. Đó là cùng một lý do bạn sẽ không tìm thấy ứng dụng Linux Desktop bằng phím tắt Ctrl-Alt-FN: bởi vì chúng đã được hệ thống sử dụng.
gerlos

384

Ctrl- Qthực sự là câu trả lời. Tôi nghĩ rằng tôi đã ném vào một lịch sử nhỏ về điều này quá dài để phù hợp với lề của câu trả lời đúng của ak2 .

Quay trở lại thời kỳ tăm tối, thiết bị đầu cuối là một thiết bị lớn được kết nối với thiết bị từ xa (ban đầu là thiết bị đầu cuối khác vì các loại điện thoại rất dễ học hơn so với phím điện báo) qua dây dài hoặc qua đường dây điện thoại có modem. Vào thời điểm Unix đang phát triển, mã ASCII đã được thiết lập tốt (mặc dù mã EBCDIC cạnh tranh từ IBM vẫn còn là một lực lượng được tính toán).

Các thiết bị đầu cuối sớm nhất giữ một bản ghi in của mỗi nhân vật nhận được. Miễn là các ký tự đến không nhanh hơn đầu in có thể gõ chúng, ít nhất. Nhưng ngay khi các thiết bị đầu cuối dựa trên CRT có thể xảy ra, vấn đề nảy sinh là chỉ có khoảng 25 dòng phù hợp với CRT và 25 dòng 80 ký tự đại diện cho đủ RAM mà không ai nghĩ nghiêm túc về việc cung cấp thêm RAM cho các ký tự được cuộn từ trên xuống màn hình.

Vì vậy, một số quy ước là cần thiết để báo hiệu rằng kết thúc gửi sẽ tạm dừng để cho người đọc bắt kịp.

Mã ASCII 7 bit có 33 điểm mã dành cho các ký tự điều khiển (0 đến 31 và 127). Một số những người có mục đích thực sự cũng được thành lập, chẳng hạn như NUL(lãnh đạo băng giấy trắng cho luồng, khoảng trống, và măng xông), DEL( "gạch bỏ" ký tự trên băng giấy chỉ định bởi đấm tất cả bảy lỗ), BEL(ding!), CR, LF, Và TAB. Nhưng bốn được xác định một cách rõ ràng cho việc kiểm soát các thiết bị đầu cuối tự ( DC1để DC4aka Ctrl + Q, Ctrl + R, Ctrl + S và Ctrl + T).

Dự đoán tốt nhất của tôi là một số kỹ sư nghĩ rằng (theo cách thức đi), "S" cho "Dừng" và "Q" cho "Tiếp tục" không quá tệ, và được gán DC3cho nghĩa là "vui lòng dừng gửi" và DC1có nghĩa là "ok , tiếp tục gửi ngay bây giờ ".

Ngay cả hội nghị đó đã được thiết lập tốt vào thời điểm Unix rời tổ tại Bell Labs để đi ra thế giới.

Quy ước được gọi là điều khiển luồng phần mềm và cực kỳ phổ biến trong các thiết bị nối tiếp thực. Thật không dễ để thực hiện chính xác, vì nó ngăn chặn việc sử dụng một trong hai ký tự đó cho bất kỳ mục đích nào khác trong kênh liên lạc và tín hiệu Dừng phải được xử lý trước bất kỳ ký tự nhận đang chờ xử lý nào để tránh gửi nhiều hơn kết thúc nhận có thể xử lý.

Nếu thực tế, sử dụng các tín hiệu bổ sung ngoài băng từ luồng dữ liệu nối tiếp để kiểm soát luồng được ưu tiên rất nhiều. Trên các kết nối có dây trực tiếp có thể đủ khả năng cho các dây tín hiệu bổ sung, bạn sẽ tìm thấy bắt tay phần cứng đang sử dụng, giúp giải phóng các ký tự đó cho các mục đích sử dụng khác.

Tất nhiên, cửa sổ đầu cuối ngày nay không sử dụng cổng nối tiếp vật lý thực tế, có thanh cuộn và hoàn toàn không cần bắt tay phần mềm. Nhưng quy ước vẫn tồn tại.

Tôi nhớ lại tuyên bố rằng Richard Stallman đã nhận được khiếu nại về việc ánh xạ Ctrl + S của mình để tìm kiếm gia tăng trong các bản phát hành đầu tiên của emacs và rằng anh ta không mấy thiện cảm với bất kỳ người dùng nào phải phụ thuộc vào kết nối được kiểm soát luồng phần mềm 7 bit.


2
Thanke .. rất thú vị ... Tôi đã tự hỏi: Tại sao mọi người lại chọn Tiếp tục một quá trình với "Q" thường được sử dụng (bây giờ) cho Thoát ... Nhóm QRST giải thích điều đó .....
Peter.O

13
Cảm ơn rất nhiều cho chút lịch sử đó. Gần đây tôi đã tắt điều khiển luồng theo mặc định trong trình giả lập thiết bị đầu cuối mà tôi duy trì, nhưng phải khôi phục nó khá nhanh sau khi phản đối bằng giọng nói từ các nhà truyền thống Unix vẫn sử dụng nó. Thay vào đó, tôi đặt bit ixany, vì vậy ít nhất những người nhấn ^ S mà không biết về ^ Q không bị kẹt.
ak2

3
@RBerteig Tôi tình cờ tìm hiểu về backspace và xóa. Backspace chính thức ^ H và xóa là ^? Một số người như nhà phát triển Emacs (Stallman một lần nữa?) Muốn ^ H có sẵn cho mục đích chung như các phím tắt như Trợ giúp. Trình tự thoát ^ [[3 ~ hoặc một cái gì đó tương tự đã được tạo để thay thế ^? và backspace giờ trở thành ký tự xóa cũ ^?. Trên thực tế, tôi đã thấy các bản sửa lỗi được vá cụ thể trên các bản phân phối Linux để ánh xạ lại các khóa trong terminfo trong khi các bản mã trên FreeBSD không được vá khiến một số sự nhầm lẫn gây khó chịu khiến backspace không hoạt động.
chim cánh cụt359

23
Tôi đã từng tự hỏi tại sao DEL có mã 127 thay vì được nhóm với các ký tự điều khiển khác, cho đến khi tôi lần đầu tiên chơi với một số băng giấy và ASR33. Khi tôi nhận ra rằng nó có tác dụng đấm tất cả các lỗ, điều đó có nghĩa là nó có thể bị đè lên bất kỳ nhân vật nào bị đấm trước đó để xóa nó, điều đó thật có ý nghĩa.
RBerteig

3
@SanuelJackson Đã có một thời gian kể từ khi tôi nhìn kỹ, nhưng vimrc mặc định mà các tàu có cửa sổ đã ánh xạ <Cs> thành ": update" trong nhiều năm. Tôi cũng khá chắc chắn tôi đã thấy nó trên một số bản phát hành cho gvim trong quá khứ. Tuy nhiên, nếu bạn đang sử dụng vim trong một thiết bị đầu cuối, lịch sử này vẫn còn rất nhiều liên quan. Các trình giả lập thiết bị đầu cuối hiện đại vẫn thực hiện các phím điều khiển luồng, vì vậy ngay cả khi vim ánh xạ chúng, nó sẽ không bao giờ nhìn thấy chúng trừ khi mỗi người dùng hết cách để vô hiệu hóa điều khiển luồng như được mô tả trong câu trả lời được chấp nhận.
Drew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.