27

Проблема: я использую ноутбук на ходу и подключаюсь к внешнему монитору в офисе. Учитывая, что внешний монитор очень большой, мне нужно увеличить шрифты в существующем окне iTerm2 (обычно один) и на всех вкладках.
Обходной путь : я масштабирую шрифты 2-4 раза (нажимая Cmd-+) для каждой вкладки, которую я открываю в окне (обычно только одна).

Вопрос: Есть ли простой способ автоматизировать увеличение / уменьшение размера шрифта для всех вкладок текущего окна? Или, если бы мне пришлось создать два отдельных профиля, мог бы я легко применить какой-либо профиль ко всем в настоящее время открытым вкладкам в окне?

1 ответ1

23

Есть действительно дерьмовый и глючный способ автоматизировать это, но я все равно выложу.

Вы можете создать новый профиль в настройках iTerm2 (панель "Профиль"). Давайте назовем это "LargeFont". Вы можете клонировать его из стандартного, нажав ⌘ =.

Установите размер шрифта, который вы хотите, чтобы он отображался в текстовой панели вновь созданного профиля.

Теперь вот трюк. Вы не можете изменить размер шрифта или профиль сеансов терминала, используя AppleScript (по крайней мере, я не нашел способа), но вы можете выполнять команды в каждом сеансе, используя AppleScript, и в iTerm2 есть специальная escape-последовательность, которая поддерживает изменение профилей для сеанса, в котором он был echo .

Итак, вы можете выполнить это:

echo -e "\033]50;SetProfile=LargeFont\a"

в каждом открытом сеансе сменить профиль терминала на "LargeText".

Теперь мы можем использовать AppleScript для автоматизации выполнения всех открытых сессий:

tell application "iTerm"
    repeat with theTerminal in terminals
        tell theTerminal
            repeat with theSession in sessions
                tell theSession
                    write text "echo -e '\\033]50;SetProfile=LargeText\\a'"
                end tell
            end repeat
        end tell
    end repeat
end tell

Обратите внимание, что он просто записывает текст (буквально) в каждый сеанс, поэтому, если у вас есть какой-либо текстовый редактор, открытый на одной из ваших вкладок - он не будет работать в нем и вставит команду echo в ваш код / файл конфигурации вместо. Если на одной из вкладок запущена команда ping - она тоже не будет работать.
Вы должны убедиться, что ни в одной из ваших оболочек не работает интерактивный материал.

Вы также оставите эти команды в истории вашей оболочки. Вы можете обойти это, добавив пробел перед самой командой (например, echo -e ...), это работает по крайней мере в zsh.

Вот функция Zsh:

function iterm_change_profile() {
    osascript -e "
        tell application \"iTerm\"
            repeat with theTerminal in terminals
                tell theTerminal
                    repeat with theSession in sessions
                        tell theSession
                            write text \" echo -e \\\"\\\\033]50;SetProfile=$1\\\\a\\\"\"
                        end tell
                    end repeat
                end tell
            end repeat
        end tell"
}

Таким образом, вы можете использовать это так:

iterm_change_profile LargeFont

Есть также недостаток - когда вы меняете профиль с более крупного шрифта на меньший, окно iTerm значительно изменяется.

Но, опять же, это действительно дерьмовый путь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .