¿Cómo paso los argumentos de la línea de comandos a los elementos del Dock?

Respuestas:

96

Básicamente tienes dos opciones:

Opción 1 : use Automator para crear una aplicación que, de hecho, inicie Chrome con argumentos de línea de comandos.

Inicie Automator y seleccione crear una aplicación . Haga doble clic en Ejecutar script de shell en la carpeta Biblioteca / Utilidades y reemplace el contenido de texto cat- con lo siguiente:

open -a "Google Chrome.app" --args -pinned-tab-count=4
# keep the .app suffix or will break with Parallels

Ahorra donde quieras.

Para reemplazar el ícono de esta aplicación, obtenga información en su Google Chrome real, haga clic en el ícono en la parte superior izquierda, presione Cmd-C, obtenga información en su aplicación Chrome Automator, haga clic en el ícono y presione Cmd-V.

Como es una aplicación diferente, el Dock mostrará dos aplicaciones de Chrome cuando se esté ejecutando: Chrome y su iniciador de Chrome.


Opción 2 : Edite su paquete de aplicaciones para iniciar un script en su lugar. Este script iniciará la aplicación real, agregando el argumento de la línea de comando.

Haga clic derecho Google Chrome.appy seleccione Mostrar contenido del paquete . Vaya Contents/y abra Info.plisten Property List Editor / Xcode (herramientas de desarrollador de Apple), o un plisteditor de terceros .

Busque la entrada CFBundleExecutableo Executable File. Recuerde su valor (por ejemplo, firefox-binpara Firefox). Reemplácelo con parameterized-app.sh.

Abra la Terminal e ingrese lo siguiente:

touch /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
open /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

Se .shabrirá un editor para el archivo. Establezca el contenido del archivo en:

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

(utilizando el nombre del ejecutable real que eliminó Info.plist, agregando los argumentos de línea de comandos deseados)

Guardar y cerrar. En Terminal, ingrese lo siguiente:

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

Ahora, cierre Terminal y mueva su aplicación (que no debe estar ejecutándose en este momento) a una carpeta diferente y viceversa. Esto actualizará los Servicios de lanzamiento , de lo contrario, sus cambios serán ignorados y lo irritarán inmensamente.

Ahora, cuando abra su aplicación, realmente ejecutará el .sharchivo, que a su vez lanzará el archivo ejecutable real, enviando los argumentos de la línea de comando.

Se verá y se comportará como espera, pero deberá repetir esto cada vez que actualice su aplicación, ya que generalmente reemplazará el paquete de la aplicación y todos los cambios que haya realizado.

Daniel Beck
fuente
Por alguna razón, mi Chrome 10 ignora el argumento de la línea de comando y fija automáticamente las pestañas que se fijaron en la sesión anterior. No sé qué está mal aquí, ya que no soy un usuario de Chrome y no sé cómo se supone que debe comportarse.
Daniel Beck
66
"mover su aplicación a una carpeta diferente y volverla de nuevo" debe estar en negrita - se la perdió por completo en la primera lectura :)
stephanos
1
¿Hay alguna forma de actualizar / restablecer / reiniciar Launch Services a través de un comando de shell para que no tenga que mover la aplicación y volverla? es decir, para que ese paso sea fácilmente programable?
Jordan Brough
1
@ Jordan Brough Puede usar la utilidad lsregister para forzar una actualización de LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross el
1
Por supuesto, la Opción 2 solo funciona en aplicaciones que no son CodeSign. Si proviene de Apple o de la tienda de aplicaciones, está firmado contra los cambios. Incluso un cambio en Info.plist lo detendrá. En ese caso, una simple aplicación de código auxiliar / envoltorio sería útil.
cde
10

Podría escribir una secuencia de comandos que inicie Chrome, pero ese no sería el ícono de la aplicación en el dock, y causaría que aparezca un ícono de Chrome por separado. Entonces tendrá que crear un paquete de aplicación.

Primero, haga una copia de su aplicación Chrome. Entonces, hay dos enfoques que podrían funcionar; No estoy seguro de qué jugará mejor con Mac OS X y / o la actualización automática de Chrome.

  1. Haz un 'lanzador' que solo llame a Chrome con los argumentos.

    • Abra el paquete de la aplicación (haga clic con el botón derecho → Mostrar contenido del paquete en el Finder) y deseche todo menos Info.plist, PkgInfo y MacOS.
    • En la carpeta MacOS, elimine el ejecutable "Google Chrome" y reemplácelo con un script de shell que llame al Chrome real:

      #!/bin/sh
      exec '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' -pinned-tab-count=4
      

      No te olvides chmod +xdel guión.
       

  2. Modifique el paquete de Chrome que realmente ejecuta.

    • En la carpeta MacOS, cambie el nombre de "Google Chrome" y escriba un script de shell que invoque lo real con los argumentos adicionales:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Veo que el paquete de Chrome tiene algo sobre la firma de código; Es posible que deba eliminar CodeResourcesy / o _CodeSignaturehacer que se ejecute con estos cambios.

Todo esto se basa en mi comprensión de los paquetes de aplicaciones de Mac; En realidad, no he probado estos cambios en Chrome en particular. Incluso es posible que el ejecutable de Chrome en Mac no admita esta opción, ya que generalmente no se espera que las aplicaciones de Mac se ejecuten con opciones de línea de comandos controlables (a diferencia, por ejemplo, de Windows, donde las aplicaciones se inician normalmente mediante accesos directos que pueden tener opciones integradas).

Kevin Reid
fuente
Parámetros de soporte de Chrome, acabo de automatizar el mío siguiendo sus instrucciones # 2. De hecho, debe especificar la ruta completa para el binario, y no olvide chmod 755 Google\ Chrome(su secuencia de comandos) una vez que haya terminado. De hecho, llamé a mi script launch.sh y lo vinculé a Google \ Chrome para facilitar las actualizaciones.
Orwellophile
Tenga en cuenta que la modificación del contenido del paquete causa problemas con la firma del código, lo que resulta en problemas extraños como https que no funcionan correctamente: bridge.grumpy-troll.org/2011/01/…
drevicko