4 votos

Forma más sencilla de crear una lista clickeable en MacOS que hará que se ejecuten los programas seleccionados

Estoy buscando algo que funcione en macOS y me permita hacer lo siguiente:

Supongamos que tengo un archivo llamado "program.list" con contenido como este:

"Programa 1" "/usr/local/bin/programa 1"
"Programa 2" "/usr/local/bin/programa 2"
"Programa 3" "/usr/local/bin/otro-programa xyz"
"Programa 4" "/usr/local/bin/otra-cosa"
... etc. ...

Me gustaría alimentar este archivo a un programa que, por ejemplo, podría llamarse "run-from-list", y que podría invocar de la siguiente manera:

run-from-list program.list

... y cuando se invoque ese comando, aparecería lo siguiente en la pantalla en una lista desplazable:

Programa 1
Programa 2
Programa 3
Programa 4
... etc. ...

Y al hacer clic en cualquier línea, se ejecutará el programa asociado. Por ejemplo, si hago clic en "Programa 1", se ejecutará el programa "/usr/local/bin/programa 1".

¿Existe alguna manera de escribir "run-from-list" en MacOS sin compilar el código fuente en un ejecutable? Un lenguaje de scripting sería adecuado. ¿O existe algún tipo de utilidad existente que pueda descargar y usar de manera similar para este propósito?

2voto

displayName Puntos 218

Combiné zsh y AppleScript para lograr esto. No necesita compilación.


Mi versión de program.list se ve así:

➜  ~ cat program.list

"Music" "open -a Music"
"Safari" "open -a Safari"
"Nueva Safari" "open -na Safari"
"Una Buena Pregunta" "open -a Safari https://apple.stackexchange.com/q/471930/71941"

Creé un run_from_list.sh en mi directorio de inicio y ejecuté chmod +x run_from_list.sh.


El contenido de run_from_list.sh es el siguiente. El código está adecuadamente comentado para cada paso relevante:

#!/bin/zsh

# Verificar si el archivo de entrada existe.
if [[ ! -f "$1" ]]; then
    echo "¡Archivo no encontrado!"
    exit 1
fi

# Inicializar arrays para leer los nombres de los programas y comandos.
nombres_programas=()
comandos_programas=()

# Leer y procesar el archivo de entrada línea por línea.
while IFS= read -r linea; do
    nombre_programa=$(echo "$linea" | cut -d '"' -f 2)
    comando_programa=$(echo "$linea" | cut -d '"' -f 4)
    nombres_programas+=("$nombre_programa")  # Agregar el nombre del programa.
    comandos_programas+=("$comando_programa") # Agregar el comando prescrito para el programa.
done < "$1"

# Generar comando AppleScript para mostrar la lista.
cmd="choose from list {"
for nombre in $nombres_programas; do
    cmd+='"'"$nombre"'", '
done
cmd="${cmd%,*} } with title \"Selecciona un Programa\""

# Ejecutar comando AppleScript y capturar la selección.
programa_seleccionado=$(osascript -e "$cmd")

# Usuario hizo la selección. Ahora, encontrar y ejecutar el comando correspondiente.
for i in {1..$#nombres_programas}; do
    if [[ "${nombres_programas[i]}" == "$programa_seleccionado" ]]; then
        echo "Ejecutando ${comandos_programas[i]}" # Mostrar un mensaje en la terminal.
        eval "${comandos_programas[i]}" # Ejecutar el comando prescrito.
        break
    fi
done

Pruebalo:

  • Ve a tu directorio de inicio haciendo cd ~;
  • ./run_from_list.sh program.list.

1voto

yoliho Puntos 340

Otra forma de GUI es Xmenu también en la AppStore

Uno de los menús es personalizado, el cual creas haciendo enlaces en ~/Library/Application Support/XMenu/Custom a los programas.

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