Primeiro, o Firefox baseia as configurações em "Choose Helper Application" nas configurações do sistema, portanto não há uma maneira simples de fazer isso.
Uma solução ainda melhor, em termos de usabilidade, é usar a extensão do Firefox chamada "Open With" https://addons.mozilla.org/en-US/firefox/addon/open-with/
Ele diz que é para navegadores da web, mas acontece que pode ser qualquer programa - ele apenas chama ele de programa com a URL como o primeiro argumento.
Em seguida, escrevi um script Python:
import sys, os, re, tempfile, urllib, urlparse, time
handler, url = sys.argv[1:3]
match = re.match(r".*(\.[A-Za-z_]+)$", urlparse.urlparse(url).path)
tmpfile, tmpfile_path = tempfile.mkstemp(suffix=match.group(1) if match else '')
os.close(tmpfile)
print "Downloading to temp file ..."
urllib.urlretrieve(url, tmpfile_path)
#Normally it would try to clean up the file we urlretrieved after this Python
#process ends. Thank BDFL there are no access restrictions on private variables.
urllib._urlopener._URLopener__tempfiles = []
os.execlp(handler, handler, '%s' % tmpfile_path)
#We don't attempt to delete the temporary file because:
# 1. Firefox also doesn't in such cases.
# 2. It's problematic in some instances, such as when the subprocess (this
# script used to call the handler in a subprocess) finds another copy
# of itself running, hands the file over to it and exits. Meanwhile, we
# would be over here deleting the file while the subprocess'es brother
# hadn't tried to open it yet.
O que faz:
Cria um nome de arquivo exclusivo no diretório Temp do usuário (mesmo local em que o Firefox armazena arquivos nesses casos).
Garante que a extensão do arquivo temporário seja sã, mesmo com uma URL que inclua seqüências de caracteres de consulta e âncoras de hash ( urlretrieve(..)
sem um segundo argumento lida com o primeiro, mas não com o último). Isso é útil, porque indica ao Vim como destacar a sintaxe do arquivo.
Faz o download do arquivo do URL para o Temp
diretório do usuário atual .
Abre o arquivo com gvim.exe
(ou um editor de sua escolha - veja abaixo).
Como usar esta solução:
Salve o script Python acima como open_with.py
um local onde você mantém esses scripts.
Instale a extensão Open With Firefox no link acima e reinicie o Firefox.
Vá para Tools > Add-ons > Extensions > Open With > Options
. Lá:
(uma). (A menos que você planeje usar o Open With para a finalidade a que se destina, "oculte" todos os navegadores da lista.)
b) "Adicionar ..." python.exe
.
(c) Defina seus "Argumentos ..." para o caminho do script seguido pelo nome do arquivo ou caminho executável do editor. Para mim, isso seria
C:\E\infrastructure\open_with.py gvim.exe
d) "Renomeie ..." para "gVim".
Verifique se gvim.exe
está na variável PATH. Eu recomendo o script EditPATH Autohotkey , que pode ser compilado em um EXE usando as ferramentas AHK (coloque-o na Quick Launch
pasta por conveniência - editar PATH torna-se três cliques, em vez de ter que passar pelo teste de memória do Painel de Controle mais uma vez.) Caso contrário, você deve forneça todo o caminho da gvim.exe
etapa 3 (c).
É isso aí. Agora encontre um link para um arquivo no Firefox, clique com o botão direito do mouse e escolha "Abrir link com o gVim".
(Acho que consegui o ícone correto lá :)
Bônus: se você definir a configuração relevante nas Opções da extensão Abrir com , poderá clicar com o botão direito do mouse na guia Firefox e abrir (a maioria) páginas da Web no Vim também - ou seja, como "Exibir código-fonte", exceto usando o Vim.
Observe que esta solução também se aplica ao Emacs, Notepad ++ e muitos outros softwares não restritos aos editores de texto. Por exemplo, eu apenas tentei com o GIMP e ele abriu um arquivo PNG. (Para fazer isso, substitua gvim.exe
acima pelo caminho para o GIMP. Nota: para abrir uma imagem arbitrária dessa maneira, não apenas um link, você pode visualizar a imagem e clicar com o botão direito do mouse na guia.)
Nota histórica: inicialmente eu escrevi um script BAT, mas isso se tornou insustentável após a falha neste caso de teste: http://evgeni.org/w/api.php?format=xml&action=query&titles=AutoHotkey_shortcuts&prop=revisions&rvprop=content
Isso é porque cmd.exe
tem problemas com argumentos que contêm o =
personagem. Além disso, não se tratava apenas de chamar gvim.exe
a URL como argumento da linha de comando (embora o Vim aceite URLs), porque não pode lidar com esse caso de teste - apenas abre uma instância em branco do Vim. E para analisar a URL, eu teria que recorrer ao Powershell, que restringe a portabilidade da solução. No final, decidi que ter uma instalação do Python como pré-requisito não é pedir muito.