3

Довольно часто я вижу веб-страницы со ссылками на файлы, которые я хочу открыть непосредственно в gVim (при просмотре с помощью Firefox в Windows). Хром-специфичный ответ - тоже хорошо иметь.

Пытаясь заставить это работать, я возился с инструментами Firefox Tools > Options > Applications (где он выбирает, что делать в зависимости от типа MIME). Но безрезультатно. Для большинства этих файлов (например, исходных файлов Python) при щелчке по ним открывается диалоговое окно «Открытие filename.py» с параметрами "Открыть с помощью", "Сохранить файл" и другими параметрами. Вместо "Открыть с помощью" я могу выбрать из выпадающего меню «Другое ...» и получить диалоговое окно "Выбор вспомогательного приложения". Теперь «Vi Improved - текстовый редактор» действительно появляется в этом списке для меня, но проблема в том, что при его выборе открывается vim.exe в окне оболочки, а я хочу видеть gVim.exe . В "Выберите вспомогательное приложение" я могу выбрать «Обзор ...» и перейти в каталог Vim, выбрать «gvim.exe», и тогда он будет работать. Но для следующего файла он не запоминает эту настройку, и я должен сделать все это снова.

Как я могу сделать так, чтобы он оставался там, или другим способом легко открывал файлы в gVim?

Читая отчеты об ошибках в Firefox, я обнаружил, что диалоговое окно "Выбор вспомогательного приложения" заполняется на основе типа MIME данного файла, и, если пользователь не изменил некоторые параметры, он берется из реестра Windows. Но я хочу иметь возможность открывать любой файл с помощью gVim, поэтому для меня не очень удобно устанавливать значение по умолчанию в Windows для каждого расширения, которое я, возможно, захочу открыть.

1 ответ1

1

Прежде всего, 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.

Что оно делает:

  1. Создает уникальное имя файла в папке Temp пользователя (в том же месте, где Firefox хранит файлы в таких случаях).

  2. Гарантирует, что расширение временного файла будет нормальным, даже если URL-адрес включает строки запроса и хеш-якоря (urlretrieve(..) без второго аргумента обрабатывает первый, но не последний). Это полезно, потому что оно говорит Vim, как синтаксически выделить файл.

  3. Загружает файл с URL-адреса в каталог Temp текущего пользователя.

  4. Открывает файл с помощью gvim.exe (или редактора по вашему выбору - см. Ниже).

Как использовать это решение:

  1. Сохраните приведенный выше скрипт Python как open_with.py где-нибудь, где вы храните такие скрипты.

  2. Установите расширение Open With Firefox по вышеуказанной ссылке и перезапустите Firefox.

  3. Перейдите в Tools > Add-ons > Extensions > Open With > Options . Там:

    (А). (Если вы не планируете использовать Open With по прямому назначению, "Скрыть" все браузеры в списке.)

    (Б). "Добавить ..." python.exe .

    (С). Установите его «Аргументы ...» на путь сценария, за которым следует исполняемое имя файла или путь редактора. Для меня это было бы
    C:\E\infrastructure\open_with.py gvim.exe

    (Г). «Переименовать ...» это в "gVim".

  4. Убедитесь, что gvim.exe находится в переменной PATH. Я рекомендую сценарий EditPATH Autohotkey, который можно скомпилировать в EXE- файл с помощью инструментов AHK (для удобства поместите его в папку « Quick Launch » - редактирование PATH выполняется в три щелчка, а не для повторной проверки памяти панели управления). В противном случае вы должны указать полный путь к gvim.exe на шаге 3 (c).

  5. Вот и все. Теперь найдите ссылку на файл в 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 в качестве обязательного условия не слишком сложна.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .