Super in emacs -nw in linux


15

Cevaba basit ve doğrudan bir soru bulmak için uğraşıyorum ve bu yüzden burada sormaya karar verdim.

S: Linux'ta bir Terminalde başlatılan Emacs'ta Super kullanmanın bir yolu var mı?

PS : Ben hakkında çok fazla bilgi okudum xmodmapama bence anahtar terminal emülatör Süper anahtarı temsil edemez olduğunu. Ancak, bir (kbd "s-SPC")şey döndürür ve ben çeviri tesisini kullanmayı düşünüyordum .Xdefaults/X. Doğru yolda mıyım? Sonuç olarak kbd, XTerm.VT100.translations olarak ne koymam gerekir?

Yanıtlar:


21

Terminal için kodlama ve kod çözme işleminden geçmeden klavye girişi ve ekran metni alabilen X11 Emacs'ta daha rahat olacaksınız . Metin modu düzenleyicisini kullanmanın ana nedeni, uzak bir makinede ekran veya tmux içinde çalıştırmaktır, ancak Tramp sayesinde uzak dosyayı yerel Emac'larınızda düzenlemek genellikle daha kolaydır. Bununla birlikte, terminal emülatörünüz işbirliği yaptığı sürece, Xterm'de olduğu gibi istediğinizi yapabilirsiniz.

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 CR(aka ^M("kontrol emm" olarak telaffuz edilir), aka karakter numarası 13, aka \rveya alır \015. Dahil Altolan tuş kombinasyonları tipik olarak karakter ESC(a.ka. ^[aka \eveya \033) olarak ve ardından anahtar veya tuş kombinasyonu olmadan sıra ile iletilir 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, hiper ve süper değiştiriciler genellikle göz ardı edilir. 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.

Xterm, X kaynakları aracılığıyla her anahtar için kaçış dizilerini yapılandırmanıza olanak tanır . Çoğu kurulum ~/.XresourcesX'in başladığı andan itibaren kaynakları okur ve dosyayı ile manuel olarak yükleyebilirsiniz xrdb -merge ~/.Xresources.

XTerm.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 . number1(fonksiyon tuşuna gösterir 15için 24için F5için F12- geçmiş nedenlerle, F1 ile F4ve farklı çıkış dizilerine sahip) number2değiştirici gösterir ( 2için Shift, 5için Ctrl, 3için Meta, 8için Ctrl+ Metave + için 1 ekleyin Shift- hayır, çok tutarlı değildir).

Yani şey gibi onların numarasından Hiper ve Süper değiştiriciler belirtmek gerekir Mod1yoluyla Mod5. xmodmap -pmTuş takımlarının değiştiricilere eşlenmesini görmek için çalıştırın . Örneğin, Super_LMod5'e bağlıysa, aşağıdaki satır (bu tam durumu kullanın) Super+ için bir bağlayıcı tanımlar Space:

    ~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\

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[32;16~" [(super ?\ )])

Bu direk,% 80 geri dönüştürülmüş malzemeden yapılmıştır.Tüm tuş kombinasyonlarını işleyebilecek linux terminalleri var mı?


Bu, biraz dağınık bulduğum tüm bilgileri kapsayan harika bir cevap. Sadece bir soru: Nerede buldunuz / 32; 16 ~ 'yı nasıl seçtiniz ve neden aşağıdaki emacs bağlayıcısıyla eşleşmiyor? Sayıların kökenini anladım, ancak size sayı1 ve sayı2 için bir yerde bir eşleme tablosuna bağlanıp bağlanamayacağınızı sormak istiyorum .
Andrea Richiardi

@AndreaRichiardi 32 karakter seçtim çünkü boşluk karakteri için ASCII / Unicode değeri, 16 ise standart bağlamalar Ctrl, Meta ve Shift için 8'e kadar değerler kullandığından. Aşağıdaki 33 bir yazım hatasıydı. Diğer tuşlarla çakışmadığı sürece herhangi bir şey seçebilirsiniz.
Gilles 'SO- kötü olmayı bırak'

Diziyi bir işleve bağlamak zorunda kaldım, bu yüzden geçici olarak çözdüm (global-set-key "\033[32;16~" 'set-rectangular-region-anchor). Ama eksiksiz olmak için define-keyyukarıdakini denedim , ama sonra tetikleyemedim (global-set-key (kbd "s-SPC") 'set-rectangular-region-anchor). Sadece baskı yapıyordu; tamponda% 16. Bu sekansı (kbd "s-SPC") 'ye bağlamak güzel olurdu, böylece anahtar sekansını bağlıyorum ve diğer komutlara tekrar atayabilirim.
Andrea Richiardi

C-h ls-SPC'ye basıldığında şu şekilde dönüyor: ESC [ 3 2 ; 1 6 ~ancak emacs hala şikayet ediyorM-[ 32 is undefined
Andrea Richiardi

@AndreaRichiardi xterm bölümünde daha fazla yazım hatası düzelttikten sonra (Emacs amaçlanan karakter sırasını aldığından beri düzeltmiş gibi görünüyorsunuz), benim için çalışıyor. function-key-mapBunun yerine kullanırsanız çalışır mı local-function-key-map? Bu, local-function-key-mapterminale bağlı olduğu için ayarladığınız zamanla ilgili olabilir.
Gilles 'SO- kötü olmayı bırak'

0

Bir Emacs paketi kurmaya ve terminalinizi yapılandırmaya hazırsanız, Emacs ve terminallere tüm PC klavye tuşlarını ve değiştirici tuş kombinasyonlarını düzgün bir şekilde nasıl tanıyacağını öğretebilecek bir Emacs paketi yazdım:

https://github.com/CyberShadow/term-keys

Süper değiştiricinin kodlanması varsayılan olarak etkin değildir, ancak paket özelleştirilebilir ve hangi değiştirici tuş kombinasyonlarının kodlandığını yapılandırmaya izin verir. Ayarlamak Süper modifiye edici arasında, tuş kombinasyonları kodlayan etkinleştirmek için term-keys/want-key-p-funcdöner bir işleve olmayan nil (bkz varsayılan uygulama bir açıklama).t(elt mods 3)


0

İnit dosyalarımda aşağıdakiler var:

(global-set-key [f7] nil)
(global-set-key [f8] nil)
(define-key function-key-map [(f7)] 'event-apply-super-modifier)
(define-key function-key-map [(f8)] 'event-apply-hyper-modifier)

Bu, işlev tuşlarını kullanarak süper ve hiper tuşları göndermeme izin veriyor.


-1

Kısa cevap: kullanın Konsole.

Açıklama:

  • Emacs ' local-function-key-mapiçin bir giriş eşlemesi C-x @ svar event-apply-super-modifier.
  • KonsoleSuper(Windows logosu tuşu) çıkış sırasına eşler ( ^X@shiçbir yerde belgelenmemiş gibi görünüyor, şans eseri keşfettim). Örneği açıp Konsolebasarak deneyebilirsiniz Ctrl-v Win-o.

Cevabınız için teşekkürler, ancak terimi değiştirmek aradığım çözüm değil.
Andrea Richiardi
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.