
Ajoutez des programmes de barre de menu personnalisés sur macOS en trois étapes faciles:
Vous pouvez obtenir des plugins à partir du référentiel Bitbar génial, ou dans Swiftbar lui-même en utilisant les Get Plugins... Menu Item.
Télécharger à partir des sorties GitHub
ou installer avec Homebrew
brew install swiftbar
Exécute sur MacOS Catalina (10.15) et plus.
SwiftBar/SwiftBar.xcodeprojSwiftbar est regroupé avec un référentiel de plugin. Vous pouvez y accéder à SwiftBar → Get Plugins ...

Si vous souhaitez ajouter Supprimer le plugin ou avoir d'autres questions sur le contenu du référentiel, veuillez vous référer à ce problème.
Pour ajouter un nouveau plugin à SwiftBar, vous devez créer un script exécutable suivant le format requis (voir ci-dessous) et le mettre dans Plugin Folder .
Avec le premier lancement, SwiftBar vous demandera de définir le Plugin Folder . SwiftBar essaiera d'importer chaque fichier dans ce dossier en tant que plugin.
Important :
.swiftbarignore est pris en charge, vous pouvez l'utiliser pour exclure les fichiers d'être importés sous forme de plugins. Vous pouvez masquer un dossier en affrontant . ou en utilisant cette commande chflags hidden <folder name> .
Les fichiers de plugin doivent adopter le format suivant:
{name}.{time}.{ext}
Modificateurs de durée:
Exemple de nom de fichier: date.1m.sh
Que vous utilisiez un plugin à partir du référentiel de plugin ou que vous créiez vos propres plugins, les plugins apparaîtront initialement dans la barre de menu dans aucun ordre prédéterminé. Cependant, vous pouvez réorganiser comment ils apparaissent en maintenant CMD et en les faisant glisser (ce processus peut parfois également être utilisé sur certaines autres icônes non de la barre de swift dans la barre de menu). La position du plugin restera dans les mémoires, sauf si vous modifiez le nom du fichier de plugin, auquel cas ils devront être repositionnés à nouveau.
Le plugin est un script exécutable dans la langue de votre choix. Lorsque SwiftBar détecte un nouveau fichier dans Plugin Folder il rend cet exécutable de fichier si nécessaire et l'exécute.
Le script doit produire une sortie ( STDOUT ) dans le format requis (voir le chapitre suivant). Les erreurs de script doivent être redirigées vers STDERR .
L'API du plugin est adoptée à partir du bitbar xbar, ce qui signifie que SwiftBar peut exécuter n'importe quel plugin bitbar xbar existant.
Lors de la sortie du plugin d'analyse, Swiftbar reconnaît les blocs suivants:
Header est tout avant le premier --- . Chacun --- après le premier sera interprété comme un séparateur de menu. Vous avez une ou plusieurs lignes dans l'en-tête.
Le plugin le plus simple ressemble à ceci:
echo " This is Menu Title "Si vous fournissez plusieurs titres, les titres fournis seront à vélo dans la barre de menu et illustré dans le menu déroulant:
echo " This is a primary Menu Title "
echo " This is a secondary Menu Title "
echo " This is a n-th Menu Title "
echo " --- "
echo " This is not a Menu Title, this will be shown in the drop-down menu only " La sortie du script pour l'en-tête et le corps est divisée par ligne ( n ). Chaque ligne doit suivre ce format:
<Item Title> | [param = ...]
Où:
= . Utiliser | pour séparer les paramètres du titre. Formatage du texte :
| Paramètre | Valeur | Description |
|---|---|---|
color | Couleur CSS ou Hex, light_color,dark_color | Définit la couleur du texte de l'élément. Si une seule couleur est fournie, elle est utilisée pour l'apparence claire et sombre. |
sfcolor | Couleur CSS ou Hex, light_color,dark_color | Définit la couleur du symbole SF. Si une seule couleur est fournie, elle est utilisée pour l'apparence claire et sombre. Si vous rendez-vous plusieurs symboles SF, vous pouvez fournir des couleurs différentes en ajoutant l'index, comme ce sfcolor2 |
font | Nom de la police macos | Définit le nom de police à utiliser dans le texte de l'élément |
size | Nombre | Définit la taille du texte de l'élément |
md | Vrai | Permet la prise en charge de Markdown dans le titre du menu pour **bold** et *italic* |
sfsize | Nombre | Définit la taille de l'image du symbole SF intégré dans le texte |
length | Nombre | Coupez le texte de l'élément à un nombre fourni de caractères. Le titre complet sera affiché dans une info-bulle. |
trim | Vrai | Coupe les caractères blancs d'espace |
ansi | Vrai | Permet la prise en charge des codes couleur ANSI. Conflit avec: symbolize |
emojize | FAUX | Désactive l'analyse des emojis de style github (par exemple , :mushroom: en?). Nécessite: symbolize=false lorsque vous définissez TRUE. |
symbolize | FAUX | Désactive l'analyse des symboles SF (par exemple, "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: :bookmark: :sun.dust:" → → ). Toujours False sur Catalina. |
Visuels :
| Paramètre | Valeur | Description |
|---|---|---|
dropdown | FAUX | Uniquement applicable aux éléments de Header . Lorsqu'il est réglé sur False, l'élément ne sera pas affiché dans le menu déroulant, mais sera à vélo dans la barre de menu. |
alternate | Vrai | Marque une ligne comme alternative à la précédente pour le moment où la touche d'option ( ⌥ ) est enfoncée dans la liste déroulante. |
image | Image codée dans Base64, light_image,dark_image | Définit une image pour l'élément. Si une seule image est fournie, elle est utilisée pour l'apparence claire et sombre. |
templateImage | Image codée dans la base64 | Identique à image , mais l'image est une image de modèle. Les images de modèle sont composées de couleurs noires et claires (et un canal alpha). Les images de modèle ne sont pas destinées à être utilisées comme images autonomes et sont généralement mélangées avec d'autres contenus pour créer l'apparence finale souhaitée. |
sfimage | Nom SFSymbol | Définit une image pour l'élément du symbole SF. Seulement disponible sur Big Sur et supérieur. |
sfconfig | Configuration SFSymbol | Configure le mode de rendu pour sfimage . Accepte un JSON encodé comme base64, exemple JSON {"renderingMode":"Palette", "colors":["red","blue"], "scale": "large", "weight": "bold"} . Numéro original n ° 354 |
checked | Vrai | Définit une coche devant l'article. |
tooltip | Texte | Définit une info-bulle pour l'élément. |
webview | Vrai | Présent HREF fourni comme une vue sur le Web, au lieu du menu de barre de menu standard |
webvieww | Nombre | Définit la largeur de la vue Web en pixels |
webviewh | Nombre | Définit la hauteur de la vue sur les pixels |
Actions :
| Paramètre | Valeur | Description |
|---|---|---|
refresh | Vrai | Le script de plugin sera exécuté sur l'élément Click |
href | URL absolue | Définit une URL pour s'ouvrir lorsque l'élément cliqua |
bash | Chemin de fichier absolu | Script exécutable à exécuter en shell |
terminal | FAUX | Le script bash sera exécuté en arrière-plan, au lieu de lancer le terminal |
params | param0= , param1= , param10= ... | Paramètres du script bash |
shortcut | CMD + Option + T | Hot-clé affecté à l'article. Si l'article est dans l'en-tête, le hot-clé affichera le menu; Sinon, le hot-son lancera l'action associée. |
Lors de l'exécution d'un plugin, SwiftBar définit les variables d'environnement suivantes:
| Variable | Valeur |
|---|---|
SWIFTBAR | 1 |
SWIFTBAR_VERSION | Le numéro de version Swiftbar en cours d'exécution (au format xyz ) |
SWIFTBAR_BUILD | Le numéro de construction Swiftbar en cours d'exécution ( CFBundleVersion ) |
SWIFTBAR_PLUGINS_PATH | Le chemin vers le Plugin Folder |
SWIFTBAR_PLUGIN_PATH | Le chemin vers le plugin en cours d'exécution |
SWIFTBAR_PLUGIN_CACHE_PATH | Le dossier Cache to Data, individu par plugin |
SWIFTBAR_PLUGIN_DATA_PATH | Le dossier Path to Data, individuel par plugin |
SWIFTBAR_PLUGIN_REFRESH_REASON | Plugin Refresh Raison Trigger |
SWIFTBAR_LAUNCH_TIME | Date et heure de lancement de Swiftbar, ISO8601 |
OS_APPEARANCE | Aspect macOS actuel ( Light ou Dark ) |
OS_VERSION_MAJOR | La première partie de la version macOS (par exemple, 11 pour macOS 11.0.1) |
OS_VERSION_MINOR | La deuxième partie de la version macOS (par exemple, 0 pour macOS 11.0.1) |
OS_VERSION_PATCH | La troisième partie de la version macOS (par exemple, 1 pour macOS 11.0.1) |
OS_LAST_SLEEP_TIME | Dernière date et heure du sommeil, ISO8601. Vide si le système d'exploitation ne dormait pas depuis le lancement de Swiftbar. |
OS_LAST_WAKE_TIME | Last OS se réveille de la date et de l'heure du sommeil, ISO8601. Vide si le système d'exploitation ne dormait pas depuis le lancement de Swiftbar. |
Il est recommandé d'inclure des métadonnées dans le script de plugin. Les métadonnées sont utilisées dans l'écran de plugin à propos de Swiftbar. Swiftbar adopte le format de métadonnées suggéré par Bitbar xbar:
# <xbar.title>Title goes here</xbar.title>
# <xbar.version>v1.0</xbar.version>
# <xbar.author>Your Name</xbar.author>
# <xbar.author.github>your-github-username</xbar.author.github>
# <xbar.desc>Short description of what your plugin does.</xbar.desc>
# <xbar.image>http://www.hosted-somewhere/pluginimage</xbar.image>
# <xbar.dependencies>python,ruby,node</xbar.dependencies>
# <xbar.abouturl>http://url-to-about.com/</xbar.abouturl>
# <xbar.droptypes>Supported UTI's for dropping things on menu bar</xbar.droptypes>
SwiftBar prend en charge ces indicateurs de métadonnées en option pour masquer les éléments du menu par défaut:
# <swiftbar.hideAbout>true</swiftbar.hideAbout>
# <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
# <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
# <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
# <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>
L'option + cliquer affichera tous les éléments: 
Une balise spéciale peut être utilisée comme alternative pour actualiser l'intervalle défini dans le nom du plugin, la valeur adopte la syntaxe Cron:
<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>
Vous pouvez configurer plusieurs horaires, en utilisant le sepparator | :
<swiftbar.schedule>1 * * * *|2 * * * *</swiftbar.schedule>
<swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen> - Rafraîchisse le plugin sur clic, avant de présenter le menu<swiftbar.runInBash>false</swiftbar.runInBash> - n'enveloppe pas les plugins en bash lors de l'exécution<swiftbar.type>streamable</swiftbar.type> - Plugin de marque comme streamable<swiftbar.environment>[var1=default value, var2=default value, ... ]</swiftbar.environment> - Ces variables seront transmises dans l'environnement du plugin, dans la version ultérieure Swiftbar fournira une interface utilisateur pour modifier les valeurs pour ces variables.<swiftbar.persistentWebView>true</swiftbar.persistentWebView> - rend WebView persistant, donc il ne recharge pas sur chaque barre de menu Cliquez sur Pour les plugins binaires, les métadonnées peuvent être ajoutées en tant qu'attribut de fichier étendu:
xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>
Pour le type standard de plugins, SwiftBar s'attend à ce que l'exécution du plugin soit finie, c'est-à-dire que le plugin s'exécute et sort avec la sortie vers STDOUT:
Facultativement, un plugin standard peut être exécuté sur un calendrier reproductible, configuré dans le nom de fichier du plugin ou la propriété de métadonnées schedule .
Ce type de plugin s'adresse aux personnes qui souhaitent utiliser l'application de raccourcis pour créer des éléments de barre de menu. L'API du plugin est à peu près la même que standard. Créez un raccourci qui publie du texte dans le format requis, sélectionnez ce raccourci dans la section des plugins de raccourcis des paramètres de SwiftBar, et vous êtes prêt à partir.
Pour les plugins de raccourcis, SwiftBar fournit une interface utilisateur pratique pour configurer le calendrier de rafraîchissement.
Exemples de raccourcis:
Les plugins éphémères créent des éléments de barre de menu à la demande en exécutant l'action de raccourci de SwiftBar ou en appelant un schéma d'URL. L'API du plugin est à peu près la même que standard.
Voici les paramètres du schéma URL:
L'action des raccourcis est assez explicite.
Ce type de plugin est mieux utilisé pour les notifications ou autres éléments de barre de menu temporaires.
SwiftBar lance un processus distinct pour chaque plugin fluide, qui s'exécute indéfiniment jusqu'à ce que SwiftBar soit fermé ou une défaillance. Vous devez utiliser des plugins diffusables uniquement lorsque vous traitez avec un flux d'événements entrants; Un exemple pourrait être des informations sur le marché financier lues à partir d'une information de chargement WebSocket ou CPU pour un ordinateur distant.
Pour faire savoir à Swiftbar quand mettre à jour l'élément de la barre de menu, les plugins en flux doivent utiliser un séparateur de ligne spécial ~~~ . SwiftBar réinitialise l'élément de menu à chaque occurrence de ce séparateur.
Dans l'exemple ci-dessous, SwiftBar affichera "Test 1" dans la barre de menu pendant 3 secondes, puis rien pendant 5 secondes et "Tester 2" indéfiniment.
#!/bin/bash
#<swiftbar.type>streamable</swiftbar.type>
echo "Test 1"
echo "---"
echo "Test 2"
echo "Test 3"
sleep 3
echo "~~~"
sleep 5
echo "~~~"
echo "Test 2"
Vous pouvez marquer un plugin comme streamable avec une propriété de métadonnées spéciale <swiftbar.type>streamable</swiftbar.type>
Quelques notes:
name peut être le même entre plusieurs plugins. Si le fichier de votre plugin est ~/Documents/SwiftBar/myplugin.1m.sh , alors le nom est myplugin et id myplugin.1m.shopen(1) pour déclencher des URL du schéma, utilisez -g pour empêcher la commande de voler la mise au point de votre application active.| Point final | Paramètre | Description | Exemple |
|---|---|---|---|
| rafraîchir | aucun | Force Refresh Tous les plugins chargés | swiftbar://refreshallplugins |
| rafraîchir | nom name ou plugin plugin | Forcer le plugin de rafraîchissement par son nom. S'il est fourni, les paramètres d'URL supplémentaires sont exposés en tant que variables Env au plugin | swiftbar://refreshplugin?name=myplugin |
| rafraîchir | index index du plugin dans MenUbar, à partir de 0 | Forcer le plugin de rafraîchissement par sa position dans Menubar | swiftbar://refreshplugin?index=1 |
| activer Plugin | nom name ou plugin plugin | Activer le plugin par nom | swiftbar://enableplugin?name=myplugin |
| désactiver | nom name ou plugin plugin | Désactiver le plugin par nom | swiftbar://disableplugin?name=myplugin |
| togle | name ou plugin plugin | Plugin basculé (activer Disable) par son nom | swiftbar://toggleplugin?name=myplugin |
| addplugin | URL de source src vers le fichier de plugin | Ajouter un plugin à Swiftbar de l'URL | swiftbar://addplugin?src=https://coolplugin |
| aviser | name ou nom de plugin plugin . Champs de notification: title , subtitle , body . href pour ouvrir une URL en clic (y compris les schémas URL personnalisés). silent=true à désactiver le son | Montrer la notification | swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true |
| Sethememeralplugin | nom du plugin name , devrait être unique. content - Contenu du plugin, exitafter - Définissez éventuellement la durée de vie du MenUbar en secondes | Crée un plugin éphémère. Pour supprimer le plugin éphémère existant, son contenu est un contenu sur une chaîne vide "" | swiftbar://setephemeralplugin?name=ephemeral&content=hi |
Liste des préférences qui ne sont pas exposées dans l'interface utilisateur Swiftbar:
defaults write com.ameba.SwiftBar StealthMode -bool YES - Hide SwiftBar Menu Item lorsque tous les plugins sont désactivésdefaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - n'enroule pas les plugins en bash lors de l'exécutiondefaults write com.ameba.SwiftBar MakePluginExecutable -bool NO - désactive Auto chmod +x tous les fichiers dans le répertoire du plugindefaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES - Active l'édition dans les préférences -> pluginsdefaults write com.ameba.Swiftbar PluginDebugMode -bool YES - Active la vue de débogage du plugindefaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - Active la sortie de débogage pour les plugins diffusables, SwiftBar exposera les données de flux dans Console.App Si le plugin ne parvient pas à exécuter SwiftbarConsole.app pour afficher les journaux SwiftBar.
SwiftBar utilise ces bibliothèques open source:
Pour geler et sécuriser les dépendances, ces bibliothèques sont fourchues à l'organisation SwiftBar.
Swiftbar peut être traduit ici.
Si vous aimez la barre Swift, vous les aimerez peut-être aussi: