python emacs tramp flymake pyflakes

python - ¿Ejecución de pyflakes de forma remota con flymake y tramp en emacs?



(2)

Estoy tratando de usar flymake para ejecutar pyflakes, como se sugiere here

Esto funciona bien para archivos locales, y casi funciona con archivos remotos con un poco de ajustes, pero me queda un problema en el que flymake / pyflakes ''modifica'' el búfer cuando se ejecuta (aunque en realidad nada parece cambiar), lo cual es un poco inútil en la práctica (por ejemplo, guardar un archivo ejecuta flymake que inmediatamente modifica el búfer de nuevo).

Esto es lo que hice para que casi funcionara:

  1. Pyflakes instalados en la caja remota.
  2. Personalicé mi variable tramp-remote-process-environment para que pudiese encontrar pyflakes en su PATH
  3. Usé una variante del código del enlace wiki anterior. Obviamente excluí el cheque que lo deshabilita para buffers remotos. Además, la construcción de (when (load "flymake" t) ...) no funcionó como esperaba, pero no estoy muy preocupado por eso.
  4. Se redefinió (para fines de prueba: el consejo debería estar bien si se puede hacer que funcione) la función flymake-start-syntax-check-process para que use start-file-process (que funciona con tramp) en lugar de start-process (que no lo hace).

El cambio en # 4 no parece causar ningún problema al procesar un archivo local, pero aunque esto ahora permite que flymake ejecute los pyflakes remotos para los archivos remotos (los errores se resaltan como se espera), en este caso el búfer se ''modifica'' cada vez que se ejecuta flymake.

Supongo que el proceso de start-file-process , para procesos remotos, resulta en algún valor / datos de retorno adicional que no ocurre para los procesos locales.

¿Alguien tiene alguna idea / consejo?

  • Emacs 23.1 y 23.2 en Ubuntu
  • Python 2.4.6
  • Pyflakes 0.4.0 (a través de easy_install)

Debe decirle a flymake que create su copia del búfer en somewhere localmente, prefiero usar el directorio $TMP , ya que esto también me permite usar el rastreo de archivos en directorios en los que no tengo permisos de escritura.

Es posible que desee comprobar mi tenedor de flymake-python ya que hace todo esto.


Tengo esto arreglado en mi fork de Flymake ( https://github.com/illusori/emacs-flymake ).

O bien ejecutará la comprobación de sintaxis en la máquina remota a través de Tramp, sin el problema de modificación del búfer que esté viendo; o puede establecer flymake-run-in-place en nil y ejecutará la comprobación de sintaxis en la máquina local, al igual que flymake en un búfer regular que no es Tramp.

Dado que se ha corregido en el nivel de Flymake, esta solución funciona para todos los idiomas y comprobaciones de sintaxis en lugar de solo pyflakes.

Si le interesan los detalles de por qué está sucediendo, básicamente cuando se inicia el controlador Tramp para el inicio del proceso de archivos, se descarga el mensaje de inicio de sesión de la conexión en el extremo del búfer actual antes de poder adjuntar cualquier filtro de salida a la proceso.

Por lo general, esto se manifiesta cuando las personas que ven el contenido de / etc / número aparecen al final de su archivo junto con "Tienes correo". y así.

En su caso, es posible que el mensaje de inicio de sesión esté vacío o solo sea una nueva línea, por lo que no verá que se agregue ningún texto, incluso aunque esté configurando el búfer como modificado.