যেহেতু 530 কম (ডিসেম্বর 2017 এ প্রকাশিত হয়েছে), less --quit-if-one-screen
একের চেয়ে কম স্ক্রিনফুল পড়লে বিকল্প স্ক্রিনে স্যুইচ হয় না। সুতরাং আপনার কম সংস্করণটি সাম্প্রতিক হলে আপনার সমস্যা হবে না this
পূর্ববর্তী সংস্করণগুলিতে, বিকল্প স্ক্রিনটি শুরু হওয়ার পরে ব্যবহার করবেন কিনা তা কম সিদ্ধান্ত নিতে হবে। আপনি যে পছন্দটি স্থগিত করবেন তার সাথে স্থগিত করতে পারবেন না।
আপনি কম কল করতে পারেন, এটি বিকল্প স্ক্রিনটি ব্যবহার করতে দিন এবং যদি কম স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় তবে প্রাথমিক স্ক্রিনে সামগ্রীটি বিড়াল করুন। তবে আমি স্বয়ংক্রিয় সমাপ্তি সনাক্ত করার কোনও উপায় জানি না।
অন্যদিকে, সংক্ষিপ্ত ইনপুটগুলির জন্য বিড়ালকে কল করা এবং বৃহত ইনপুটগুলির জন্য কম কল করা এতটা কঠিন নয়, এমনকি বাফারিং সংরক্ষণ করাও যাতে কম পরিমাণে স্টাফ দেখা শুরু করতে আপনাকে পুরো ইনপুটটির জন্য অপেক্ষা করতে না হয় (বাফার হতে পারে কিছুটা বড় - আপনি কমপক্ষে একটি স্ক্রিনফুল ডেটা না পাওয়া পর্যন্ত আপনি কিছুই দেখতে পাবেন না - তবে বেশি কিছু নয়)।
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
lines=
newline='
'
case $LINES in
''|*[!0-9]*) exec less;;
esac
while [ $n -lt $LINES ] && IFS= read -r line; do
lines="$lines$newline$line"
done
if [ $n -eq $LINES ]; then
{ printf %s "$lines"; exec cat; } | exec less
else
printf %s "$lines"
fi
আপনি মূল স্ক্রিনে লাইনগুলি আসার সাথে সাথে দেখতে পছন্দ করতে পারেন এবং লাইনগুলি যদি স্ক্রলিংয়ের কারণ হয়ে থাকে তবে বিকল্প স্ক্রিনে স্যুইচ করতে পারেন।
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
beginning=
newline='
'
# If we can't determine the terminal height, execute less directly
[ -n "$LINES" ] || LINES=$(tput lines) 2>/dev/null
case $LINES in
''|*[!0-9]*) exec less "$@";;
esac
# Read and display enough lines to fill most of the terminal
while [ $n -lt $LINES ] && IFS= read -r line; do
beginning="$beginning$newline$line"
printf '%s\n' -- "$line"
n=$((n + 1))
done
# If the input is longer, run the pager
if [ $n -eq $LINES ]; then
{ printf %s "$beginning"; exec cat; } | exec less "$@"
fi