Запуск пичеток удаленно с 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)
Ответы
Ответ 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, появляются в конце своего файла вместе с "У вас есть почта". и т.д.
В вашем случае может быть, что сообщение для входа пустое или просто новое, поэтому вы не видите добавленный текст, даже если он устанавливает буфер как измененный.