it-swarm.com.de

Erhöhen / Verringern der Schriftgröße in iTerm2

Problem: Ich verwende unterwegs einen Laptop und verbinde mich im Büro mit einem externen Monitor. Da der externe Monitor sehr groß ist, muss ich die Schriftarten im vorhandenen iTerm2-Fenster (normalerweise eine) und auf allen Registerkarten vergrößern.
Workaround: Ich skaliere die Schriftarten 2-4 mal (durch Drücken von Cmd-+) für jede Registerkarte, die ich in einem Fenster geöffnet habe (normalerweise) nur einer).

Frage: Gibt es eine einfache Möglichkeit, das Erhöhen/Verringern der Schriftgrößefür alle Registerkarten der aktuellen zu automatisieren? Fenster? Oder: Wenn ich zwei separate Profile erstellen würde, könnte ich dann einfach ein Profil auf alle derzeit geöffneten Registerkarten in einem Fenster anwenden?

28
van

Es gibt einen wirklich beschissenen und fehlerhaften Weg, dies zu automatisieren, aber ich werde es trotzdem posten.

Sie können ein neues Profil in den Einstellungen von iTerm2 (Bereich Profil) erstellen. Nennen wir es "LargeFont". Sie können es aus dem Standard klonen, indem Sie ⌘ = drücken.

Legen Sie die Schriftgröße fest, die im Textbereich des neu erstellten Profils angezeigt werden soll.

Hier ist der Trick. Sie können weder die Schriftgröße noch das Profil der Terminalsitzungen mit AppleScript ändern (zumindest habe ich keinen Weg gefunden), aber Sie können Befehle in jeder Sitzung mit AppleScript ausführen, und es gibt eine benutzerdefinierte Escape-Sequenz in iTerm2, die dies ermöglicht unterstützt das Ändern von Profilen für die Sitzung, in der echo eingegeben wurde.

So können Sie das ausführen:

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

in jeder geöffneten Sitzung, um das Terminalprofil in "LargeText" zu ändern.

Jetzt können wir AppleScript verwenden, um die Ausführung für alle geöffneten Sitzungen zu automatisieren:

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

Bitte beachten Sie, dass nur der Text (buchstäblich) in jede Sitzung geschrieben wird. Wenn Sie also einen Texteditor auf einer Ihrer Registerkarten geöffnet haben, funktioniert er nicht und fügt den Echo-Befehl in Ihre Code-/Konfigurationsdatei ein stattdessen. Wenn auf einer der Registerkarten ein Ping-Befehl ausgeführt wird, funktioniert er auch nicht.
Sie sollten sicherstellen, dass in keiner Ihrer Shells interaktive Inhalte ausgeführt werden.

Sie haben diese Befehle auch noch im Verlauf Ihrer Shell. Sie können es umgehen, indem Sie vor dem Befehl selbst ein Leerzeichen einfügen (wie echo -e ...). Dies funktioniert zumindest in zsh.

Hier ist die zsh-Funktion:

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"
}

Du könntest es also so benutzen:

iterm_change_profile LargeFont

Es gibt auch einen Nachteil: Wenn Sie das Profil von dem mit der größeren Schriftart auf das kleinere ändern, ändert sich die Fenstergröße des iTerm erheblich.

Aber es ist wieder ein wirklich beschissener Weg.

23
Igor Hatarist