Mam problem, który pojawia się, gdy używasz terminala Mac OS X (TERM = xterm): czasami przechodzi w stan, w którym linie przewijające się od góry nie są dodawane do bufora przewijania. Nie używam screen
lub podobny; jest to zwykła powłoka bash wewnątrz zakładki Terminal.
Nie robi tego natychmiast po otwarciu nowej karty. Wierzę, że to efekt uboczny czegoś, co uruchomiłem w zakładce problemu. Domyślam się, że ma to coś wspólnego z emulacją xterm, być może regionem przewijania.
Co nie zadziałało:
- Miękki i twardy reset za pomocą menu Shell
- Uruchamianie
reset
na karcie
Czy istnieje niezawodny sposób na zresetowanie terminala i / lub stanu xterm?
Czy ktoś może wyjaśnić, co się dzieje, nawet jeśli jedynym rozwiązaniem jest zamknięcie karty i otwarcie nowej?
Odpowiedzi:
Oznacza to, że terminal używa alternatywnego bufora ekranu. Istnieje ekran główny, który przewija się do dziennika przewijania, i ekran alternatywny, który nie. Programy „Pełny ekran” lub „zorientowane na ekran”, takie jak top, less, emacs, vim i screen domyślnie przełączają terminal na alternatywny ekran.
Każdy ekran ma własną zawartość i stan. Posiadanie alternatywnego ekranu pozwala programom przejąć cały ekran, a następnie przywrócić poprzednią zawartość po wyjściu, przełączając z powrotem na ekran główny.
Począwszy od systemu Mac OS X Lion 10.7, Terminal ma pozycję menu, za pomocą której można ręcznie przełączać ekrany:
Ma to przede wszystkim na celu wyświetlanie lub kopiowanie tekstu z alternatywnego ekranu po wyjściu z programu „pełnoekranowego”. Xterm ma podobne polecenie.
Można go również użyć do ręcznego wymuszenia na programie użycia określonego ekranu, aby na przykład kontrolować, czy dane wyjściowe trafiają do dziennika przewijania. Jeśli jednak obecnie używasz programu, który jawnie przełącza się na alternatywny ekran, możesz go pomylić lub uzyskać nieoczekiwane wyniki, jeśli narzucisz go na główny ekran podczas działania programu, więc używaj go ostrożnie.
W zależności od programu może on mieć argument wiersza polecenia lub inny sposób skonfigurowania go do korzystania z ekranu głównego. np
less -X
.Niektóre wpisy terminfo są specjalnie zaprojektowane w celu pomijania przy użyciu alternatywnego ekranu, np
xterm1
.TERM=xterm1 emacs
uruchomi Emacsa na ekranie głównym. Nie polecam używać naxterm1
stałe, ponieważ wyłącza wiele innych przydatnych funkcji w porównaniu do domyślnejxterm-256color
w Lionie.Możesz także przełączać ekrany za pomocą
tput
polecenia, aby wydawać sekwencje specjalne z wnętrza powłoki lub skryptu.tput smcup
przełącza na alternatywny ekran itput rmcup
przełącza z powrotem na główny ekran.Aby zobaczyć, który program jest obecnie uruchomiony, spójrz na nazwę programu wyświetlaną w oknie Terminala lub w tytule karty lub w oknie Inspektora ( Shell> Pokaż inspektora ). Ostatnim procesem na liście w Inspektorze jest (zwykle) bieżący program korzystający z ekranu. To właśnie musisz skonfigurować, aby zamiast tego używać głównego ekranu.
źródło
tput rmcup
ssh
sesja na zdalnym komputerze nie powiodła się (upłynął limit czasu?), Kiedy byłem wvi
środku, najwyraźniej pozostawiając terminal na alternatywnym ekranie (ponieważvi
nigdy nie dano szansy na wyczyszczenie). Następnie każda nowassh
sesja w tym samym terminalu wykazywałaby problem opisany przez OP, dopóki nie rozwiązałem problemu, wybierając pozycję Widok> Ukryj ekran alternatywny .