Подтвердить что ты не робот

Запуск пичеток удаленно с flymake и бродягой в emacs?

Я пытаюсь использовать flymake для запуска pyflakes, как предложено здесь

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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