Saya berada di terminal yang mendukung layar alternatif yang digunakan oleh less, vim, dll. Untuk mengembalikan tampilan sebelumnya setelah keluar. Itu fitur yang bagus, tetapi itu benar-benar mematahkan --quit-if-one-screen
sakelar less
karena dalam kasus itu lebih sedikit beralih ke layar alternatif, menampilkan datanya, angka-angka di luar hanya ada satu layar, dan keluar, dengan mengambil isi layar alternatif dengannya.
Solusi yang umum disarankan adalah menggunakan --no-init
sakelar untuk menghindari penggunaan layar alternatif sama sekali. Namun, ini agak jelek karena saya tidak ingin menggunakannya dalam kasus kurang benar-benar bertindak sebagai pager. Karena itu saya mencari solusi untuk menggunakan layar alternatif hanya jika lebih sedikit tidak berhenti secara otomatis.
Saya sebagian besar akan menggunakan ini sebagai pager Git, jadi skrip shell pembungkus yang hanya berjalan kurang jika ada cukup output juga akan baik-baik saja. Setidaknya jika tidak ada cara untuk melakukannya tanpa itu.
Jawaban:
Sejak kurang 530 (dirilis pada Desember 2017),
less --quit-if-one-screen
tidak beralih ke layar alternatif jika terbaca kurang dari satu layar penuh. Jadi Anda tidak akan memiliki masalah ini jika versi Anda kurang cukup baru.Pada versi sebelumnya, lebih sedikit yang harus memutuskan apakah akan menggunakan layar alternatif ketika dimulai. Anda tidak dapat menunda pilihan itu saat berakhir.
Anda bisa menelepon lebih sedikit, membiarkannya menggunakan layar alternatif, dan memasukkan konten ke layar utama jika kurang otomatis dihentikan. Namun saya tidak tahu cara mendeteksi penghentian otomatis.
Di sisi lain, tidak sulit untuk memanggil cat untuk input pendek dan lebih sedikit untuk input yang lebih besar, bahkan menjaga buffering sehingga Anda tidak perlu menunggu seluruh input untuk mulai melihat barang-barang lebih sedikit (buffer mungkin sedikit lebih besar - Anda tidak akan melihat apa pun sampai Anda memiliki setidaknya satu layar penuh data - tetapi tidak lebih).
Anda mungkin lebih suka melihat garis-garis pada layar utama saat mereka masuk, dan beralih ke layar alternatif jika garis-garis itu akan menyebabkan pengguliran.
sumber
$n
)#!/bin/bash
skrip karena Anda menggunakan konstruk spesifik-bash, karena skrip Anda tidak akan berfungsi pada sistem (seperti Ubuntu) di mana/bin/sh
bukan bash.less
bisa juga (tetapi tidak) memiliki cara opsional untuk berhenti di mana ia mencetak isi layar saat ini setelah mengirim string un-init. Jadi Anda bisa mendapatkan manfaat dari layar alternatif tidak mengacaukan scrollback, tetapi tetap meninggalkan bagian yang relevan dari halaman manual atau apa pun di terminal setelah keluar.GNU less v. 530 menggabungkan Fedora-patch yang dirujuk oleh @ paul-antoine-arras dan tidak akan lagi menampilkan urutan inisialisasi terminal saat
--quit-if-one-screen
digunakan dan input sesuai pada satu layar.sumber
brew install less
, dan memastikan$LESS
memiliki F dan menghilangkan X.Untuk input yang lambat, seperti
git log -Gregex
, Anda ingin:A) baris untuk muncul di layar utama saat mereka masuk, kemudian beralih ke layar alternatif begitu bergulir diperlukan (sehingga yang pertama
$LINES
dari output akan selalu muncul di scrollback Anda); jika demikian, pilih jawaban ke-2 dari Gilles .B) garis muncul di layar alternatif, tetapi keluar dari layar alternatif dan cetak garis ke layar utama jika pengguliran ternyata tidak perlu (jadi tidak ada output akan muncul di gulir balik Anda jika pengguliran diperlukan); jika demikian, gunakan skrip di bawah ini:
Ini
tee
adalah input ke file sementara, kemudian setelahless
keluar itucat
file sementara jika mengandung lebih sedikit garis dari tinggi layar:Gunakan dengan
export PAGER='/path/to/script'
. Itu sudah cukup untukgit
menggunakannya, kecuali Anda sudah menimpanyacore.pager
.Untuk kemungkinan peningkatan, lihat juga versi skrip saya yang sedikit lebih baik di: https://github.com/johnmellor/scripts/blob/master/bin/least
sumber
Ini telah lama dipecahkan di distro berbasis Red Hat dengan memodifikasi perilaku opsi -F dalam
less
kode sumber: lihat tambalan ini dari Proyek Fedora, yang versi pertamanya tanggal kembali ke 2008. Idenya adalah hanya untuk mendapatkan ketinggian terminal (yaitu jumlah maksimum garis yang dapat ditampilkan sekaligus) dan untuk menghilangkan urutan inisialisasi dan deinitialisasi ketika file cocok dalam satu layar. Jadi, tidak perlu untuk opsi -X dan -F dapat digunakan secara konsisten berapa pun panjang file.sumber