Jalur Terminal OS X tidak masuk ke scrollback

12

Saya memiliki masalah yang muncul saat menggunakan Terminal Mac OS X (TERM = xterm): kadang-kadang ia masuk ke keadaan di mana garis-garis yang menggulir dari atas tidak ditambahkan ke buffer scrollback. Saya tidak menggunakan screenatau serupa; ini adalah shell bash biasa di dalam tab Terminal.

Itu tidak melakukan ini segera setelah membuka tab baru. Saya percaya ini adalah efek samping dari sesuatu yang saya jalankan di tab masalah. Dugaan saya adalah bahwa ini ada hubungannya dengan emulasi xterm, mungkin wilayah gulir.

Apa yang tidak berhasil:

  • Reset lunak dan sulit melalui menu Shell
  • Berjalan resetdi tab

Apakah ada cara yang dapat diandalkan untuk mereset Terminal dan / atau status xterm?

Adakah yang bisa memberikan penjelasan untuk apa yang terjadi, bahkan jika satu-satunya perbaikan adalah dengan menutup tab dan membuka yang baru?

Steve Madsen
sumber
Apa versi Mac OS X yang Anda jalankan? Apakah Anda memiliki buffer pada sesuatu yang kurang dari "tidak terbatas" dan garis yang Anda lewatkan hanyalah garis tertua yang jatuh di bagian belakang buffer?
Spiff
Mac OS X 10.6.2, dan buffernya 10.000 baris, namun garis yang hilang adalah yang bergulir begitu saja dari layar. Jika saya membuka satu layar, garis-garis itu tidak ada di sana, dan pada kenyataannya ketika garis menggulir ke atas, halaman paling belakang dari scrollback tidak pernah berubah.
Steve Madsen

Jawaban:

19

Ini berarti bahwa terminal menggunakan penyangga layar alternatif. Ada layar utama, yang menggulir ke dalam log scrollback, dan layar alternatif yang tidak. Program "Layar penuh" atau "berorientasi layar" seperti atas, kurang, emacs, vim, dan layar mengalihkan terminal ke layar alternatif secara default.

Setiap layar memiliki konten dan statusnya sendiri. Memiliki layar alternatif memungkinkan program untuk mengambil alih seluruh tampilan, lalu mengembalikan konten sebelumnya ketika keluar, dengan beralih kembali ke layar utama.

Pada Mac OS X Lion 10.7, Terminal memiliki item menu yang dapat Anda gunakan untuk berpindah layar secara manual:

Lihat> Tampilkan / Sembunyikan Layar Alternatif

Ini disediakan terutama agar Anda dapat melihat atau menyalin teks dari layar alternatif setelah program "layar penuh" keluar. Xterm memiliki perintah serupa.

Anda juga dapat menggunakannya untuk memaksa program secara manual menggunakan layar tertentu, untuk mengontrol apakah output masuk ke scrollback log, misalnya. Namun, jika saat ini Anda menggunakan program yang secara eksplisit beralih ke layar alternatif, Anda dapat membingungkannya atau mendapatkan hasil yang tidak terduga jika Anda memaksanya ke layar utama saat program sedang berjalan, jadi gunakan ini dengan hati-hati.

Tergantung pada programnya, ia mungkin memiliki argumen baris perintah atau cara lain untuk mengonfigurasinya agar menggunakan layar utama. misalnya less -X,.

Beberapa entri terminfo dirancang khusus untuk menekan menggunakan layar alternatif, misalnya xterm1,. TERM=xterm1 emacsakan menjalankan Emacs di layar utama. Saya tidak merekomendasikan menggunakan xterm1secara permanen, karena ini menonaktifkan sejumlah fitur berguna lainnya dibandingkan dengan default xterm-256colorpada Lion.

Anda juga dapat mengganti layar menggunakan tputperintah untuk mengeluarkan urutan keluar dari dalam shell atau skrip. tput smcupberalih ke layar alternatif, dan tput rmcupberalih kembali ke layar utama.

Untuk melihat program mana yang sedang berjalan, lihat nama program yang ditampilkan di jendela Terminal atau judul tab, atau lihat jendela Inspektur ( Shell> Show Inspector ). Proses terakhir dalam daftar di Inspektur adalah (biasanya) program saat ini menggunakan layar. Itu yang Anda harus mengkonfigurasi untuk menggunakan layar utama sebagai gantinya.

Chris Page
sumber
1
Ini terdengar seperti jawaban yang sangat menjanjikan. Apakah penjelasan yang masuk akal bahwa suatu program dapat berhenti secara tidak normal, membiarkan layar alternatif aktif?
Steve Madsen
Jika Anda kembali ke shell setelah menjalankan program "layar penuh", ya, itu kemungkinan, meskipun sebagian besar program populer, seperti yang saya sebutkan, dapat diandalkan untuk membersihkan setelah mereka sendiri. Jika program "layar penuh" macet, ia mungkin meninggalkan terminal pada layar alternatif. Namun, Anda mengatakan Anda mencoba Shell> Send Hard Reset , yang termasuk beralih kembali ke layar utama. Jika itu terjadi lagi, Anda dapat mencoba menggunakan perintah ini untuk beralih kembali:tput rmcup
Chris Page
Kemungkinan lain adalah bahwa program meninggalkan terminal dengan "wilayah gulir". Ada kode untuk memberitahu terminal untuk hanya menggulirkan sub-rentang garis saat menggulir. Program menggunakan ini untuk menampilkan garis status, misalnya, yang tidak menggulung layar. Jika wilayah gulir tidak termasuk baris teratas, teks tidak akan menggulir ke dalam log gulir balik. Namun, sekali lagi, Anda mengatakan Anda mencoba Hard Reset, yang juga harus menghapusnya.
Chris Page
2
Dalam kasus saya, apa yang tampaknya terjadi adalah bahwa sshsesi saya ke mesin jarak jauh gagal (batas waktu?) Ketika saya masuk vi, tampaknya meninggalkan terminal di Layar Alternatif (karena vitidak pernah diberi kesempatan untuk membersihkan). Setelah itu, setiap sshsesi baru di terminal yang sama akan menunjukkan masalah yang dijelaskan oleh OP, sampai saya menyelesaikan masalah dengan memilih item menu View> Hide Alternate Screen .
Hephaestus
Terima kasih, Lihat> Tampilkan / Sembunyikan Layar Alternatif membantu. Ini memiliki kombinasi kunci yang harus saya tekan tanpa sadar dan tidak tahu apa yang terjadi atau bagaimana membatalkan
aexl