2010-06-30 2 views
16

Я пытаюсь использовать flymake запустить pyflakes, как это было предложено hereЗапуск пихты удаленно с flymake и бродягой в emacs?

Это прекрасно работает для локальных файлов и работает почти с удаленными файлами с немного настройки, но я остался с проблемой, где flymake/pyflakes «изменяет» буфер при его запуске (хотя фактически ничего не меняется), что делает его практически бесполезным на практике (например, сохранение файла запускает flymake, который сразу же модифицирует буфер).

Вот что я сделал почти заставить его работать:

  1. Установленные pyflakes на удаленном компьютере.
  2. Настроить мою переменную tramp-remote-process-environment так, чтобы pyflakes можно было найти в ее PATH
  3. Используется вариант кода из указанной выше вики. Очевидно, я исключил проверку, которая отключает ее для удаленных буферов. Кроме того, конструкция (when (load "flymake" t) ...) не работала так, как я ожидал, но я не слишком беспокоюсь об этом.
  4. Переопределенный (для целей тестирования - рекомендации должны быть в порядке, если это может быть сделано для работы) функция flymake-start-syntax-check-process, так что она использует start-file-process (которая работает с бродягой) вместо start-process (а это не так).

Изменение в # 4 не вызывает никаких проблем при обработке локального файла, но хотя теперь это позволяет flymake запускать удаленные pyflakes для удаленных файлов (ошибки подсвечиваются как ожидалось), в этом случае буфер «модифицируется» всякий раз, когда запускается flymake.

Я предполагаю, что для удаленных процессов start-file-process приводит к дополнительным возвращаемым значениям/данным, которые не встречаются для локальных процессов.

Есть ли у кого-нибудь идеи/советы?

  • Emacs 23.1 и 23.2 на Ubuntu
  • Python 2.4.6
  • Pyflakes 0.4.0 (через easy_install)
+0

Просто примечание: в 2014 году стандартная flymake, которую вы можете установить с помощью elpa (у меня есть версия 0.4.16), включает переменную flymake-run-in-place - просто настройте ее на nil, а flymake будет хранить файлы в $ TMP – gromgull

ответ

8

Вы должны сказать flymake к create это копия буфера somewhere локально , Я предпочитаю использовать каталог $TMP, так как это также позволяет мне использовать tramp для файлов в каталогах. У меня нет прав на запись.

Возможно, вы захотите проверить свою вилку flymake-python, так как она делает все это.

+1

Это звучит многообещающе, но я уже не в удобном положении, чтобы проверить это. Кингпин, не могли бы вы сообщить мне, есть ли решение для принятия? – phils

+0

kingpin сказать да – prince

+0

В этом случае, спасибо вам обоим. – phils

6

У меня это зафиксировано в моей вилке Flymake (https://github.com/illusori/emacs-flymake).

Он либо выполнит проверку синтаксиса на удаленном компьютере через Tramp, без проблемы с модификацией буфера, которую вы видите; или вы можете установить flymake-run-in-place на nil, и он проведет проверку синтаксиса на локальной машине, точно так же, как flymake в обычном буфере без тарелок.

Поскольку это исправлено на уровне Flymake, это исправление работает для всех языков и синтаксических проверок, а не только для пироплексов.

Если вам интересно узнать, почему это происходит, в основном, когда запускается обработчик Tramp для процесса start-file-process, он выгружает сообщение для входа для подключения в конец текущего буфера, прежде чем какой-либо выходной фильтр может быть прикрепленным к процессу.

Обычно это проявляется в том, что люди, видя содержимое/etc/issue, появляются в конце своего файла вместе с «У вас есть почта». и так далее.

В вашем случае может быть, что сообщение для входа пустое или просто новая строка, поэтому вы не видите добавленный текст, даже если он устанавливает буфер как измененный.

+0

Спасибо за информацию. Это похоже на отличную коллекцию улучшений, которые вы сделали. – phils

Смежные вопросы