Firefox - Como abrir um link (para qualquer arquivo baseado em texto) no Vim?

3

Na maioria das vezes, vejo páginas da Web com links para arquivos que quero abrir diretamente no gVim (ao navegar com o Firefox no Windows). Resposta específica do Chrome - também é bom ter.

Tentando fazer isso funcionar, eu estava mexendo nas configurações de Tools > Options > Applications do Firefox (onde ele escolhe o que fazer com base no tipo MIME). Sem sucesso. Para a maioria desses arquivos (por exemplo, arquivos de origem Python), clicar neles abre a caixa de diálogo "Abrindo nome do arquivo.py" com as opções "Abrir com", "Salvar arquivo" e outras opções. Contra "Open With" eu posso selecionar em um menu suspenso "Other ..." e recebo o diálogo "Choose Helper Application". Agora, "Vi Melhor - Editor de Texto" aparece nessa lista para mim, mas o problema é que a escolha abre vim.exe em uma janela de shell, enquanto eu quero ver gVim.exe . No "Choose Helper Application", eu posso selecionar "Browse ..." e navegar para o diretório do Vim, escolher "gvim.exe", e então ele funciona. Mas para o próximo arquivo, ele não lembra dessa configuração e eu tenho que fazer tudo de novo.

Como posso fazê-lo ficar lá ou usar outra maneira de abrir facilmente arquivos no gVim?

A partir da leitura dos relatórios de bugs do Firefox, concluí que a caixa de diálogo "Choose Helper Application" é preenchida com base no tipo MIME do arquivo fornecido e, a menos que o usuário tenha alterado algumas configurações, isso é obtido do Registro do Windows. Mas eu quero ser capaz de abrir qualquer arquivo com gVim, então não é uma boa solução para mim definir o padrão no Windows para cada extensão que eu possivelmente queira abrir.

    
por Evgeni Sergeev 22.10.2014 / 14:40

1 resposta

1

Em primeiro lugar, o Firefox baseia as configurações em "Escolher aplicativo auxiliar" nas configurações do sistema, portanto, não há uma maneira simples de configurá-lo.

Uma solução ainda melhor, em termos de usabilidade, é usar a extensão do Firefox chamada "Abrir com" link

Ele diz que é para navegadores da Web, mas acontece que pode ser qualquer programa - ele apenas chama ele programa com a URL como o primeiro argumento.

Em seguida, eu escrevi um script em 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:

  1. Cria um nome de arquivo exclusivo no diretório Temp do usuário (mesmo local em que o Firefox armazena arquivos nesses casos).

  2. Garante que a extensão do arquivo temporário será são, mesmo com um URL incluindo cadeias de caracteres de consulta e âncoras de hash ( urlretrieve(..) sem um segundo argumento manipula o primeiro, mas não o último). Isso é útil porque informa ao Vim como realçar a sintaxe do arquivo.

  3. Faz o download do arquivo da URL para o diretório Temp do usuário atual.

  4. Abre o arquivo com gvim.exe (ou um editor de sua escolha - veja abaixo).

Como usar esta solução:

  1. Salve o script Python acima como open_with.py em algum lugar onde você guarda esses scripts.

  2. Instale a extensão Abrir com Firefox no link acima e reinicie o Firefox.

  3. Vá para Tools > Add-ons > Extensions > Open With > Options . Lá:

    (a). (A menos que você planeje usar Abrir com para o propósito pretendido, "Ocultar" todos os navegadores da lista.)

    (b). "Adicionar ..." python.exe .

    (c). Defina seus "Argumentos ..." para o caminho do script seguido pelo nome do arquivo executável ou caminho do editor. Para mim, isso seria C:\E\infrastructure\open_with.py gvim.exe

    (d). "Renomear ..." para "gVim".

  4. Certifique-se de que gvim.exe esteja na variável PATH. Eu recomendo o script EditPATH Autohotkey , que é compilável para um EXE usando o AHK ferramentas (coloque-o na pasta Quick Launch por conveniência - editar PATH se torna três cliques, em vez de ter que passar pelo teste de memória do Painel de Controle novamente.) Caso contrário, você deve fornecer o caminho completo de gvim.exe na etapa 3 ( c).

  5. É isso. Agora, encontre um link para um arquivo no Firefox, clique com o botão direito e escolha "Abrir link com o gVim".

(Adivinhacomoencontreioíconecorreto:)

Bônus:sevocêdefiniraconfiguraçãorelevantenasOpçõesdeAbrir,vocêpodeclicarcomobotãodireitodomouseemumaguiadoFirefoxeabrirpáginasdawebnoVimtambém-ouseja,como"Ver Fonte", exceto usando Vim.

Note que esta solução se aplica tão bem ao Emacs, ao Notepad ++ e a muitos outros softwares não restritos a 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 imagem e clicar com o botão direito do mouse tab.)

Nota histórica: inicialmente eu fui escrever um script BAT, mas isso se tornou insustentável depois que ele falhou neste caso de teste: link
Isso porque cmd.exe tem problemas com argumentos que contêm o caractere = . Além disso, não foi apenas uma questão de chamar gvim.exe com a URL como o argumento da linha de comando (embora o Vim aceite URLs), porque não pode manipular este caso de teste - apenas abre uma instância vazia do Vim. E para analisar a URL, eu teria que recorrer ao Powershell, o que restringe um pouco a portabilidade da solução. No final, decidi que ter uma instalação do Python como pré-requisito não é pedir muito.

    
por 22.10.2014 / 14:40