Comment passer des arguments de ligne de commande aux éléments du Dock?

Réponses:

96

Vous avez essentiellement deux options:

Option 1 : utilisez Automator pour créer une application qui lance Chrome avec des arguments de ligne de commande.

Démarrez Automator et choisissez de créer une application . Double-cliquez sur Exécuter le script shell dans le dossier Bibliothèque / Utilitaires et remplacez le contenu du texte cat- par ce qui suit:

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

Enregistrez où vous voulez.

Pour remplacer l'icône de cette application, obtenez des informations sur votre vrai Google Chrome, cliquez sur l'icône en haut à gauche, appuyez sur Cmd-C, Obtenir des informations sur votre application Chrome Automator, cliquez sur l'icône, puis appuyez sur Cmd-V.

Dans la mesure où il s’agit d’une application différente, le Dock affiche deux applications Chrome lorsqu’il est en cours d’exécution: Chrome et votre lanceur Chrome.


Option 2 : Modifiez votre lot d'applications pour lancer un script à la place. Ce script va démarrer l'application réelle, en ajoutant l'argument de ligne de commande.

Cliquez avec le bouton droit Google Chrome.appet sélectionnez Afficher le contenu du paquet . Accédez à Contents/et ouvrez-le Info.plistdans Property List Editor / Xcode (outils de développement Apple) ou un plistéditeur tiers .

Cherchez l'entrée CFBundleExecutableou Executable File. Rappelez-vous sa valeur (par exemple firefox-binpour Firefox). Remplacez-le par parameterized-app.sh.

Ouvrez Terminal et entrez les informations suivantes:

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

Un éditeur pour le .shfichier s'ouvrira. Définissez le contenu du fichier sur:

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

(en utilisant le nom de l'exécutable que vous avez supprimé Info.plist, en ajoutant les arguments de ligne de commande souhaités)

Sauver et fermer. Dans Terminal, entrez les informations suivantes:

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

Maintenant, fermez Terminal et déplacez votre application (qui ne doit pas être en cours d’exécution) dans un autre dossier et inversement. Cela mettra à jour les services de lancement , sinon vos modifications seront ignorées et vous irriteront énormément.

Désormais, lorsque vous ouvrez votre application, le .shfichier sera exécuté , ce qui lancera le fichier exécutable réel et enverra les arguments de ligne de commande.

Il ressemblera et se comportera comme vous le souhaitez, mais vous devrez le répéter chaque fois que vous mettrez à jour votre application, car cela remplacera généralement le paquet d'applications et toutes les modifications que vous avez apportées.

Daniel Beck
la source
Pour une raison quelconque, mon Chrome 10 ignore l'argument de la ligne de commande et épingle automatiquement les onglets épinglés lors de la session précédente. Je ne sais pas ce qui ne va pas ici, car je ne suis pas un utilisateur de Chrome et je ne sais pas comment il est censé se comporter.
Daniel Beck
6
"déplacez votre application dans un autre dossier et revenez-en" devrait être en gras - complètement raté lors de la première lecture :)
stephanos
1
Existe-t-il un moyen de mettre à jour / réinitialiser / redémarrer Launch Services via une commande shell afin de ne pas avoir à déplacer l'application à nouveau? c'est-à-dire que cette étape est facilement scriptable?
Jordan Brough
1
@Jordan Brough Vous pouvez utiliser l'utilitaire lsregister pour forcer une mise à jour LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross
1
Bien entendu, l'option 2 ne fonctionne que sur les applications non-CodeSign. S'il provient d'Apple ou de l'App Store, il est signé contre les modifications. Même un changement à Info.plist l'arrêtera. Dans ce cas, une application simple stub / wrapper serait utile.
cde
10

Vous pouvez écrire un script qui lance Chrome, mais ce ne serait pas l'icône de l'application dans le dock et cela ferait apparaître une icône Chrome distincte. Vous devrez donc créer un package d'application.

Commencez par créer une copie de votre application Chrome. Ensuite, il y a deux approches possibles. Je ne sais pas ce qui fonctionnera le mieux avec la mise à jour automatique de Mac OS X et / ou de Chrome.

  1. Créez un "lanceur" qui appelle simplement Chrome avec les arguments.

    • Ouvrez le package d'application (cliquez avec le bouton droit de la souris sur → Afficher le contenu du package dans le Finder) et supprimez tout sauf Info.plist, PkgInfo et MacOS.
    • Dans le dossier MacOS, supprimez l'exécutable «Google Chrome» et remplacez-le par un script shell qui appelle le vrai Chrome:

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

      N'oubliez pas chmod +xle script.
       

  2. Modifiez le package Chrome que vous exécutez réellement.

    • Dans le dossier MacOS, renommez «Google Chrome» et écrivez un script shell qui appelle la vraie avec les arguments supplémentaires:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Je vois que le package Chrome a quelque chose à propos de la signature de code; vous devrez peut-être supprimer CodeResourceset / ou _CodeSignaturele faire fonctionner avec ces modifications.

Tout est basé sur ma compréhension des packages d'applications Mac; Je n'ai pas testé ces modifications sur Chrome en particulier. Il est même possible que l'exécutable de Chrome sur Mac ne prenne pas cette option en charge, car les applications Mac ne doivent généralement pas être exécutées avec des options de ligne de commande contrôlables (contrairement à Windows, par exemple, où les applications sont normalement lancées via des raccourcis ont des options intégrées).

Kevin Reid
la source
Paramètres de support Chrome, je viens d'automatiser le mien en suivant votre instruction # 2. Vous devez en effet spécifier le chemin complet du binaire, et n'oubliez pas chmod 755 Google\ Chrome(votre script) une fois que vous avez terminé. En fait, j'ai nommé mon script launch.sh et l'ai lié à Google \ Chrome pour faciliter les mises à jour.
Orwellophile
Notez que la modification du contenu du paquet pose des problèmes de signature de code, ce qui entraîne des problèmes étranges tels que https ne fonctionnant pas correctement: bridge.grumpy-troll.org/2011/01/…
drevicko