首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用xmlstarlet和tramp挂起emacs的Flymake

用xmlstarlet和tramp挂起emacs的Flymake
EN

Stack Overflow用户
提问于 2013-11-10 15:51:45
回答 1查看 192关注 0票数 1

我已经在我的Emacs配置中启用了flymake。在本地,它可以正常工作,但是当我尝试用tramp打开一个远程html文件时,Emacs会挂起,我必须杀死它。

我试图检查gdb,堆栈的顶部如下所示:

代码语言:javascript
复制
#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配置为使用其他程序(如整洁或xmllint )不会改变任何事情。

我能做些什么来调试这个问题,有什么建议吗?

编辑

实际上,过了一段时间(至少1分钟),命令就完成了。启动后,将不再等待相同的缓冲区,而flymake按预期工作。

系统的详细信息

我是从Ubuntu12.04机器连接的。我试图连接到一台FreeBSD 9.3机器,但在DragonflyBSD机器上也有同样的问题。远程shell在这两个系统上都是zsh,但是将其更改为bash没有帮助。

Stacktrace

这是我得到的完整的lisp字迹。

https://gist.github.com/mrighele/8371399

flymake-html-init是在emacs wiki中显示的

有趣的是,当我发送信号时,文件缓冲区的内容会被以下内容覆盖,不确定是否感兴趣。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-10 20:08:03

尝试以下几点:

代码语言:javascript
复制
(setq debug-on-event 'sigusr2)

然后,当Emacs被冻结时,从一个shell中执行kill -USR2 <emacspid>。希望这会给你一个lisp级的回溯,这将有助于追踪问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19891723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档