І не кажіть " $TERM
" - це завжди xterm
.
Як bash
скрипт може сказати, в якому терміналі він працює, зокрема, чи це iTerm, Terminal.app чи насправді xterm?
Я запитую, бо reset
не працює з терміналу на Terminal.app та iTerm2. iTerm2, однак, розпізнає послідовність виходу для скидання терміналу ( \x1b]50;ClearScrollback\x07
), і якби я міг його виявити, я міг би замінити reset
псевдонім, який робить правильне. AFAICT, у Terminal.app не вистачає послідовності скидання, і люди вдаються до смішного хакерства, щоб зламати це .
Моєю кінцевою метою тут є те, щоб я reset
працював однаково, незалежно від того, працюю я на OS X або Linux, працюючи локально або віддалено через SSH. (Мені не хочеться намагатися запам’ятати, що, і це корисно робити reset && command-that-outputs-a-bunch
і працювати над початком роботи.) Terminal.app і iTerm кидають гайковий ключ у цей план, не виконуючи reset
належним чином.
Це означає, що просто переосмислення reset
не зовсім це: якщо я перебуваю на машині Linux, він повинен знати, використовую gnome-terminal
чи iTerm, щоб надіслати правильну послідовність виходу.
Чи є спосіб (навіть якщо мені потрібно ioctl
) запитати термінал, що це насправді ?
¹ Для цілей цього питання скидання має очистити екран, скинути курсор і витерти буфер прокрутки.
reset
, оскільки це знають мої пальці.
reset
команда очистить вміст прокрутки термінального емулятора, але це не гарантовано, тому що прокрутка - це особливість емулятора терміналу, а не справді частина терміналу. Однак Terminal підтримує розширення послідовності відключення ED (Erase in Display) для видалення прокрутки ESC [ 3 J
. Ви можете очистити екран, а потім скористатися цим, наприклад,reset && printf '\e[3J’
xterm
(наскрізний TERM=xterm
), я очікую, що ти будеш емулювати надмножину XTerm, яка очищає її прокрутку при скиді. (Так само, як якщо б ви надіслали послідовність втечі для "блакитного", ви очікували б блакитного.) Звичайно, мій xterm каже мені Erase is backspace.
, що я нічого не вдячний; це просто дратує.
Terminal.app
параметри, вкладку термінала та встановити лінії прокрутки на 0? Це відключає будь-який і весь текст над поточним рядком або просто що-небудь вгорі екрана? Я знаю, це не саме те, про що ви просили, варто зняти.