У меня есть flymake включен в моей конфигурации Emacs. Локально он работает нормально, но когда я пытаюсь открыть удаленный html-файл с помощью tramp, Emacs зависает, и я должен его убить.Flymake с xmlstarlet и tramp висит emacs
Я попытался проверить с помощью GDB, и в верхней части стека выглядит следующим образом:
#0 0x00007fcee786c83c in __pselect (nfds=<optimized out>, readfds=<optimized out>, writefds=<optimized out>, exceptfds=<optimized out>, timeout=<optimized out>, sigmask=<optimized out>)
at ../sysdeps/unix/sysv/linux/pselect.c:79
#1 0x00000000004d02f7 in xg_select (fds_lim=13, rfds=0x7fff4d830210, wfds=0x0, efds=0x0, timeout=0x7fff4d830460, sigmask=0x0) at xgselect.c:48
#2 0x00000000005947f3 in wait_reading_process_output (time_limit=<optimized out>, nsecs=0, read_kbd=0, do_display=false, wait_for_cell=12096626, wait_proc=<optimized out>, just_wait_proc=1) at process.c:4633
#3 0x0000000000597429 in Faccept_process_output (process=56383997, seconds=<optimized out>, millisec=<optimized out>, just_this_one=<optimized out>) at process.c:4026
Таким образом, кажется, что по какой-то причине процесс XMLStarlet на удаленной машине, но я понятия не имею, почему.
Команда, которая использует flymake, должна быть xmlstarlet val filename.html
, которая без проблем запускается из командной строки. Настройка flymake для использования других программ, таких как tidy или xmllint, ничего не меняет.
Любое предложение о том, что я могу сделать, чтобы отладить проблему?
Редактировать
На самом деле через некоторое время (по крайней мере, 1 минута) команда завершается. После запуска больше нет ожиданий для того же буфера, и flymake работает, как ожидалось.
Подробная информация о системе
Я соединительном из Ubuntu 12.04 машины. Я попытался подключиться к машине FreeBSD 9.3, но у меня такая же проблема на машине DragonflyBSD. Удаленная оболочка - zsh на обеих системах, но ее изменение в bash не помогает.
StackTrace
Это полный сюсюкать StackTrace я получаю.
https://gist.github.com/mrighele/8371399
flymake-html-init
является один представлен в emacs wiki
Интересно, что когда я посылаю сигнал, содержимое буфера файла переписывается в следующем, не уверен, если это какой-либо интерес ,
tramp_perl_file_truename() {
function> \perl5 -e '
function quote> use File::Spec;
function quote> use Cwd "realpath";
function quote> sub recursive {
function quote> my ($volume, @dirs) = @_;
function quote> my $real = realpath(File::Spec->catpath(
function quote> $volume, File::Spec->catdir(@dirs), ""));
function quote> if ($real) {
function quote> my ($vol, $dir) = File::Spec->splitpath($real, 1);
function quote> return ($vol, File::Spec->splitdir($dir));
function quote> }
function quote> else {
function quote> my $last = pop(@dirs);
function quote> ($volume, @dirs) = recursive($volume, @dirs);
function quote> push(@dirs, $last);
function quote> return ($volume, @dirs);
function quote> }
function quote> }
function quote> $result = realpath($ARGV[0]);
function quote> if (!$result) {
function quote> my ($vol, $dir) = File::Spec->splitpath($ARGV[0], 1);
function quote> ($vol, @dirs) = recursive($vol, File::Spec->splitdir($dir)<sive($vol, File::Spec->splitdir($dir)) <sive($vol, File::Spec->splitdir($dir));
function quote> $result = File::Spec->catpath($vol, File::Spec->catdir(@di<>catpath($vol, File::Spec->catdir(@dir <>catpath($vol, File::Spec->catdir(@dirs), "");
function quote> }
function quote> if ($ARGV[0] =~ /\/$/) {
function quote> $result = $result . "/";
function quote> }
function quote> print "\"$result\"\n";
function quote> ' "$1" 2>/dev/null
function> } 2>/dev/null; echo tramp_exit_status $?
tramp_exit_status 0
Я не знаю, будет ли это полезно, но вы можете проверить http://stackoverflow.com/questions/3145746/running-pyflakes-remotely-with-flymake-and-tramp-in-emacs, чтобы посмотрите, есть ли какое-либо полезное переключение. Также есть https://github.com/flycheck/flycheck, который был написан как замена для flymake. – phils