Como passo argumentos de linha de comando para itens do Dock?

Respostas:

96

Você tem basicamente duas opções:

Opção 1 : use o Automator para criar um aplicativo que efetivamente inicie o Chrome com argumentos de linha de comando.

Inicie o Automator e selecione para criar um aplicativo . Clique duas vezes em Executar Script do Shell na pasta Biblioteca / Utilitários e substitua o conteúdo do texto - cat- pelo seguinte:

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

Salve onde quiser.

Para substituir o ícone deste aplicativo, obtenha informações no Google Chrome real, clique no ícone no canto superior esquerdo, pressione Cmd-C, obtenha informações no aplicativo Chrome Automator, clique no ícone e pressione Cmd-V.

Por ser um aplicativo diferente, o Dock exibirá dois aplicativos Chrome quando estiver em execução: Chrome e seu iniciador do Chrome.


Opção 2 : edite seu pacote de aplicativos para iniciar um script. Este script iniciará o aplicativo real, adicionando o argumento da linha de comandos.

Clique com o botão direito do mouse Google Chrome.appe selecione Mostrar Conteúdo do Pacote . Vá para Contents/e abra Info.plistno Property List Editor / Xcode (ferramentas de desenvolvedor da Apple) ou em um plisteditor de terceiros .

Procure a entrada CFBundleExecutableou Executable File. Lembre-se do seu valor (por exemplo, firefox-binpara o Firefox). Substitua por parameterized-app.sh.

Abra o Terminal e digite o seguinte:

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

Um editor para o .sharquivo será aberto. Defina o conteúdo do arquivo para:

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

(usando o nome do executável real do qual você removeu Info.plist, adicionando os argumentos da linha de comando desejados)

Salvar e fechar. No Terminal, digite o seguinte:

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

Agora, feche o Terminal e mova seu aplicativo (que não deve estar em execução no momento) para uma pasta diferente e novamente. Isso atualizará os Serviços de inicialização , caso contrário, suas alterações serão ignoradas e o irritarão imensamente.

Agora, quando você abre o aplicativo, ele realmente executa o .sharquivo, que por sua vez inicia o arquivo executável real, enviando a linha de comando args.

Ele parecerá e se comportará como você espera, mas será necessário repeti-lo sempre que atualizar seu aplicativo, pois isso geralmente substituirá o pacote de aplicativos e todas as alterações feitas.

Daniel Beck
fonte
Por alguma razão, meu Chrome 10 ignora o argumento da linha de comando e fixa automaticamente as guias que foram fixadas na sessão anterior. Não sei o que há de errado aqui, pois eu não sou usuário do Chrome e não sei como ele deve se comportar.
Daniel Beck
6
"mover sua aplicação para uma pasta diferente e vice-versa" deve ser ousado - completamente perdido em primeira leitura :)
stephanos
11
Existe uma maneira de atualizar / redefinir / reiniciar o Launch Services por meio de um comando shell, para que você não precise mover o aplicativo para a frente e para trás novamente? ou seja, para que essa etapa seja facilmente programável?
Jordan Brough
11
@ Jordan Brough Você pode usar o utilitário lsregister para forçar uma atualização do LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross
11
Obviamente, a opção 2 funciona apenas em aplicativos que não são da CodeSign. Se vier da apple ou da loja de aplicativos, será assinado contra alterações. Mesmo uma alteração no Info.plist o interromperá. Nesse caso, um aplicativo simples de stub / wrapper ajudaria.
cde
10

Você pode escrever um script que inicie o Chrome, mas esse não seria o ícone do aplicativo no dock e faria com que um ícone separado do Chrome fosse exibido. Então você terá que criar um pacote de aplicativos.

Primeiro, faça uma cópia do seu aplicativo Chrome. Então, existem duas abordagens que podem funcionar; Não sei ao certo qual será melhor com o Mac OS X e / ou com a atualização automática do Chrome.

  1. Crie um 'iniciador' que apenas chame o Chrome com os argumentos.

    • Abra o pacote de aplicativos (clique com o botão direito do mouse em → Mostrar conteúdo do pacote no Finder) e jogue fora tudo, exceto Info.plist, PkgInfo e MacOS.
    • Na pasta MacOS, exclua o executável "Google Chrome" e substitua-o por um script de shell que chama o Chrome real:

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

      Não se esqueça chmod +xdo script.
       

  2. Modifique o pacote do Chrome que você realmente executa.

    • Na pasta MacOS, renomeie o “Google Chrome” e escreva um shell script que invoque o real com os argumentos extras:

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Vejo que o pacote do Chrome tem algo sobre assinatura de código; pode ser necessário excluir CodeResourcese / ou _CodeSignatureexecutá-lo com essas alterações.

Tudo isso se baseia no meu entendimento dos pacotes de aplicativos para Mac; Na verdade, ainda não testei essas alterações no Chrome. É até possível que o executável do Chrome no Mac não suporte essa opção, pois geralmente não se espera que os aplicativos Mac sejam executados com opções de linha de comando controláveis ​​(ao contrário do Windows, onde os aplicativos normalmente são iniciados por meio de atalhos que podem possuem opções incorporadas).

Kevin Reid
fonte
Parâmetros de suporte do Chrome, acabei de automatizar o meu seguindo suas instruções nº 2. Você realmente precisa especificar o caminho completo para o binário e não se esqueça de chmod 755 Google\ Chrome(seu script) depois de terminar. Na verdade, chamei meu script de launch.sh e o vinculei ao Google \ Chrome para facilitar as atualizações.
Orwellophile
Observe que modificar o conteúdo do pacote causa problemas com a assinatura do código, resultando em problemas estranhos, como https, não funcionando corretamente: bridge.grumpy-troll.org/2011/01/…
drevicko