Embora os vários programas e serviços em um computador tenham a finalidade de oferecer conveniência, há ocasiões em que você pode precisar executar tarefas repetitivas usando as várias ferramentas e programas do sistema. Nesses casos, o uso de ferramentas de script pode ser excepcionalmente útil. Ao contrário da programação, o script é quando você pega um conjunto de ferramentas e utilitários atuais e automatiza suas interações com comandos. Por exemplo, com o Javascript, você pode dizer a um navegador para alterar a maneira como ele renderiza o conteúdo HTML ou, com o Automator, você pode dizer ao Finder para organizar os arquivos de uma determinada maneira.
Recentemente, um colega aqui na CNET me abordou com uma situação única, onde ele queria que seu Mac mudasse automaticamente a pasta de downloads do Safari com base na presença de uma unidade externa. A idéia aqui seria ter o Safari em lugar de baixar arquivos no diretório de downloads padrão, mas quando você anexar uma unidade externa específica (como um thumbdrive chamado "Downloads"), fazer com que o sistema mude automaticamente o diretório de downloads do Safari para a unidade externa, uma vez que pode ser complicado manter a alteração manualmente.
Infelizmente, o Safari em si não tem a capacidade de fazer isso, mas o OS X tem recursos que podem ser usados para isso e ser roteirizado usando o AppleScript para gerenciar o aplicativo Safari e alguns serviços do OS X, scripts Shell para executar algumas ações que não usam a interface do aplicativo e o ativador do sistema para executar apenas os scripts quando uma unidade estiver conectada.
Inicialmente, quando se pensa sobre este problema, a solução pode parecer bastante direta, e o seguinte cenário pode parecer uma boa resposta:
- Configure um script para executar o comando "defaults write com.apple.Safari DownloadFolder NAME" para alterar a pasta de downloads para o local especificado por "NAME"
- Execute este script usando o ativador do sistema somente quando uma unidade específica estiver conectada.
- Repita isso com um comando semelhante apontando para um local diferente quando a unidade não estiver mais conectada.
Embora essa abordagem básica possa parecer razoável, ela não funcionará por vários motivos. Primeiro, uma vez que o Safari esteja rodando, a única maneira de mudar suas preferências é através do próprio programa. Quando o programa for carregado, ele lerá as preferências na RAM e gerenciará suas configurações lá, portanto, se você editar o arquivo de preferências usando o TextEdit ou o comando "defaults" como mencionado acima, ele não terá efeito sobre o programa. Além disso, o Safari grava suas preferências de volta no disco ao sair, o que substituiria quaisquer configurações alteradas.
Além disso, essa abordagem pressupõe que o sistema tenha recursos disponíveis para monitorar a presença de uma unidade específica e disparar o script sempre que essa unidade estiver presente, o que não é o caso. O sistema pode monitorar se as unidades estão ou não conectadas, mas scripts adicionais seriam necessários para especificar um nome de unidade a ser verificado sempre que uma unidade for conectada.
Finalmente, há várias nuances a serem consideradas. Por exemplo, como o próprio Safari precisa ser usado para alterar suas preferências durante a execução, isso o forçará a ser o aplicativo mais importante, onde permanecerá a menos que você primeiro tenha o script detectar o aplicativo principal e restaurá-lo quando as modificações forem feitas no Safari. estão completos. Além disso, você não deseja que o script seja executado e troque o programa ativo quando qualquer unidade aleatória for anexada.
Por causa disso, o script precisaria incluir as cinco considerações a seguir:
- Lançar somente quando uma nova unidade estiver conectada
- Somente altere as configurações se uma unidade chamada "Downloads" (ou qualquer nome desatualizado) estiver anexada
- Seja condicional em sua abordagem para alterar as configurações de se o Safari está ou não sendo lançado no momento
- Apenas altere as configurações se um novo local de download desejado estiver presente
- Ter a capacidade de restaurar o aplicativo principal se o script precisar mudar para o Safari
Para implementar essas opções, dois scripts precisariam ser criados. A primeira é para o lançador do sistema "launchd", que seria usado para monitorar os pontos de montagem da unidade do sistema, para ver se uma nova unidade foi ou não anexada e montada. Em caso afirmativo, ele iniciará o script que verificará o nome da unidade, verá se o Safari está ou não sendo executado e alterará as configurações do Safari somente se elas diferirem da escolha principal da unidade externa, mas se ela não estiver presente, use a pasta de downloads padrão .
Script 1: LaunchAgent para unidades de monitoramento
O primeiro script a fazer é o lançador do sistema, chamado de Agente de Inicialização. Para criá-lo, abra o Terminal e digite o seguinte comando (copie e cole para simplificar):
toque em ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Quando isso for feito, abra-o no TextEdit executando o seguinte comando:
open -e ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Agora você deve ter um documento TextEdit em branco aberto, então copie o seguinte texto para ele e salve o documento, mas mantenha-o aberto por enquanto. Você precisará alterar a seção "FILEPATH" para alterar a localização do script:
Label local.ChangeSafariDownloads QueueDirectories Programa WatchPaths / Volumes / usr / bin / osascript ProgramArguments osascript FILEPATH
Quando você fizer login, esse script será carregado no processo do ativador do sistema e fornecerá condições e instruções para executar o script principal para editar as preferências do Safari. Nesse caso, o ativador será instruído a observar o diretório / Volumes para verificar se alguma alteração ocorreu nesse diretório. Como é onde os sistemas de arquivos são montados, sempre que uma unidade é conectada ou desconectada do sistema, isso acionará o script principal para ser executado.
Script 2: AppleScript para alterar as configurações
O segundo script é o principal que executará todas as ações, incluindo a verificação dos nomes das unidades, se o Safari está aberto ou não, e quaisquer outras condições para alterar as preferências. Para criá-lo, vá para a pasta / Applications / Utilities / e abra o programa AppleScript Editor. Uma janela do editor em branco será aberta e, quando copiar e colar o seguinte script:
- Defina o nome da unidade alternativa para usar como pasta de downloads aqui
set dlFolder para convertHome ("/ Volumes / Downloads")
diga ao aplicativo "Finder"
se existe [ arquivo POSIX dlFolder] então
- Não faça nada e use a pasta
outro
- set dlFolder para o diretório inicial padrão
defina dlFolder como (caminho POSIX de ( caminho para a pasta inicial como texto )) e "Downloads"
fim se
end tell
- obter o caminho atual do safari plist
set currentpath to convertHome (o shell script "defaults lê com.apple.Safari DownloadsPath")
- alterar caminho somente se a configuração atual não corresponder ao caminho de entrada (há algo a ser alterado)
if (currentpath as text ) não é igual a (dlFolder como texto )
- se o Safari estiver em execução, altere as configurações pelas preferências do Safari
se appIsRunning ("Safari") então
- determine a aplicação mais avançada para restaurar quando o script é feito
defina frontApp como caminho para o primeiro aplicativo como texto
- Copie o caminho da pasta de download para a área de transferência
definir a área de transferência para dlFolder como texto
ativar aplicativo "Safari"
diga ao aplicativo "System Events" para informar ao processo de inscrição "Safari"
- abra as preferências ou traga para frente (janela 1)
keystroke ", " usando {comando para baixo}
atraso 1 - pausas na exibição da janela pode resultar em erro, então esperamos um segundo
- Mude para o separador Geral
clique no botão "Geral" da barra de ferramentas 1 da janela 1
- Alterar o local de download para outro
tell pop up button "Salvar arquivos baixados para:" do grupo 1 do grupo 1 da janela "Geral"
clique
clique no item de menu "Outros ..." do menu 1 - três pontos são reticências e não três pontos
end tell
- Abra a caixa de diálogo "ir para pasta"
pressionamento de tecla "g" usando {shift down, command down}
- Cole o caminho da pasta no campo de localização
tell window "Ir para pasta"
keystroke "v" usando {comando para baixo}
retorno de teclas
end tell
clique no botão "Select" da folha 1 da janela "General"
- feche as preferências
keystroke "w" usando {comando para baixo}
end tell
- restaura a aplicação frontmost depois que o trabalho é concluído
diga ao aplicativo frontApp para ativar
outro
- se o Safari NÃO estiver em execução, use o comando defaults para alterar as preferências
do shell script ("defaults escreve com.apple.Safari DownloadsPath" & dlFolder)
fim se
fim se
- Função para converter referências de caminho inicial para caminhos completos
em convertHome (currentpath)
Se currentpath contém "~ /", então
defina oldDelimiter para delimitadores de item de texto do AppleScript
defina os delimitadores de item de texto do AppleScript para {"~ /"}
set textPath para cada item de texto do currentpath
definir delimitadores de item de texto do AppleScript para oldDelimiter
set currentpath para o caminho POSIX ( caminho para a pasta home como texto ) e item 2 no textPath
fim se
retornar caminho atual
end convertHome
- Função para verificar se a aplicação "appName" está em execução (neste caso, usada para o Safari)
em appIsRunning (appName)
dizer ao aplicativo "System Events" para (nome dos processos ) contém appName
end appIsRunning
O texto do script será inicialmente roxo, mas quando você clicar no botão da barra de ferramentas Compilar ou se salvar o script, ele ficará colorido de acordo com o que você vê aqui. Salve o script com um nome como "ChangeDownloads" em um local de sua escolha (você pode colocá-lo em uma pasta "Scripts" no diretório Documentos ou na biblioteca do usuário) e fechar o editor AppleScript.
Agora abra uma nova janela do Terminal e arraste o arquivo de script recém-criado para ele. Quando você fizer isso, o caminho completo do arquivo para o script será inserido na janela, que será algo como "/ Users / userername / Documents / ChangeDownloads.scpt." Usando o mouse, selecione o caminho do arquivo inteiro, pressione Command-C para copiá-lo para a área de transferência, e volte ao Script 1 no TextEdit e substitua a entrada "FILEPATH" pelo texto copiado. Em seguida, salve e feche o documento.
Neste ponto, os scripts estão todos configurados. Basta efetuar logout e login novamente para carregar o script do agente de inicialização (Script 1) e, agora, quando você montar uma unidade chamada "Downloads", as configurações do Safari serão alteradas automaticamente para usar essa unidade como a pasta de downloads. Se você desmontar a unidade, a configuração será revertida. O mesmo acontecerá também se você renomear uma unidade para ser chamada de "Downloads" ou alterar seu nome de "Downloads" para outra coisa.
Tenha em mente que enquanto este script funciona, ele só foi testado no OS X 10.6 "Snow Leopard" e no OS X 10.7 "Lion" rodando o Safari 5.1; no entanto, ele deve funcionar bem em outras configurações do sistema que executam pelo menos o Safari 5.0. Os principais requisitos são quando o script está manipulando as preferências do Safari de dentro do programa, ele usa índices de botões para abrir vários menus e clicar nos vários botões na tela. Se a Apple alterar a organização de preferências no Safari no futuro, essa parte do script não funcionará até que seja editada para apontar novamente para os botões adequados. No entanto, por enquanto, isso é uma limitação com a qual teremos que lidar. Uma solução para isso no Lion é aproveitar o recurso Resume da Apple em um script para sair do Safari, alterar as preferências e, em seguida, reiniciar o programa em vez de precisar programar a interface.
Por último, se você decidir que não deseja mais este script, poderá desinstalá-lo excluindo o arquivo AppleScript e removendo o arquivo LaunchAgent manualmente ou executando o seguinte comando no Terminal. Quando isso for feito, faça logout e login novamente, e você estará de volta à estaca zero:
rm ~ / Library / LaunchAgents / local.ChangeSafariDownload.plist
Deixe O Seu Comentário