
Agregue programas de barra de menú personalizados en MacOS en tres sencillos pasos:
Puede obtener complementos de Awesome BitBar Repository, o en SwiftBar en el elemento de menú Get Plugins...
Descargar desde los lanzamientos de Github
o instalar con homebrew
brew install swiftbar
Funciona con MacOS Catalina (10.15) y arriba.
SwiftBar/SwiftBar.xcodeprojSwiftBar está incluido con un repositorio de complementos. Puede acceder a él en SwiftBar → Obtener complementos ...

Si desea agregar Eliminar complemento o tener otras preguntas sobre el contenido del repositorio, consulte este problema.
Para agregar un nuevo complemento a SwiftBar, debe crear un script ejecutable después del formato requerido (ver más abajo) y colocarlo en Plugin Folder .
Con el primer lanzamiento, SwiftBar le pedirá que establezca la Plugin Folder . SwiftBar intentará importar cada archivo en esta carpeta como un complemento.
Importante :
.swiftbarignore Puedes ocultar una carpeta prependiendo . o usando este comando chflags hidden <folder name> .
Los archivos de complemento deben adoptar el siguiente formato:
{name}.{time}.{ext}
Modificadores de duración:
Ejemplo de nombre de archivo: date.1m.sh
Ya sea que esté utilizando un complemento del repositorio de complementos o creando el suyo, los complementos aparecerán inicialmente en la barra de menú sin orden predeterminado. Sin embargo, puede reordenar cómo aparecen manteniendo presionado CMD y arrastrándolos (este proceso también puede usarse en otros iconos no de SwiftBar en la barra de menú). La posición del complemento se recordará a menos que cambie el nombre del archivo del complemento, en cuyo caso deberán volver a posicionar.
Plugin es un script ejecutable en el idioma de su elección. Cuando SwiftBar detecta un nuevo archivo en Plugin Folder hace que este archivo sea ejecutable si es necesario y lo ejecuta.
El script debe producir la salida ( STDOUT ) en el formato requerido (consulte el siguiente capítulo). Los errores de script deben redirigirse a STDERR .
El complemento API se adopta del BitBar Xbar, lo que significa que SwiftBar puede ejecutar cualquier complemento BitBar Xbar existente.
Cuando la salida del complemento de análisis, SwiftBar reconoce los siguientes bloques:
Header lo es todo antes del primero --- . Cada uno --- después del primero se interpretará como un separador de menú. Tienes una o más líneas en el encabezado.
El complemento más simple se ve así:
echo " This is Menu Title "Si proporciona múltiples títulos, los títulos proporcionados se ciclarán en la barra de menú y se mostrarán en el menú desplegable:
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 salida del script para el encabezado y el cuerpo se divide por línea ( n ). Cada línea debe seguir este formato:
<Item Title> | [param = ...]
Dónde:
= . Uso | Para separar los parámetros del título. Formato de texto :
| Parámetro | Valor | Descripción |
|---|---|---|
color | Color css o hex, light_color,dark_color | Establece el color de texto del elemento. Si solo se proporciona un color, se usa para apariencia de luz y oscura. |
sfcolor | Color css o hex, light_color,dark_color | Establece el color del símbolo SF. Si solo se proporciona un color, se usa para apariencia de luz y oscura. Si fama múltiples símbolos SF, puede proporcionar diferentes colores agregando índice, como este sfcolor2 |
font | nombre de fuente macOS | Establece el nombre de la fuente para usar en el texto del elemento |
size | Número | Establece el tamaño del texto del elemento |
md | Verdadero | Habilita el soporte de Markdown en el título del menú para **bold** y *italic* |
sfsize | Número | Establece el tamaño de la imagen del símbolo SF incrustada en el texto |
length | Número | Recorta el texto del elemento a un número proporcionado de caracteres. El título completo se mostrará en una información sobre herramientas. |
trim | Verdadero | Recorta personajes de espacios blancos |
ansi | Verdadero | Permite el soporte de códigos de color ANSI. Conflictos con: symbolize |
emojize | FALSO | Desactiva el análisis de emojis de estilo Github (por ejemplo :mushroom: en?). Requiere: symbolize=false al configurarlo en verdadero. |
symbolize | FALSO | Desactiva el análisis de los símbolos SF (por ejemplo, "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: :bookmark: :sun.dust:" → ). Siempre False en Catalina. |
Visuales :
| Parámetro | Valor | Descripción |
|---|---|---|
dropdown | FALSO | Solo aplicable a los artículos en Header . Cuando se establece en False, el elemento no se mostrará en el menú desplegable, sino que se ciclará en la barra de menú. |
alternate | Verdadero | Marca una línea como alternativa a la anterior para cuando la tecla de opción ( ⌥ ) se presiona en el menú desplegable. |
image | Imagen codificada en Base64, light_image,dark_image | Establece una imagen para el elemento. Si solo se proporciona una imagen, se usa para apariencia de luz y oscura. |
templateImage | Imagen codificada en Base64 | Igual que image , pero la imagen es una imagen de plantilla. Las imágenes de plantilla consisten en colores negros y claros (y un canal alfa). Las imágenes de plantilla no están destinadas a usarse como imágenes independientes y generalmente se mezclan con otro contenido para crear la apariencia final deseada. |
sfimage | Nombre de sfsymbol | Establece una imagen para el elemento del símbolo SF. Solo disponible en Big Sur y superior. |
sfconfig | Configuración de sfsymbol | Configura el modo de renderizado para sfimage . Acepta un JSON codificado como Base64, ejemplo JSON {"renderingMode":"Palette", "colors":["red","blue"], "scale": "large", "weight": "bold"} . Problema original #354 |
checked | Verdadero | Establece una marca de verificación frente al artículo. |
tooltip | Texto | Establece una información sobre herramientas para el elemento. |
webview | Verdadero | Presente proporcionó href como WebView, en lugar del menú de barra de menú estándar |
webvieww | Número | Establece el ancho de WebView en píxeles |
webviewh | Número | Establece la altura de WebView en píxeles |
Acciones :
| Parámetro | Valor | Descripción |
|---|---|---|
refresh | Verdadero | El script de complemento se ejecutará en el elemento, haga clic en |
href | URL absoluta | Establece una URL para abrir cuando el elemento hizo clic |
bash | Ruta de archivo absoluto | Script ejecutable para ejecutarse en shell |
terminal | FALSO | bash Script se ejecutará en segundo plano, en lugar de lanzar el terminal |
params | param0= , param1= , param10= ... | Parámetros para el script bash |
shortcut | CMD+Opción+T | Clave de acceso rápido asignado al artículo. Si el elemento está en el encabezado, Hotkey mostrará el menú; De lo contrario, Hotkey lanzará una acción asociada. |
Al ejecutar un complemento, SwiftBar establece las siguientes variables de entorno:
| Variable | Valor |
|---|---|
SWIFTBAR | 1 |
SWIFTBAR_VERSION | El número de versión de SwiftBar (en formato xyz ) |
SWIFTBAR_BUILD | El número de construcción de SwiftBar ( CFBundleVersion ) |
SWIFTBAR_PLUGINS_PATH | La ruta a la Plugin Folder |
SWIFTBAR_PLUGIN_PATH | La ruta al complemento en ejecución |
SWIFTBAR_PLUGIN_CACHE_PATH | La carpeta de caché a la carpeta de datos, individual por complemento |
SWIFTBAR_PLUGIN_DATA_PATH | La ruta a la carpeta de datos, individuo por complemento |
SWIFTBAR_PLUGIN_REFRESH_REASON | Refresión de complemento Razón disparador |
SWIFTBAR_LAUNCH_TIME | Fecha y hora de lanzamiento de SwiftBar, ISO8601 |
OS_APPEARANCE | Apariencia de macOS actual ( Light u Dark ) |
OS_VERSION_MAJOR | La primera parte de la versión de MacOS (por ejemplo, 11 para macOS 11.0.1) |
OS_VERSION_MINOR | La segunda parte de la versión de MacOS (por ejemplo, 0 para macOS 11.0.1) |
OS_VERSION_PATCH | La tercera parte de la versión de MacOS (por ejemplo, 1 para macOS 11.0.1) |
OS_LAST_SLEEP_TIME | Última fecha y hora de dormir del sistema operativo, ISO8601. Vacío si el sistema operativo no durmiera desde el lanzamiento de SwiftBar. |
OS_LAST_WAKE_TIME | Last OS Wake de la fecha y hora de sueño, ISO8601. Vacío si el sistema operativo no durmiera desde el lanzamiento de SwiftBar. |
Se recomienda incluir metadatos en el script de complemento. Los metadatos se usan en la pantalla Acerca de Plugin en SwiftBar. SwiftBar adopta el formato de metadatos sugerido por 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 admite estas banderas de metadatos opcionales para ocultar elementos de menú predeterminados:
# <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>
Opción+Haga clic Mostrará todos los elementos: 
Se puede usar una etiqueta especial como alternativa al intervalo de actualización definido en el nombre del complemento, el valor adopta la sintaxis cron:
<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>
Puede configurar múltiples horarios, utilizando el Sepparator | :
<swiftbar.schedule>1 * * * *|2 * * * *</swiftbar.schedule>
<swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen> - Actualiza el complemento en clic, antes de presentar el menú<swiftbar.runInBash>false</swiftbar.runInBash> - No envuelve complementos en Bash cuando se ejecuta<swiftbar.type>streamable</swiftbar.type> - Marcos complemento como Streamable<swiftbar.environment>[var1=default value, var2=default value, ... ]</swiftbar.environment> - Estas variables se pasarán en el entorno del complemento, en la versión posterior SwiftBar proporcionará una interfaz de usuario para cambiar los valores de estas variables.<swiftbar.persistentWebView>true</swiftbar.persistentWebView> - Hace que WebView sea persistente, por lo que no se vuelve a cargar en cada barra de menú, haga clic en Para los metadatos de complementos binarios se pueden agregar como un atributo de archivo extendido:
xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>
Para el tipo de complementos estándar, SwiftBar espera que la ejecución de los complementos sea finita, es decir, el complemento se ejecuta y sale con la salida a Stdout:
Opcionalmente, se puede ejecutar un complemento estándar en un horario repetible, configurado en el nombre del archivo del complemento o la propiedad de los metadatos schedule .
Este tipo de complemento está dirigido a las personas que desean usar la aplicación atajos para crear elementos de barra de menú. La API del complemento es más o menos lo mismo que estándar. Cree un atajo que genere texto en el formato requerido, seleccione este acceso directo en la sección de complementos de accesos directos de la configuración de SwiftBar, y está listo.
Para los complementos de accesos directos, SwiftBar proporciona una práctica UI para configurar el horario de actualización.
Ejemplo de atajos:
Los complementos efímeros crean elementos de la barra de menú a pedido ejecutando la acción de acceso directo de SwiftBar o llamando a un esquema de URL. La API del complemento es más o menos lo mismo que estándar.
Aquí están los parámetros para el esquema de URL:
La acción atajos se explica por sí misma.
Este tipo de complemento se usa mejor para notificaciones u otros elementos de barra de menú temporal.
SwiftBar lanza un proceso separado para cada complemento transmitible, que se ejecuta indefinidamente hasta que SwiftBar está cerrado o una falla. Debe usar complementos transmitibles solo cuando se trata de un flujo de eventos entrantes; Un ejemplo podría ser la información del mercado financiero leído desde una información de carga WebSocket o CPU para una computadora remota.
Para que SwiftBar sepa cuándo actualizar el elemento de la barra de menú, los complementos transmitibles deben usar un separador de línea especial ~~~ . SwiftBar restablecerá el elemento del menú en cada aparición de este separador.
En el ejemplo a continuación, SwiftBar mostrará "Prueba 1" en la barra de menú durante 3 segundos, luego nada durante 5 segundos, y "Prueba 2" indefinidamente.
#!/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"
Puede marcar un complemento como Streamable con una propiedad de metadatos especiales <swiftbar.type>streamable</swiftbar.type>
Algunas notas:
name puede ser el mismo entre múltiples complementos. Si el FilePath de su complemento es ~/Documents/SwiftBar/myplugin.1m.sh , entonces el nombre es myplugin y la ID myplugin.1m.shopen(1) para activar URL del esquema, use -g para evitar que el comando robe el enfoque de su aplicación activa.| Punto final | Parámetro | Descripción | Ejemplo |
|---|---|---|---|
| RefreshallPlugins | ninguno | Force actualizar todos los complementos cargados | swiftbar://refreshallplugins |
| refrescante | nombre de complemento name o plugin | Force el complemento de actualización por nombre. Si se proporciona, los parámetros de URL adicionales están expuestos como variables ENV al complemento | swiftbar://refreshplugin?name=myplugin |
| refrescante | Índice de complemento index en Menubar, a partir de 0 | Force el complemento de actualización por su posición en Menubar | swiftbar://refreshplugin?index=1 |
| Habilitar Plugin | nombre de complemento name o plugin | Habilitar complemento por nombre | swiftbar://enableplugin?name=myplugin |
| deshabilitar | nombre de complemento name o plugin | Deshabilitar complemento por nombre | swiftbar://disableplugin?name=myplugin |
| toggleplugin | nombre de complemento name o plugin | Toggle (habilitar desactivar) complemento por nombre | swiftbar://toggleplugin?name=myplugin |
| addplugin | URL de origen src para complementar el archivo | Agregar complemento a SwiftBar desde URL | swiftbar://addplugin?src=https://coolplugin |
| notificar | name o nombre de plugin Nombre. Campos de notificación: title , subtitle , body . href para abrir una URL al hacer clic (incluidos los esquemas de URL personalizados). silent=true para deshabilitar el sonido | Mostrar notificación | swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true |
| setephemeralplugin | name Nombre del complemento debe ser único. content - Contenido de complemento, exitafter - Opcionalmente, establezca la vida útil del Menubar en segundos | Crea un complemento efímero. Para eliminar el complemento efímero existente, establece su contenido en una cadena vacía "" | swiftbar://setephemeralplugin?name=ephemeral&content=hi |
Lista de preferencias que no están expuestas en la interfaz de usuario de SwiftBar:
defaults write com.ameba.SwiftBar StealthMode -bool YES - OBCENDE ELEMENTO DEL MENÚ SWIFTBAR Cuando todos los complementos están deshabilitadosdefaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - No envuelva complementos en Bash cuando se ejecutadefaults write com.ameba.SwiftBar MakePluginExecutable -bool NO - Desactiva Auto chmod +x Todos los archivos en el directorio de complementosdefaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES -habilita la edición en preferencias -> complementosdefaults write com.ameba.Swiftbar PluginDebugMode -bool YES - habilita la vista de depuración del complementodefaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - habilita la salida de depuración para complementos de transmisión, SwiftBar expondrá los datos de la secuencia en console.app. Si el complemento no se ejecuta SwiftBarConsole.app para ver los registros de SwiftBar.
SwiftBar usa estas bibliotecas de código abierto:
Para congelar y asegurar dependencias, estas bibliotecas están bifurcadas a la organización SwiftBar.
SwiftBar se puede traducir aquí.
Si disfrutas de SwiftBar también te gustan: