Увеличение / уменьшение размера шрифта в iTerm2

31

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

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

фургон
источник

Ответы:

25

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

Вы можете создать новый профиль в настройках 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 значительно изменяется.

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

Игорь Хатарист
источник
Спасибо, я попробую. В iTerm2 мне хотелось бы изменить также цветовой пресет (Solarized-Dark и Solarized-Light в зависимости от окружающего освещения). Я предполагаю, что я создам отдельный профиль для этого также.
ван
1
Спасибо, Игорь. Это сработало хорошо, хотя, как вы упомянули, это не самый чистый способ. И вы можете снять галочку с опции увеличения / уменьшения размера окна при изменении размера шрифта в общих настройках -> «Настроить окно при изменении размера шрифта».
ван
@van Хаха, я полностью пропустил этот вариант, спасибо!
Игорь Хатарист
только что обнаружил еще одну вещь: если я использую TmuxIntegration , изменение размера шрифта работает на всех вкладках (окна / панели tmux). Цвет все еще только на панели, хотя.
ван