Terminaldeki Shift + Arrow tuşlarının geçmişi nedir?


21

Nedenini merak ediyorum Shift+ Arrow Keybirinde sonucu A, B, Cveya Dharfler.

Neden diğer harfler değil? Neden herhangi bir mektup?


İlgi çekici: D Bahisim? Metin tabanlı oyunlarla ilgisi var: D
Rinzwind

2
Sadece bir gözlem: tty'de Shift + Arrow Keyshiçbir şey yapmaz.
Radu Rădeanu

@Rinzwind: :)))
Radu Rădeanu

1
Bu soruyu Unix / Linux Stack Exchange'de sordum. Bazı yararlı cevaplar var. Belki onlara bakmak istersin. unix.stackexchange.com/questions/73669/…
yfklon

Yanıtlar:


27

Gibi Terminal emülatörlerine gnome-terminal(Ubuntu "Terminal") değil, aynı zamanda xtermve urxvtbir bilgisayarın sadece ekran vardı eski terminal davranışı yeniden çünkü "taklitlerini" olarak adlandırılır. Bu tür terminaller bilgisayar ile metin tabanlı bir protokolle haberleşmiştir ve başlangıçta sadece metin almak için tasarlanmıştır. Çabuk, daha fazla kontrol gerekiyordu: bir çizgiyi silmek nasıl? Renkleri kullanmak? Veya imleç konumunu değiştir?

VT-100 terminali Kaynak: Unix Kullanılabilirlik Sanatı - Komut Satırı Arabirimleri

Kaçış dizileri her terminal için böyle şeyler yapması için tasarlandı. Onlar adlandırılır kaçış onlar ASCII kaçış kodu ile başlar, çünkü: 33. Bu tür bir karakteri doğrudan yazdırmanın hiçbir yolu yoktur, bu da bu tür dizilere uygun bir özelliktir. Hala bu karakteri göstermek istediğimizde ^[[, kullanılır ve açıklamalarımda kullanacağım şey budur.

Terminal alındığında ^[[A, "print ^ [[A" değil, "kullanıcı yukarı ok tuşuna bastı" anlamına gelmiyordu. Buradaki "A" tamamen keyfidir: sadece herkesin üzerinde anlaştığı mektuptur, çünkü DEC VT-52 ve halefi popüler VT-100 terminalinin kullandığı şey budur.

DEC VT-52 Bakım Kılavuzu 1976

Kaynak: DEC VT-52 Bakım Kılavuzu 1976

Bu hala terminal emülatörlerinin bugün çalışma şeklidir: $TERMdeğişkene bağlı olarak, adlandırılmış bir veri tabanı terminfokabuğa hangi kodların gönderileceğinden (bash, sh, zsh ...) sorumludur, bu daha sonra onları anlamak ve tepki vermekle yükümlüdür. onlara.

Şimdi, Shift+ için kod upşu şekilde olur ^[[1;2A: terminal emülatörü bu kodu kabuğa gönderir, yorumlamaya çalışır ^[[1;2ancak hiçbir şey göstermez, çünkü o kaçış dizisini bilmez. Ancak Akaldı ve görüntülenir.


5
Vay ilginç. Şimdi tüm ^[[Abunlar terminalde bir işlem çalışırken ok tuşlarına tıkladığımda anlam ifade ediyor.
Dan

4
Kaçış dizilerini ham formda görüntülemek için SHIFT-UpArrow'a basmadan hemen önce CTRL-v tuşlarına basabilirsiniz. Varsayılanları değiştirmediyseniz, ESC terminal ekranınızda ^ [
arielf

@arielf Ayrıca yazıp çalıştırabilir cat >/dev/nullve tamamladığınızda Ctrl + C (veya Enter ve sonra Ctrl + D) tuşlarına basabilirsiniz.
wjandrea
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.