1 poin oleh GN⁺ 2024-07-09 | 1 komentar | Bagikan ke WhatsApp

Mengapa input teks di terminal itu rumit

  • Saat bertanya di Mastodon tentang hal-hal yang membuat orang bingung saat bekerja di terminal, yang menonjol adalah "mengedit perintah yang sudah diketik"
  • Ingin membagikan alasan mengapa input teks di terminal sulit serta beberapa tips yang berguna

Kurangnya konsistensi antarprogram

  • Cara berbagai program menangani input teks tidak konsisten
    • Beberapa program (cat, nc, git commit --interactive, dll.) sama sekali tidak mendukung tombol panah
    • Banyak program (irb, python3, dll.) menggunakan library readline untuk menyediakan fungsi dasar
    • Beberapa program hanya mendukung fungsi yang sangat mendasar
    • Beberapa program memiliki sistem input yang sepenuhnya dikustomisasi

Mode 1: keadaan dasar

  • Keadaan dasar saat program hanya menerima input teks secara sederhana
    • Menyediakan fungsi dasar seperti input teks, backspace, Ctrl+W, Ctrl+U, dan sebagainya
    • Semua kode Ctrl yang didukung bisa dilihat dengan perintah stty -a

Mode 2: alat yang menggunakan readline

  • readline adalah library GNU yang membuat input teks lebih nyaman
    • Menyediakan shortcut berguna seperti Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R, dan sebagainya
    • Banyak program seperti bash, psql, irb, python3 menggunakan readline

Tips: gunakan rlwrap untuk memakai readline

  • Dengan rlwrap, program yang tidak mendukung readline pun bisa menggunakan fitur readline

Mengapa ada alat yang tidak menggunakan readline

  • Misalnya karena programnya sangat sederhana, ada masalah lisensi, atau interaksinya minim

Cara memeriksa apakah readline digunakan

  • Jika menekan Ctrl+R menampilkan reverse-i-search, kemungkinan besar program tersebut menggunakan readline

Asal-usul key binding readline

  • Key binding readline berasal dari Emacs

Mode 3: library input lain (libedit, dll.)

  • /usr/bin/python3 di Mac menggunakan libedit sehingga hanya mendukung sebagian fitur readline

Mode 4: sistem input kustom

  • Editor teks seperti nano, micro, vim, emacs dan shell seperti fish memiliki sistem input kustom
  • Sistem kustom ini sering kali terinspirasi dari readline

Banyak shell mendukung key binding vi

  • bash, zsh, fish, dll. mendukung "mode vi" untuk input teks

Memahami konteks itu membantu

  • Saat mengetik teks di command prompt, memahami konteks membuat perilakunya lebih mudah diprediksi dan tidak terlalu membingungkan

Hal-hal yang tidak dibahas dalam tulisan ini

  • Masalah terkait ssh, tmux, variabel lingkungan TERM, dukungan copy/paste di berbagai terminal, Unicode, dan lain-lain

Ringkasan GN⁺

  • Menjelaskan mengapa input teks di terminal itu rumit dan mengapa ada kurangnya konsistensi antarberbagai program
  • Menunjukkan cara membuat input teks lebih nyaman dengan menggunakan library seperti readline
  • Memberikan tips untuk menambahkan fitur readline dengan rlwrap
  • Menekankan pentingnya memahami konteks saat menggunakan terminal

1 komentar

 
GN⁺ 2024-07-09
Komentar Hacker News
  • Tulisan Julia selalu bagus

    • di shell script, stty bisa digunakan untuk mengubah cara terminal memproses input
    • membagikan eksperimen yang bisa menangkap dan memahami kombinasi keyboard serta gestur mouse di terminal yang kompatibel dengan VT100
    • demo bisa dijalankan dengan perintah bash -c "$(curl -L https://git.io/fjToH)"
    • urutan escape VT100 dari program interaktif bisa dilihat dengan vi | cat -v
  • Hal-hal yang tidak dibahas dalam tulisan

    • karakter lebar
    • urutan escape ANSI yang berbeda tergantung mode keyboard
    • berbagai status TTY
    • system call untuk mengubah status TTY yang berbeda di tiap OS
    • perbedaan dukungan emulasi terminal
    • kurangnya kesepakatan tentang cara memeriksa kemampuan terminal
  • jika $EDITOR diatur di bash, baris saat ini bisa dikirim ke $EDITOR dengan ctrl-x ctrl-e

  • 20 tahun lalu membuat editor multi-baris menggunakan readline

    • termasuk perpindahan kursor dan fitur gambar ulang saat ukuran terminal berubah
    • ingin menulis ulang dalam Rust dan merilisnya sebagai pustaka kecil
  • pertanyaan tentang cara kerja fungsi fgets()

    • secara default, fgets() akan memblokir sampai pengguna memasukkan baris baru
    • buffer baris bisa diedit dengan shortcut Backspace, Ctrl+W, dan Ctrl+U
  • pendapat bahwa terminal adalah salah satu alasan yang menurunkan pangsa pasar Linux

    • pengalaman menggunakan terminal itu rumit
  • bantahan terhadap pendapat bahwa shell dash tidak mendukung tombol panah

    • jika dikompilasi dengan libedit, mode pengeditan didukung
    • standar POSIX mewajibkan dukungan untuk set -o vi
  • tiga keybinding readline dasar yang berguna untuk diketahui orang

    • Ctrl+W: hapus kata terakhir
    • Ctrl+O: jalankan baris berikutnya dari riwayat
    • Ctrl+R: pencarian mundur di riwayat
  • keluhan tentang cara kerja Ctrl-C dan Ctrl-V di Windows Terminal

    • aplikasi terminal Linux tidak berperilaku seperti Windows Terminal
  • pendapat yang mengingatkan pada tulisan klasik Linus