3 votos

Cómo tener un color de fondo aleatorio en Terminal.app

En los días de X11, tenía un script que elegía aleatoriamente un color de fondo pastel y luego abría un nuevo xterm. Esto era fácil de hacer porque podía pasar un argumento para (según recuerdo) -background.

¿Tiene Terminal.app una interfaz de este tipo? Yo preferiría hacer esto a través de un bash script pero puedo hacer frente a AppleScript si es necesario.

Suelo utilizar pestañas dentro de una ventana de Terminal, lo que también puede complicar las cosas.

Actualmente estoy en Mojave.

0 votos

A ver si alguien encuentra una solución AppleScript para esto. ¿Cómo quieres que se manejen los colores de las fuentes para asegurarte de que siempre puedas leer el texto en el Terminal?

5voto

Yoric Puntos 268

Efectivamente, puedes utilizar AppleScript para cambiar el color de fondo del Terminal.

Por ejemplo:

tell application "Terminal"
  set background color of first window to {33717, 0, 21000, 32288}
end tell

Puedes ejecutarlo desde la línea de comandos con:

osascript -e 'tell application "Terminal"' -e 'set background color of first window to {33717, 0, 21000, 32288}' -e 'end tell'

A continuación, puede cambiar más atributos:

tell application "Terminal"
    set background color of first window to {33717, 0, 21000, 32288}
    set cursor color of first window to "white"
    set normal text color of first window to "white"
    set bold text color of first window to "yellow"
end tell

Para ejecutar este tipo de script más largo desde el Terminal, puedes guardarlo en un archivo separado ~/.terminal_change_color.scpt entonces, llámalo desde la terminal:

osascript ~/.terminal_change_color.scpt

A continuación, puede añadirlo a su ~/.bash_profile para que se ejecute por cada nueva ventana de Terminal que abra:

echo "osascript ~/.terminal_change_color.scpt" >> ~/.bash_profile

A continuación hay un script para elegir un color de fondo aleatorio. Como @nohillside notó, también hay que ajustar el color del texto para que sea legible (texto blanco sobre fondo oscuro, y texto negro sobre fondo claro). El script se encarga de ello.

global kColorValueMaximum
set kColorValueMaximum to 65535

-- Choose a random color for the background
set randomRed to (random number) * kColorValueMaximum
set randomGreen to (random number) * kColorValueMaximum
set randomBlue to (random number) * kColorValueMaximum
set myBackgroundColor to {randomRed, randomGreen, randomBlue}

-- Select appropriate text colors based on that background
set {myTextColor, myBoldColor} to my ContrastingTextColors(myBackgroundColor)

-- Now inflict them on the frontmost window
tell application "Terminal"
    set targetWindow to window 1
    set background color of targetWindow to myBackgroundColor
    set cursor color of targetWindow to myTextColor
    set normal text color of targetWindow to myTextColor
    set bold text color of targetWindow to myBoldColor
end tell

on ContrastingTextColors(myColor)
    set whiteColor to {kColorValueMaximum, kColorValueMaximum, kColorValueMaximum, kColorValueMaximum}
    set lightGreyColor to {40000, 40000, 40000, kColorValueMaximum}
    set blackColor to {0, 0, 0, kColorValueMaximum}
    set darkGreyColor to {20000, 20000, 20000, kColorValueMaximum}

    -- From http://www.wilsonmar.com/1colors.htm
    set myRed to (item 1 of myColor) / kColorValueMaximum
    set myGreen to (item 2 of myColor) / kColorValueMaximum
    set myBlue to (item 3 of myColor) / kColorValueMaximum
    set magicY to (0.3 * myRed) + (0.59 * myGreen) + (0.11 * myBlue)
    if (magicY < 0.5) then
        return {whiteColor, lightGreyColor}
    else
        return {blackColor, darkGreyColor}
    end if
end ContrastingTextColors

Alternativamente, puedes crear como 30 temas en tu Terminal Preferencias > Perfiles, y seleccionar uno al azar:

tell application "Terminal"
    set themes to {"Basic", "Homebrew", "Man Page", "Novel", "Pro"}
    set theme to some item of themes
    set current settings of window 1 to settings set theme
end tell

Créditos para:

0 votos

¡Santo cielo! :-). Mañana tengo que jugar con esto y verificar todo. Gracias por la impresionante respuesta.

0 votos

He llamado al gran script .xyz.scpt (por ahora) y luego he hecho: while : ;do osascript .xyz.scpt ; sleep 2 ; done y mira cómo cambian los colores cada dos segundos... Muy divertido. ¡Gracias de nuevo!

0 votos

Un problema que estoy viendo es que si abro una nueva ventana termainal, y luego cambio rápidamente el foco a otra ventana, es la ventana frontal la que se ve afectada, no la que se acaba de abrir. Problemas similares ocurren si, por ejemplo, un IDE (por ejemplo, PyCharm) abre una sesión de terminal dentro de su propia ventana, entonces la ventana de Terminal que está al frente tiene su color de fondo cambiado

1voto

JimM NH Puntos 1

He añadido algo a la espectacular respuesta de Yoric porque prefiero lo que yo llamo colores "pastel". Reemplazando las primeras siete líneas de su script largo script con:

global kColorValueMaximum
set kColorValueMaximum to 65535
set kColorValueRange to 32768
set kColorValueMinimum to kColorValueMaximum - kColorValueRange

-- Choose a random color for the background
set randomRed to (random number) * kColorValueRange + kColorValueMinimum
set randomGreen to (random number) * kColorValueRange + kColorValueMinimum
set randomBlue to (random number) * kColorValueRange + kColorValueMinimum

Hacer la gama 16384, para mí, era demasiado ligero. 32768 a veces da un color ligeramente oscuro, por lo que es posible que desee ajustar que para adaptarse a su gusto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X