Terminalde metin girişinin neden karmaşık olduğu
- Mastodon'da insanlara terminalde çalışırken neyin kafa karıştırıcı olduğunu sorduğumda, öne çıkan şeylerden biri "zaten yazılmış komutu düzenlemek" oldu
- Terminalde metin girişinin neden zor olduğunu ve birkaç yararlı ipucunu paylaşmak istiyorum
Programlar arasında tutarlılık eksikliği
- Farklı programların metin girişini ele alma biçimi tutarlı değil
- Bazı programlar (
cat, nc, git commit --interactive vb.) ok tuşlarını hiç desteklemez
- Birçok program (
irb, python3 vb.) temel işlevleri sağlamak için readline kütüphanesini kullanır
- Bazı programlar yalnızca temel işlevleri destekler
- Bazı programların tamamen özelleştirilmiş giriş sistemleri vardır
Mod 1: temel durum
- Programın metin girişini sadece kabul ettiği temel durum
- Metin girişi, backspace,
Ctrl+W, Ctrl+U gibi temel işlevleri sağlar
- Desteklenen tüm Ctrl kodlarını
stty -a komutuyla görebilirsiniz
Mod 2: readline kullanan araçlar
readline, metin girişini daha kullanışlı hale getiren bir GNU kütüphanesidir
Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R gibi yararlı kısayollar sunar
bash, psql, irb, python3 gibi birçok program readline kullanır
İpucu: rlwrap ile readline kullanmak
rlwrap kullanarak readline desteği olmayan programlarda da readline özelliklerini kullanabilirsiniz
Araçların neden readline kullanmadığı
- Programın çok basit olması, lisans sorunları ya da etkileşimin az olması gibi nedenler
readline kullanılıp kullanılmadığını nasıl anlarsınız
Ctrl+R tuşuna bastığınızda reverse-i-search görünüyorsa büyük olasılıkla readline kullanılıyordur
readline tuş atamalarının kökeni
readline tuş atamaları Emacs'ten gelir
Mod 3: diğer giriş kütüphaneleri (libedit vb.)
- Mac'teki
/usr/bin/python3, libedit kullanır ve readline işlevlerinin yalnızca bir kısmını destekler
Mod 4: özelleştirilmiş giriş sistemi
nano, micro, vim, emacs gibi metin düzenleyiciler ve fish gibi kabuklar özelleştirilmiş giriş sistemlerine sahiptir
- Özelleştirilmiş sistemler çoğu zaman
readlinedan esinlenir
Birçok kabuk vi tuş atamalarını destekler
bash, zsh, fish vb. metin girişi için "vi modu"nu destekler
Bağlamı anlamak yardımcı olur
- Komut satırı isteminde metin girerken içinde bulunduğunuz durumu anlamak, işleri daha öngörülebilir ve daha az kafa karıştırıcı hale getirir
Bu yazıda ele alınmayanlar
- ssh, tmux ile ilgili sorunlar,
TERM ortam değişkeni, farklı terminallerin kopyala/yapıştır desteği, Unicode vb.
GN⁺ özeti
- Terminalde metin girişinin neden karmaşık olduğunu ve farklı programlar arasındaki tutarsızlığı açıklar
readline gibi kütüphanelerle metin girişini daha kullanışlı hale getirmenin yollarını sunar
rlwrap ile readline özelliklerini eklemeye yönelik bir ipucu verir
- Terminal kullanırken bağlamı anlamanın önemli olduğunu vurgular
1 yorum
Hacker News yorumu
Julia’nın yazıları her zaman güzeldir
sttykullanarak terminalin girdi işleme biçimi değiştirilebilirbash -c "$(curl -L https://git.io/fjToH)"komutuyla çalıştırılabilirvi | cat -vkullanarak etkileşimli programların VT100 kaçış dizileri görülebilirYazıda eksik kalanlar
bash’te $EDITOR ayarlanırsa ctrl-x ctrl-e ile mevcut satır $EDITOR’e gönderilebilir
20 yıl önce readline kullanarak çok satırlı bir düzenleyici yaptım
fgets()fonksiyonunun nasıl çalıştığına dair bir sorufgets()varsayılan olarak kullanıcı yeni satır girene kadar bloklanırTerminalin Linux’un pazar payını düşüren nedenlerden biri olduğu görüşü
dash shell’in ok tuşlarını desteklemediği görüşüne itiraz
set -o videsteği zorunlu olmalıİnsanların bilmesinin faydalı olacağı üç temel readline tuş ataması
Windows Terminal’de Ctrl-C ve Ctrl-V’nin çalışma biçimine yönelik şikâyet
Linus’un klasik yazısını hatırlatan bir yorum