2013-11-10 4 views
1

У меня есть 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 
+0

Я не знаю, будет ли это полезно, но вы можете проверить http://stackoverflow.com/questions/3145746/running-pyflakes-remotely-with-flymake-and-tramp-in-emacs, чтобы посмотрите, есть ли какое-либо полезное переключение. Также есть https://github.com/flycheck/flycheck, который был написан как замена для flymake. – phils

ответ

1

Попробуйте следующее:

(setq debug-on-event 'sigusr2) 

, а затем, когда Emacs заморожен, делать kill -USR2 <emacspid> из оболочки. Это, надо надеяться, даст вам обратную линию уровня lisp, которая поможет выявить проблему.

+0

Спасибо, это не помогло в этом конкретном случае (из backtrace я не могу понять, из какой программы emacs ждет выход), но это может оказаться очень полезным в будущем. –

+0

Можете ли вы опубликовать обратную линию? – Stefan

+0

Извините за долгую задержку. Если вас все еще интересует, я разместил соответствующую стеклу. –

Смежные вопросы