Perilaku ini berasal dari fitur "layar alternatif" yang termasuk dalam beberapa terminal (perangkat keras) dan sebagian besar emulator terminal (perangkat lunak). Apa yang terjadi adalah bahwa beberapa program terminal sadar beralih ke 'layar' alternatif untuk melakukan pekerjaan mereka dan beralih kembali ke 'layar' normal ketika mereka diberhentikan (keluar, ditangguhkan, dll.). Ini secara efektif membersihkan hasil akhir dari program tersebut.
Pencarian web untuk "terminfo mencegah altscreen" menyediakan halaman yang membahas 'masalah' layar alternatif dan beberapa solusi .
Seperti yang dijelaskan oleh halaman tertaut itu, beberapa program dapat dikonfigurasi untuk menghindari penggunaan layar alternatif. The -X
pilihan untuk kurang adalah cara tidak langsung untuk melakukan hal ini. Vim dapat dikonfigurasi dengan cara yang sama dengan membatalkan t_ti
dan t_te
variabel.
Solusi dengan cakupan yang lebih luas adalah mengedit entri terminfo untuk terminal Anda sehingga tidak menyertakan urutan kontrol layar alternatif. Entri terminfo membentuk database yang memberi tahu program yang mengontrol urutan untuk dikirim ke terminal untuk membuat efek tertentu (memindahkan kursor, membersihkan layar, menghapus bagian dari baris saat ini, dll.). Dengan mengedit entri terminfo yang digunakan terminal Anda, Anda dapat mengatur untuk 'lalai memberi tahu' semua program penggunaan terminfo bahwa sekuens kontrol "layar alternatif" bahkan ada.
Dari daftar urutan kontrol untuk xterm , kita dapat melihat bahwa urutan kontrol yang menarik (untuk emulator terminal mirip- xterm ) adalah
- aktifkan layar alternatif:
ESC [ ? 47 h
(juga untuk 1047 dan 1049), dan
- pulihkan layar normal:
ESC [ ? 47 l
(demikian juga untuk 1047 dan 1049).
Kode-kode ini kemungkinan besar hadir dalam variabel terminfo smcup
dan rmcup
. Cara cepat dan kotor untuk mengeluarkan variabel-variabel ini untuk TERM Anda saat ini mungkin terlihat seperti ini:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Metode ini cukup kasar dan tentu saja tidak akan berfungsi untuk semua terminal, tetapi mungkin akan bekerja untuk sebagian besar emulator terminal mirip xterm . Idealnya Anda harus menyelidiki nilai-nilai dalam smcup
dan rmcup
variabel entri terminfo untuk terminal Anda dan mengeditnya secara konservatif untuk mencegah perilaku yang tidak diinginkan. Halaman diskusi / solusi yang ditautkan di atas memiliki file terminfo "pra-masak" yang mungkin Anda gunakan alih-alih meretas sendiri (tapi apa asyiknya itu?).