Czy można zmienić rozmiar okna terminalu za pomocą polecenia terminala?

38

Aby móc zmienić rozmiar okna do określonego rozmiaru z poziomu terminalu.

LopSae
źródło

Odpowiedzi:

58

Tak. Terminal obsługuje sekwencje specjalne do manipulowania oknami, w tym wielkość i położenie, nakładanie warstw i minimalizowanie. Wymiary mogą być wyrażone w pikselach lub znakach. Zobacz szczegóły Xterm Control Sequences (wyszukaj „Manipulowanie oknem”; jeśli nie znasz tej notacji, „CSI” oznacza „Control Sequence Introducer”, co oznacza ESC [).

Na przykład to polecenie powłoki ustawi okno na 100 x 50 znaków:

printf '\e[8;50;100t'

Zminimalizuj okno przez kilka sekund, a następnie przywróć je:

printf '\e[2t' && sleep 3 && printf '\e[1t'

Przenieś okno do górnego / lewego rogu wyświetlacza:

printf '\e[3;0;0t'

Powiększ okno:

printf '\e[9;1t'

Przesuń okno do przodu (bez zmiany ostrości klawiatury):

printf '\e[5t'

Włączanie sekwencji kontrolnych w emulatorach terminali

Niektóre emulatory terminali domyślnie ignorują te sekwencje kontrolne i wymagają konfiguracji, aby je włączyć.

Aby włączyć je w XTerm , ustaw następujący zasób na true:

allowWindowOps

Aby włączyć je w iTerm2 , usuń zaznaczenie następujących preferencji:

Preferencje> Profile> [profil]> Terminal> Wyłącz zmianę rozmiaru okna inicjowanego sesją

Chris Page
źródło
To jest po prostu idealne!
LopSae,
2
Od teraz jesteś moim bogiem!
d12 zamrożone
2
Wydaje się, że to nie działa na Yosemite z iterm2
Jistanidiot
Działa to świetnie, ale wydaje się, że Terminal nie akceptuje zmian rozmiaru, które sprawiłyby, że okno byłoby tylko częściowo widoczne na ekranie. Właśnie próbowałem printf '\ e [8; 100; 100t' i to zostało obcięte do 79x100, tylko to, co mogłoby pasować. Mój problem polega na tym, że muszę ominąć mysz tylko w tym przypadku powiększenia terminala poza granice ekranu ...
phs
1
Działa to również z iTerm2.
TextGeek
10

Zawsze możesz użyć AppleScript:

setwidth() { osascript -e "tell app \"Terminal\" to tell window 1
set b to bounds
set item 3 of b to (item 1 of b) + $1
set bounds to b
end"; }
Lri
źródło
Działa to tylko dla aktualnie aktywnego okna / karty terminala. Aby to działało niezawodnie, uzyskaj bieżącą nazwę ścieżki urządzenia tty i zlokalizuj pasującą kartę terminala.
Chris Page
Zobacz także superuser.com/a/576357
lhf
10

Zastosowanie /usr/X11/bin/resize.

resize -s 30 80 da ci 30 wierszy i 80 kolumn.

resize -s 30 0 da ci 30 wierszy i pełne kolumny.

resize -s 0 80 da ci pełne rzędy i 80 kolumn.

lhf
źródło
1
To rozwiązanie nie ogranicza się do MacOS. Jest oparty na terminalach, więc powinien działać na wszystkich terminalach. Używam tego do zmiany rozmiaru okien PuTTY w systemie Windows z uruchomionymi powłokami bash z TERM = xterm.
DrStrangepork,
4
Wydaje się, że to nie działa na Yosemite w iterm2.
Jistanidiot
Działa to dla mnie z terminalem Apple, ale nie iTerm2. Jednak wysyłanie sekwencji ucieczki \ e [8; 24; 80t działa z oboma.
TextGeek
1
@KrishenGreenwell Patrz dokumentacja iTerm2. Domyślnie ignoruje te sekwencje kontrolne. Istnieje preferencja, aby kontrolować, czy są one ignorowane.
Chris Page
1
To rozwiązanie kiedyś działało, ale myślę, że poleceń X11 już nie ma. Być może można je zainstalować, instalując X11, ale nie chcę instalować X11 tylko po to, aby uzyskać polecenie zmiany rozmiaru.
Gabriel
-2

Właściwie wiesz, przesuwanie okna zmiany rozmiaru za pomocą myszy jest strasznie wolne.

Używam tej aplikacji SizeUp od bardzo dawna. Zasadniczo zmienia rozmiar dowolnego okna aplikacji za pomocą polecenia klawiatury.

Możesz wykonać następujące czynności (moje niestandardowe polecenia klawiatury poniżej):

  • ustaw okno na pełny ekran ( control+ option+ command+ m)
  • przesuń okno o 1/2 rozmiaru ekranu w lewo lub w prawo ( control+ option+ command+ / )
  • przenieś rozmiar ekranu 1/4 okna do dowolnego rogu ( control+ option+ shift+ / / / )
  • przenosić okna między ekranami
  • przenosić okna między spacjami

Myślę, że to może załatwić sprawę, a także pomóc w zarządzaniu innymi oknami.

space_balls
źródło
Chociaż jest to przydatne, nie rozwiązuje to pytania zadanego przez pytającego.
Andrew Ferrier,