Cambiar la fuente de la Terminal mediante programación sin reiniciar

En casa tengo una pantalla grande y bonita que, lamentablemente, no tiene la misma resolución que mi retina macbook.

Me gustaría usar una fuente de píxeles en la pantalla de baja resolución y una suave y agradable en la pantalla retina. Para hacer esto, configuré un script que escucha un evento cuando la pantalla está conectada.

Configuré dos perfiles en Terminal.app, uno para la pantalla de baja resolución y otro para la pantalla retina.

¿Hay alguna manera de hacer que un perfil sea el perfil "predeterminado" (por ejemplo, usando applescript) sin reiniciar Terminal.app (de lo contrario defaults com.apple.terminal ...lo habría hecho)

El siguiente script funciona cambiando el perfil predeterminado actual (por lo que no es exactamente lo que necesito, pero podría funcionar si encuentro los nombres de todas las configuraciones que quiero cambiar):

#!/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;
}

Tendría que escribir un script para revertir los cambios.

Por curiosidad, ¿qué método están usando para escuchar y mostrar eventos conectados? Esto probablemente podría hacerse a través de launchd si puede encontrar el nombre del AppleEvent correcto.
@phobox Estoy usando un oyente iokit que activa el script cada vez que se conecta un determinado dispositivo usb como en esta respuesta . Nunca supe cómo hacerlo para dispositivos HDMI, así que cuento con el hecho de que tengo un dispositivo USB FLIRC conectado al mismo concentrador que también conecta la pantalla (la pantalla tiene un concentrador USB). Sin embargo , debería poder escuchar dispositivos de otra clase IOUSBDevice. Alternativamente, puede simplemente ejecutar un script que verifique si la pantalla está conectada cada 2 segundos más o menos (por ejemplo, usando ioreg -p IODisplayConnect).

Respuestas (1)

De acuerdo, después de jugar un poco en el editor de AppleScript (tiene una cosa agradable llamada diccionario que muestra todos los comandos disponibles para una aplicación determinada), me conformé con este script:

#!/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

Hazlo ejecutable ( chmod u+x change.applescript) y ejecútalo, pasando el nombre del perfil a activar:

./change.applescript creep

Esta voluntad:

  • cambie el perfil predeterminado, para que todas las ventanas nuevas lo usen
  • cambie el perfil de todas las pestañas de todas las ventanas al nuevo perfil, ¡para que los terminales abiertos también puedan usarlo!