Üst Karakter + Yukarı terminaldeki Emacs tarafından tanınmıyor


15

Çok sık Emacs'ta bir bölge seçmek için Shift+ Up/Downtuşunu kullanıyorum . GUI modunda iyi çalışır, ancak seçenekle emacsçağrıldığında -nwyalnızca Shift+ ile satır seçebilirim Down. Shift+ UpBen minibuffer bu hata mesajını değil iş alıyor:

<select> is undefined

Bu sorunu nasıl çözebilirim?

Yanıtlar:


13

Bir metin terminali tuşları değil, yalnızca karakterleri (daha kesin olarak bayt) iletir. Tuşlar ve tuş kodları (değiştiricileri olan tuşlar) karakter dizileri olarak kodlanır. Yazdırılabilir karakterler ekleyen tuşlar kendiliğinden gönderilir; fonksiyon tuşları kaçış dizileri olarak gönderilir. Çoğu kaçış dizisi Escape karakterinden ( ?\eEmacs sözdiziminde) sonra iki veya daha fazla yazdırılabilir karakterden oluşur. Emacs tarafından kullanım için bkz . Terminaldeki kontrol ve yukarı / aşağı tuşları ve Klavye girişi ve metin çıkışı nasıl çalışır? daha fazla bilgi için.

Emacs, kaçış dizilerini kendi anahtar kavramına çevirecek bir mekanizmaya sahiptir . Çeviri tablosu input-decode-mapEmacs başladığında (veya daha kesin olarak, yeni bir çerçeve açık olduğunda başlatılır: bu değişkenin her terminalde farklı bir değeri vardır). Bazen Emacs terminal tarafından gönderilen tüm kaçış dizilerini bilmiyor.

Sizin durumunuzda, Emacs'ın Shift+ tarafından gönderilen kaçış dizisi için yanlış yorumu olduğu anlaşılıyor Up. Bunu yorumlamak S-upyerine söylemeniz gerekir select. İlk olarak, kaçış dizisinin ne olduğunu bulun. Gelen *scratch*tamponunun Ctrl+ Qo Shift+ Up. Komut C-q, kaçış karakteri olan bir sonraki karakterin, kelimenin tam anlamıyla eklenmesine ve ardından kaçış dizisinin geri kalanına neden olur. Diyelim ki Shift+ sistemimize Upgönderir \e[1;2A, o zaman ilgili girişi yeniden tanımlamanız gerekir input-mode-map:

(define-key input-decode-map "\e[1;2A" [S-up])

Prensip olarak, input-decode-mapterminal başına ayarlanmalıdır. Pratikte, aynı çıkış dizisinin farklı anahtarları kodladığı iki terminale sahip olmak çok nadirdir, bu nedenle küresel bir ayar iyi çalışır.


Cevabınız sorumu burada karşılıyor gibi görünüyor - emacs.stackexchange.com/questions/33988 . Are the (define-key ...)komutları init.el? Bakabileceğim ayrıntılı bir örnek var mı?
vfclists

@vfclists define-keykomutları init dosyanıza gider. Bu ~/.emacs.d/init.elveya birkaç başka yer olabilir. Sen kullanımlarının örnekler bol bulabilirsiniz define-keyarayarak define-key, ancak bağlama eşlediğiniz bulgu başka bir meseledir. Çeşitli haritalar dahil şunlardır: global-map, input-decode-map, function-key-map, keyboard-translate-map. Sorunuza nasıl cevap vereceğimi bilmiyorum çünkü Boşlukları bilmiyorum. Standart arayüzleri karışık bir şekilde yeniden tanımlayan Spacemacs gibi paketlerin kullanılmasını önermiyorum.
Gilles 'SO- kötü olmayı bırak'

Kuruluş modunu öğrenmek için düzenli emacs'a geçtim ve input-decode-mapbazı örnekler bulduktan sonra çalışmayı başardım . Bunu götürün Can input-decode-mapkullanıcı bir tampon metin girerken geçerlidir?
vfclists

@vfclists input-decode-mapgeçerli olan tuş haritalarından biridir. Ayrıntılar için kılavuza bakın.
Gilles 'SO- kötü olmayı bırak

5

Emacs, bölge noktası (imleç) ve işareti (imlecin "işaretlenmiş" önceki bir önceki konumu) ile sınırlanmıştır.

Bu nedenle, "bir bölge seçmek" için, bu işareti koymanız ve ardından noktanızı hareket ettirmeniz gerekir.

İşareti yerleştirmenin en kolay yolu basmaktır C-SPC. Sonra sadece imleci hareket ettirin, "bölge" nin de sizin yaptığınız gibi genişlediğini göreceksiniz.

"Bölgenin seçimini kaldırmak" için C-SPCtekrar düğmesine basabilirsiniz .

"Üst karakter + hareket" diğer yazılımlarda yaygın bir tuş bağlama olduğundan, varsayılan olarak bu "bölge seç" davranışını taklit eder. Ancak, terminalde çalışmaz, çünkü vardiya emacs'a değiştirici anahtar olarak gönderilemez.

Genel olarak, C-SPCyöntemin bir bölge seçmek için diğer yöntemlerden çok daha güçlü olduğunu unutmayın: hareket için yukarı / aşağı / sol / sağla sınırlı değilsiniz (örneğin aramayı kullanabilirsiniz ...) ve gerektirmez uzun süre rahatsız edici bir tuş kombinasyonuna sahip olmanız.

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.