Kosongkan setengah layar dari baris perintah

11

Apakah ada cara untuk menghapus terminal tetapi bukannya meninggalkan prompt di bagian atas layar dan membiarkannya di tengah? Sepertinya clearpada dasarnya mengabaikan semua parameter baris perintah.

Saya pikir akan ada beberapa cara untuk melakukan ini dengan tputtetapi tidak dapat menemukannya.

fizzyh2o
sumber

Jawaban:

12

Anda dapat menggunakan tputuntuk memindahkan kursor ke baris yang diberikan di layar, misalnya,

tput cup 11 0

untuk memindahkannya ke baris kedua belas (nilai dihitung dari nol).

Di sepanjang garis yang sama, Anda dapat menggunakan tputuntuk menghapus dari posisi itu ke ujung layar, menggunakan edkapabilitas. Menggabungkan,

tput cup 11 0 && tput ed

mungkin apa yang diinginkan.

Jika Anda ingin pergi ke tanda setengah di layar, angka pertama dikembalikan oleh

stty size

adalah (pada kebanyakan sistem) jumlah baris layar. Menambahkan itu ke perintah:

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

The clearProgram berbeda dari tput ed:

  • itu memindahkan kursor ke posisi home (kiri atas) dan
  • membersihkan dari titik itu ke ujung layar.

Peringatan: pada beberapa platform tput edmungkin tidak berfungsi karena masalah telah diperbaiki sejak lama. Dalam kasus tersebut, meningkatkan konfigurasi kutukan / ncurses Anda akan memperbaiki masalah.

Thomas Dickey
sumber
di unix, ini tidak menghapus teks untuk saya, tetapi memindahkan kursor
James Owers
1
Kedengarannya seperti bug yang diperbaiki sepuluh tahun yang lalu. Mungkin sudah waktunya untuk memperbarui.
Thomas Dickey
0

Jika jumlah baris ganjil maka tput cuphapus seluruh halaman.
menulisnya seperti ini harus memperbaikinya:

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed
Farzad Sadeghi
sumber
-1

Jika Anda tertarik untuk mengosongkan bagian bawah layar sambil mempertahankan sisanya, maka ini akan berhasil:

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

EDIT: Untuk memperjelas, jika Anda menjalankan seq $(stty size | cut -d' ' -f1)jawaban lain akan meninggalkan bagian pertama dari output, sedangkan perintah ini akan meninggalkan bagian kedua (yaitu keluaran terbaru).

GjjvdBurg
sumber