Прежде всего, Firefox основывает настройки в «Выбор приложения-помощника» на системных настройках, поэтому простого способа их настройки нет.
Еще более удачным решением с точки зрения удобства использования является использование расширения Firefox под названием "Открыть с помощью" https://addons.mozilla.org/en-US/firefox/addon/open-with/
Он говорит, что это для веб-браузеров, но оказывается, что это может быть любая программа - он просто вызывает программу с URL-адресом в качестве первого аргумента.
Затем я написал скрипт на 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.
Что оно делает:
Создает уникальное имя файла в папке Temp пользователя (в том же месте, где Firefox хранит файлы в таких случаях).
Гарантирует, что расширение временного файла будет нормальным, даже если URL-адрес включает строки запроса и хеш-якоря (urlretrieve(..)
без второго аргумента обрабатывает первый, но не последний). Это полезно, потому что оно говорит Vim, как синтаксически выделить файл.
Загружает файл с URL-адреса в каталог Temp
текущего пользователя.
Открывает файл с помощью gvim.exe
(или редактора по вашему выбору - см. Ниже).
Как использовать это решение:
Сохраните приведенный выше скрипт Python как open_with.py
где-нибудь, где вы храните такие скрипты.
Установите расширение Open With Firefox по вышеуказанной ссылке и перезапустите Firefox.
Перейдите в Tools > Add-ons > Extensions > Open With > Options
. Там:
(А). (Если вы не планируете использовать Open With по прямому назначению, "Скрыть" все браузеры в списке.)
(Б). "Добавить ..." python.exe
.
(С). Установите его «Аргументы ...» на путь сценария, за которым следует исполняемое имя файла или путь редактора. Для меня это было бы
C:\E\infrastructure\open_with.py gvim.exe
(Г). «Переименовать ...» это в "gVim".
Убедитесь, что gvim.exe
находится в переменной PATH. Я рекомендую сценарий EditPATH Autohotkey, который можно скомпилировать в EXE- файл с помощью инструментов AHK (для удобства поместите его в папку « Quick Launch
» - редактирование PATH выполняется в три щелчка, а не для повторной проверки памяти панели управления). В противном случае вы должны указать полный путь к gvim.exe
на шаге 3 (c).
Вот и все. Теперь найдите ссылку на файл в Firefox, щелкните его правой кнопкой мыши и выберите "Открыть ссылку с помощью gVim".
(Угадайте, как я получил правильную иконку там :)
Бонус: если вы установите соответствующий параметр в Открыть с помощью параметров расширений, вы можете щелкнуть правой кнопкой мыши на вкладке Firefox и открытые ( в большинстве) веб - страниц в Vim тоже - то есть как "View Source" , за исключением использования Vim.
Обратите внимание, что это решение также применимо к Emacs, Notepad++ и многим другим программам, не ограниченным текстовыми редакторами. Например, я только что попробовал это с GIMP, и он открыл файл PNG. (Для этого замените gvim.exe
выше на путь к GIMP. Примечание: чтобы открыть произвольное изображение таким образом, а не просто ссылку, вы можете просмотреть изображение, а затем щелкнуть правой кнопкой мыши на его вкладке.)
Историческая справка: изначально я пошел на написание BAT-сценария, но он стал несостоятельным после того, как он не прошел этот тестовый пример: http://evgeni.org/w/api.php?format=xml&action=query&titles=AutoHotkey_shortcuts&prop=revisions&rvprop=content
Это потому, что cmd.exe
имеет проблемы с аргументами, содержащими символ =
. Более того, это был не просто вызов gvim.exe
с URL-адресом в качестве аргумента командной строки (хотя Vim принимает URL-адреса), поскольку он не может обработать этот тестовый случай - просто открывается пустой экземпляр Vim. А для разбора URL мне придется прибегнуть к Powershell, который несколько ограничивает переносимость решения. В конце концов я решил, что установка Python в качестве обязательного условия не слишком сложна.