Tüm tuş kombinasyonlarını işleyebilecek linux terminalleri var mı?


11

Emacs'ı terminal modunda ( -nw) kullanmayı seviyorum , ancak çoğu (tümü?) Terminallerin bazı tuş kombinasyonlarını işleyemediği görünüyor - örneğin, C-<RET>veya C-M-%. Bunun nedeni, çoğu terminalin bu kombinasyonlara sahip olmayan bir VT-100 öykünmesidir. Bu tuş kombinasyonlarını idare edebilecek herhangi bir linux terminali (tercihen KDE) var mı, yoksa bu tüm terminallerin temel bir sınırlaması mı?

Yanıtlar:


15

Bir terminalde bir tuşa veya tuş kombinasyonuna bastığınızda, terminalde çalışan uygulamaya bir veya daha fazla karakterden oluşan bir dizi olarak iletilir. Örneğin, tuşuna bastığınızda auygulama alınır a. Tuşuna bastığınızda Enter, uygulama karakteri alır CR(aka ^M("kontrol emm" olarak telaffuz edilir), aka karakter numarası 13, aka \rveya \015). Dahil Altolan tuş kombinasyonları tipik olarak karakter ESC(a.ka. ^[aka \eveya \033) olarak ve ardından anahtar veya tuş kombinasyonu olmadan sıralanır Alt. Fonksiyon tuşları ve diğer tuş kombinasyonları \e[veya ile başlayan çıkış dizileri olarak iletilir \eO.

Kaçış dizileri tam olarak standartlaştırılmamıştır ve terminaller tipik olarak belirli tuşlar için belirli nitelikleri yoksayar. Örneğin, Ctrl+ Shift+ lettergenellikle varsayılan olarak tam olarak Ctrl+ gibi iletilir letter.

Uçbiriminizin tuş birleşimi için ne gönderdiğini, Ctrl+ tuşlarına ve Vardından kabuk isteminde o tuş birleşimine C-qveya C-h cEmacs'ta tuş birleşimine basarak görebilirsiniz.

Bazı terminal emülatörlerinde, her bir anahtar için kaçış dizilerini yapılandırabilirsiniz. Xterm'de bu, X kaynakları aracılığıyla yapılır . Çoğu kurulum ~/.XresourcesX'in başladığı andan itibaren kaynakları okur ve dosyayı ile manuel olarak yükleyebilirsiniz xrdb -merge ~/.Xresources.

Term.VT100.translations:       #override \n\
    Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
    Ctrl Shift ~Meta <key>percent: string("\033[37;6~")

Ortak bir kural, ESC [ number1 ; number2 ~değiştiricili işlev tuşları için formun kaçış dizilerini kullanır . number1fonksiyon tuşuna gösterir ( 15üzere 24için F5için F12- geçmiş nedenlerle, F1 ile F4farklı çıkış dizilerine sahip) ve number2değiştirici gösterir ( 2için Shift, 3için Meta, 5için Ctrl, 7için Ctrl+ Metave için 1 eklenir Shift, en az biri ile Ctrlya da Meta).

Emacs, kaçış dizilerini Emacs 23 aracılığıyla input-decode-mapveyalocal-function-key-map (veya function-key-mapEmacs 23'ten önce) dahili anahtar gösterimine çevirir .

(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])

Yani, bunu doğru anlarsam, önce terminalimde bazı tuş kombinasyonlarına karşılık gelen bir kaçış dizisi tanımlamam gerekir. Sonra, emacs, kaçış dizisini tuş kombinasyonuna geri eşlemem gerekiyor. Kaçış dizisi, tanımlananlarla çelişmediği sürece keyfi olabilir infocmp $TERMmi?
Yossarian

2
@Yosarian Evet. Çakışmamaya ek olarak, kaçış dizilerinin açık olması gerekir, yani hiçbir kaçış dizisi diğerinin öneki olmamalıdır. Bu, pratikte ilk karakterin ESC(some128 karakterini denemek istemediğiniz, ancak bu olası giriş kodlamalarını sınırlandıracağı sürece) ve ikinci karakterin ESC foobağlayıcı olmasını istemediğiniz bir şey olması gerektiği anlamına gelir .
Gilles 'SO- kötü olmayı kes

Ne önerdiğini denemeye başladım. Meli local-set-keyaslında olmak define-key? Birincisi hata verir (yanlış sayıda argüman), ikincisi çalışırken en azından <kbd> C-Enter </kbd> için. Konsol hala <kbd> CM-% </kbd> göndermede sorun yaşıyor gibi görünüyor.
Yossarian

@Yosarian Gerçekten de öyle olmalı define-key. Konsole kaçış anahtarları yapılandırılabilir olup olmadığını bilmiyorum, xterm muhtemelen herhangi bir alternatif daha özelleştirilebilir.
Gilles 'SO- kötü olmayı bırak'

1
Not Thomas Dickey'nin xterm etkin geliştirme aşamasındadır. XTerm*modifyOtherKeys: 2Kaynak ile C-M-kombinasyonlar için bile benzersiz diziler üretecek , ancak bu ayarla çok sayıda özel eşleme sağlamanız gerekecek ( XTerm*modifyOtherKeys: 1daha az yetenekli ancak kutudan çok daha işlevsel). Bir örnek için (benim için işe yaramamış olsa da) easymacs indirmesindeki xterm-extras.elkitaplığı ve ilgili dosyaları .Xresourcesve .inputrcdosyaları görün .
phils

1

Sınırlı fakat önemli bir anahtar kümesi için, KDE'nin konsolünü varsayarsak, emacs -nw'de çalışan, karmaşık tuş bağlantılarına sahip olmak için aşağıdakiler yapılabilir:

S-<RET>Örnek olarak çalışmaya başlamamı kullanacağım:

  1. Yeni bir konsol açın, ayarlara gidin -> geçerli profil -> klavye -> düzenle
  2. Ekle'ye basın ve yeni bir giriş yapın Return+Shiftve ona yararlı bir anahtar dizisi verin ( \E[27;3Xev ile alay ederken X tarafından gönderilen anahtar dizi olduğunu seçtim , ancak bu yanlış olabilir - yapılacak önemli şey uygun bir kaçış olduğundan ve başka bir şeyle çatışmayacağından emin olun).
  3. Çalıştığından emin olmak için alttaki küçük test alanında oynayın.
  4. Konsole yeniden başlatın.
  5. Başlatma emacs -nwve sıfırlama tamponunda şunları değerlendirin:

    (read-key-sequence-vector "Type your new key:")

    ardından yeni tuş kombinasyonunuzu yazın.

    • Buna aşina değilseniz, satırı yazın, imleci satırın sonunda bırakın ve bu satırı çalıştırmak için emacs almak için Cx Ce'ya basın, tırnak içine koyduğunuz her şeyi size söylemeli ve birşeyler yaz.
  6. Bağlayabileceğiniz bir tuş dizisi tükürmelidir.
    ( Konsol tuş bağlama ile uğraşmadan önce [27 91 50 55 59 51]sıkıcı [13]olanın aksine bana geri döndü .)

  7. Emacs yapılandırmanıza ekleyin:

    (define-key function-key-map [27 91 50 55 59 51] [(shift return)])
    
  8. Bunu emacs -nwkullanarak bir ekran oturumda ile test :

    (define-key ess-mode-map [(shift return)] #'ess-eval-line-and-step)
    (define-key sh-mode-map [(shift return)]  #'send-line-to-shell)
    

0

Kısa cevap, tüm terminaller için temel bir sınırlama olmasıdır.

Biraz daha uzun cevap, birisi istediğinizi yapan bir terminal oluştursa bile, Emacs'ın kendisinin bu varsayımsal terminalle çalışması için büyük değişiklikler gerektireceği yönündedir.


Bu emacs hakkında iyi bir nokta, bu benim için bile gerçekleşmedi. Bunun yerine gui'yi kullanmaya başlayacağım sanırım.
Yossarian

İşte bu yaptığım şey.
hruvulum

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.