Запускать pyflakes удаленно с помощью flymake и tramp в emacs?

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

Это отлично работает для локальных файлов и почти работает с удаленными файлами с небольшой настройкой, но у меня осталась проблема, когда 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)

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


Ответы (2)


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

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

person Ross Patterson    schedule 27.08.2011
comment
Звучит многообещающе, но у меня больше нет возможности проверять это. Кингпин, не могли бы вы сообщить мне, есть ли решение, которое нужно принять? - person phils; 28.08.2011
comment
Привет, @Ross Patterson. Использую вашу модифицированную версию flymake. У него была проблема с файлами, у которых нет расширения .py (но загружается с режимом python). Я могу обойти это с помощью некоторой помощи, и он довольно работает с локальными файлами python. (с / без py.extension); (stackoverflow.com/questions/14082975/) Однако он не работает с tramp over ssh. локальные буферы говорят flymake: 0/2 в минибуфере, тогда как буфер tramp говорит только flymake. второстепенный режим открыт, но выделения не происходит. есть идеи? благодаря. - person Muhammet Can; 03.01.2013

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

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

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

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

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

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

person Sam Graham    schedule 24.10.2011
comment
Спасибо Вам за информацию. Похоже, это отличный набор улучшений, которые вы сделали. - person phils; 24.10.2011