Mój skrypt robi coś takiego:
while :;
clear
do_a_lot_of_output_here
sleep 1
done
Czy jest jakaś opcja, aby zapobiec mruganiu ekranu, gdy wykonuję czyszczenie i wyświetlanie? Chcę to zrobić jak w watch
poleceniu (ale jest napisane C
). Jakieś porady?
clear | hexdump -C
00000000 1b 5b 48 1b 5b 32 4a |.[H.[2J|
00000007
PS. Używam bash
tylko.
clear | hexdump -C
?echo -en "\ec"
flash też?Odpowiedzi:
Miganie występuje, ponieważ skrypt czyści cały ekran. Jeśli maluje istniejący tekst i czyści tylko w razie potrzeby, nie będzie migotania.
Oto przykład:
Robi to:
ed
możliwości twojego terminala do drukowania od bieżącej lokalizacji do końca ekranu.Jeśli chcesz obsłużyć ekran o zmiennym rozmiarze, możesz przenieść zadania do
ROWS
iCOLS
wewnątrz zewnętrznej pętli, np.ponieważ
tput
prosi o bieżący rozmiar ekranu z systemu.Dalsza lektura:
terminfo
- baza danych zdolności terminalowychtput
,reset
- zainicjuj bazę terminali lub zapytanie terminfoźródło
#!/bin/bash
i chcą korzystać zwatchit
osadzonego w małym samodzielnym skrypcie z niektórymi funkcjami, możesz to zrobićexport -f function_name; watchit function_name
.head
). Wydaje się, że problemem jest błąd „jeden po drugim” (przynajmniej w mojej konfiguracji - sesja ssh w podzielonych oknach, iTerm2) podczas obliczania liczby wierszy.ROWS=`expr $(tput lines) - 1`
zajął się tym doskonale.Jednym ze sposobów zapobiegania miganiu jest uzyskanie wszystkich danych wyjściowych przed wyczyszczeniem ekranu, tak aby pomiędzy czyszczeniem a przerysowaniem było jak najmniej czasu. Jest to podobne do koncepcji podwójnego buforowania:
Nie eliminuje to całkowicie migotania, ale z mojego doświadczenia zdarza się to znacznie rzadziej.
źródło
clear
do bufora, tjoutput=$(clear; do_a_lot_of_output_here)
.Miganie jest nieuniknionym rezultatem czyszczenia ekranu za każdym razem wokół pętli. Możesz przesunąć kursor na górę ekranu i zamiast tego zastąpić fragmenty starych wyników.
Ten skrypt pozostawi artefakty, jeśli twój wynik się zmniejszy. Jest również mało prawdopodobne, aby był przenośny. Testowałem to tylko z urxvt, xterm i st.
źródło
tput clear
z tymi samymi wynikami (mruganie)tput ed
. Ale powoduje mruganietput ed
tuż przeddo_a_lot...
linią, widzę miga w urxvt ale nie xterm lub ul.Jako rozszerzenie odpowiedzi Cristiana stworzyłem następującą funkcję bash, która działa, jeśli okno konsoli jest mniejsze niż wynik polecenia:
To pozwala przekazać dowolne polecenie obserwatorowi. Jeśli używasz git, użyj,
git config --global color.status always
a następnie:Wyświetla zawsze aktualizowany wynik statusu git.
źródło