Commande OS X Terminal pour changer les thèmes de couleur

17

Existe-t-il une commande qui peut être utilisée pour modifier le jeu de couleurs du terminal Mac OS X? J'aime l'idée de pouvoir changer les couleurs en fonction des scripts que j'exécute. Jusqu'à présent, je modifie simplement la couleur de mon invite bash avec PS1, ce qui est correct mais pas aussi visible que je le voudrais.

satur9nine
la source
Ce que je veux faire, c'est changer la couleur d'arrière-plan du terminal comme il le serait de la même manière que Terminal -> Preferences -> Settingssauf que je veux le faire avec une commande. Je veux créer un script qui va ressembler à ceci: changeBackgroundTheme; ssh; changeBackgroundTheme. Cela vous aidera à me rappeler dans quelles fenêtres se trouve actuellement ssh.
sixtyfootersdude

Réponses:

18

Selon ce que vous voulez accomplir exactement , voici quelques idées dans AppleScript en utilisant vos styles de terminal. Celles-ci sont plus robustes que tput, car elles sont réinitialisées par des invites colorées. etc (au moins pour moi).

Cela définit tous les onglets exécutant Python (aucun serveur SSH disponible pour les tests actuellement) sur Homebrew, les autres sur Ocean:

tell application "Terminal"
    repeat with w from 1 to count windows
        repeat with t from 1 to count tabs of window w
            if processes of tab t of window w contains "Python" then
                set current settings of tab t of window w to (first settings set whose name is "Homebrew")
            else
                set current settings of tab t of window w to (first settings set whose name is "Ocean")
            end if
        end repeat
    end repeat
end tell

enregistrez-le en tant que script et exécutez-le à osascript Name.scptchaque fois que vous souhaitez recolorer vos coques (bien sûr, vous pouvez en faire un script de shell ou quelque chose).

Si vous souhaitez afficher tous les processus de longue durée différemment, utilisez la condition suivante:

if busy of tab t of window w is true then


Ou, vous pouvez définir le style d'un seul onglet, sélectionné manuellement:

on run argv
    tell application "Terminal" to set current settings of tab (item 1 of argv as number) of front window to first settings set whose name is (item 2 of argv)
end run

Exécutez-le comme ceci:

osascript StyleTerm.scpt 3 Homebrew

-> Le troisième onglet de la fenêtre Terminal la plus en avant obtient le style Homebrew!

Si vous souhaitez modifier les fenêtres d'arrière-plan, remplacez "fenêtre avant" par une expression entre parenthèses comme juste après "tab". Si vous souhaitez toujours modifier "l'onglet courant" sélectionné, utilisez selected tabau lieu de tab (item 1 of argv as number).


Ajoutez ce qui suit à votre .bash_profilesi la première solution est un travail trop manuel pour vous:

PROMPT_COMMAND='osascript "/path/to/Name.scpt"'

Maintenant, il est exécuté avant chaque invite (seul problème: pas après avoir démarré quelque chose, c'est-à-dire ssh. Mais ce sujet n'est pas sur les astuces bash de fantaisie de toute façon. Ce n'est qu'un pointeur.)

Daniel Beck
la source
6

Vos scripts peuvent utiliser la tputcommande pour définir les couleurs de manière portable. Essayez le script suivant et vous verrez le terminal clair sur un fond cyan foncé avec du texte cyan clair.

#!/bin/bash
tput setab 6
tput clear
tput setaf 14
echo Hello World

Vous pouvez voir plus d'informations à ce sujet man 5 terminfodans la section intitulée "Gestion des couleurs".

Vous pouvez faire les mêmes choses en faisant écho aux séquences d'échappement que votre terminal reconnaît directement. Ce sera plus rapide, mais cela peut ne pas fonctionner avec un autre programme de terminal. Beaucoup d'entre eux reconnaissent les séquences xterm et voici à quoi ressemblerait le script ci-dessus.

#!/bin/bash
printf "\033[48;5;6m"  # or "\033[46m"
printf "\033[H\033[2J" # your system's clear command does something similar
printf "\033[38;5;14m" # or "\033[96m"
echo Hello World

Il y a plus d'informations sur les séquences de contrôle xterm ici .

En pause jusqu'à nouvel ordre.
la source
Cela semble avoir un effet sur la couleur, mais le setaf ne semble rien faire du tout pour moi. Ce que j'aimerais vraiment, c'est changer le thème du terminal Mac OS comme le suggère waiwai, mais par programmation et sans utiliser l'interface graphique.
satur9nine
Existe-t-il un moyen de changer le thème utilisé de la même manière Terminal -> Preferences -> Settings?
sixtyfootersdude
@sixtyfootersdude: Il y a probablement un moyen de le faire osascript, mais je ne le connais pas.
pause jusqu'à nouvel ordre.
1

Vous pouvez utiliser applescript pour donner à chaque nouveau terminal un thème aléatoire.

Modifiez votre .bash_profileet ajoutez cette commande

osascript -e "tell application \"Terminal\" to set current settings of front window to some settings set"

Si vous obtenez le même terminal à thème aléatoire, vous pouvez toujours le frapper ⌘Iet le régler manuellement.

Ceci est plus utile si vous obtenez un grand nombre de thèmes de terminaux différents. Il existe de nombreux sites pour cela, si vous regardez autour.

G_Gus
la source
J'aime ça. J'ai créé un alias à partir de cette commande afin de pouvoir modifier aléatoirement un nouveau paramètre manuellement.
WeakPointer