Ändern Sie die Schriftart des Terminals programmgesteuert ohne Neustart

Zu Hause habe ich ein schönes großes Display, das leider nicht die gleiche Auflösung hat wie mein Retina-Macbook.

Ich möchte eine Pixelschrift auf dem Bildschirm mit niedriger Auflösung und eine schöne glatte auf dem Retina-Bildschirm verwenden. Dazu habe ich ein Skript eingerichtet, das auf ein Ereignis lauscht, wenn das Display verbunden ist.

Ich habe zwei Profile in Terminal.app eingerichtet, eines für den Bildschirm mit niedriger Auflösung und eines für den Retina-Bildschirm.

Gibt es eine Möglichkeit, ein Profil zum "Standard" -Profil zu machen (z. B. mit Applescript), ohne Terminal.app neu zu starten (sonst defaults com.apple.terminal ...hätte es getan)

Das folgende Skript funktioniert, indem es das aktuelle Standardprofil ändert (es ist also nicht ganz das, was ich brauche, aber es könnte funktionieren, wenn ich die Namen aller Einstellungen finde, die ich ändern möchte):

#!/usr/bin/env osascript -l JavaScript
function run (argv) {
  var terminal = Application('Terminal');

  terminal.defaultSettings.fontName = 'creep';
  terminal.defaultSettings.fontSize = 16;

  // these don't seem to work
  // because I do not know their names, and it's hard to debug guessing them
  // terminal.defaultSettings.fontAntialiasing = false;
  // terminal.defaultSettings.fontHeigthSpacing = 0.8;
}

Ich müsste ein Skript schreiben, um die Änderungen rückgängig zu machen

Aus Neugier, welche Methode verwenden Sie, um verbundene Ereignisse anzuzeigen? Dies könnte wahrscheinlich über launchd erfolgen, wenn Sie den Namen des richtigen AppleEvents herausfinden können.
@phobox Ich verwende einen iokit-Listener, der das Skript auslöst, wenn ein bestimmtes USB-Gerät wie in dieser Antwort angeschlossen ist . Ich habe nie herausgefunden, wie das bei HDMI-Geräten geht, also verlasse ich mich darauf, dass ich ein FLIRC-USB-Gerät an denselben Hub angeschlossen habe, der auch das Display verbindet (das Display hat einen USB-Hub). Sie sollten aber Geräte einer anderen Klasse hören können IOUSBDevice. Alternativ können Sie einfach ein Skript ausführen, das etwa alle 2 Sekunden überprüft, ob das Display verbunden ist (z. B. mit ioreg -p IODisplayConnect).

Antworten (1)

Okay, nach einigem Herumalbern im AppleScript-Editor (er hat dieses nette Ding namens Wörterbuch , das Ihnen alle verfügbaren Befehle für eine bestimmte App zeigt) habe ich mich für dieses Skript entschieden:

#!/usr/bin/env osascript
on run {name}
  tell application "Terminal"
    set default settings to settings set name
    set current settings of tabs of windows to settings set name
  end tell
end run

Machen Sie es ausführbar ( chmod u+x change.applescript) und führen Sie es aus, indem Sie den Namen des zu aktivierenden Profils übergeben:

./change.applescript creep

Dieser Wille:

  • Ändern Sie das Standardprofil, sodass alle neuen Fenster es verwenden
  • Ändern Sie das Profil aller Registerkarten aller Fenster auf das neue Profil, damit auch offene Terminals es verwenden können!