Удаленно запускаете пижаму с помощью flymake и tramp в emacs? - PullRequest
17 голосов
/ 30 июня 2010

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

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

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

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

Ответы [ 2 ]

9 голосов
/ 28 августа 2011

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

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

6 голосов
/ 24 октября 2011

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

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

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

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

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

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

...