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

3

Frequentemente, vejo páginas da web com links para arquivos que desejo 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 Tools > Options > Applicationsconfigurações do Firefox (onde ele escolhe o que fazer com base no tipo MIME). Para nenhum proveito. Para a maioria desses arquivos (por exemplo, arquivos de origem Python), clicar neles exibe a caixa de diálogo "Opening filename.py" com as opções "Abrir com", "Salvar arquivo" e outras opções. Contra "Abrir com", posso selecionar na lista suspensa "Outros ..." e recebo a caixa de diálogo "Escolher aplicativo auxiliar". Agora, "Vi melhorado - um editor de texto" não aparecer nessa lista para mim, mas o problema é que a escolha se abre vim.exeem uma janela do shell, enquanto eu quero vergVim.exe. No "Choose Helper Application", posso selecionar "Browse ..." e navegar para o diretório do Vim, escolha "gvim.exe" e, em seguida, ele funciona. Mas para o próximo arquivo, ele não se lembra dessa configuração e eu tenho que fazer tudo novamente.

Como faço para ficar lá ou usar outra maneira de abrir arquivos facilmente no gVim?

Ao ler os relatórios de erros do Firefox, percebi 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 altere algumas configurações, isso é obtido no Registro do Windows. Mas eu quero poder abrir qualquer arquivo com o gVim, portanto, não é uma boa solução definir o padrão no Windows para todas as extensões que eu desejar abrir.

Evgeni Sergeev
fonte
Desde quando esse lugar se tornou um blog colaborativo?
Romainl # 22/14
2
@romainl Você poderia reformular seu comentário de maneira construtiva?
Evgeni Sergeev 24/10
@ EvgeniSergeev - Você tem muitas informações em sua pergunta, é difícil segui-las. Por isso, remova-as ou formate-as de forma que apenas as informações relevantes para sua pergunta estejam na frente e no centro.
Ramhound 23/02

Respostas:

1

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:

  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 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.

  3. Faz o download do arquivo do URL para o Tempdiretório 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.pyum local onde você mantém esses scripts.

  2. Instale a extensão Open With Firefox no link acima e reinicie o Firefox.

  3. 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".

  4. Verifique se gvim.exeestá 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 Launchpasta 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.exeetapa 3 (c).

  5. É 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".

Captura de tela do menu de contexto

(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.exeacima 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.exetem problemas com argumentos que contêm o =personagem. Além disso, não se tratava apenas de chamar gvim.exea 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.

Evgeni Sergeev
fonte