在Emacs中,我如何确定正在加载tramp的软件包?

7
我与tramp和cygwin-mount有一个奇怪的交互(我认为是这个问题:Emacs: Tab completion of file name appends an extra i:\cygwin)。因此,我想禁用tramp。我在我的.emacs文件中找不到任何显式加载tramp的内容。当我在查找文件的迷你缓冲区中按Tab时,我可以看到“Loading tramp...”。我想找出是哪个包导致了tramp的加载并将其禁用。我该如何做?我尝试搜索(require 'tramp),但没有找到有趣的东西。我唯一能想到的另一个选项是逐个注释我的.emacs文件中的部分代码,并查看哪个起作用 - 但这太蛮力了,我希望有一种更聪明(更简单)的方法。
4个回答

19

这是一个非常好的问题!主要是因为我之前不知道有这个函数(eval-after-load file form),这个函数可以让你写出下面这样的代码并将其放入你的.emacs文件中:

(eval-after-load "tramp"
  '(debug))

这将以蛮力形式,在您的窗口中呕吐出一个回溯并显示有问题的库。


我也不知道,看起来正是Rhith所寻找的。 - Friedrich
太棒了,pajato0。这真的帮助我缩小了问题范围,并节省了至少一天的疑难解答时间。此外,我还在其中学到了更多关于emacs的知识!感谢大家的回答和帮助。 - Rohith

3

我想您会发现tramp默认已打开。如果您执行以下操作:

M-x customize-apropos
Customize (regexp): tramp

(“自定义(regexp):”是emacs的提示)您会看到列出了两个变量(至少在emacs 23中是这样),类似于:
如果将tramp-mode设置为“关闭”,保存到以后的会话,并重新启动emacs,则不再加载tramp。我认为您可以仅在当前会话中关闭它,就可以测试它,但对于自定义变量,这并不总是起作用,尽管像tramp这样的东西是emacs标准分发的一部分,应该可以这样做。
我不再安装emacs 22,但类似的内容也应适用于那个版本。

2

有一天,我在我的系统中发现了“/C:\...\debuglog.txt”,与tramp相关的问题类似。由于这个文件,每当我输入“/”时,自动完成就会调用tramp。而tramp自然会出错。auto-complete正在调用它。

(expand-file-name ...)

由于当前的file-name-handler-alist,某些操作调用了tramp。我的解决方案是:

(delete-if
 (lambda (x)
   (or (eq (cdr x) 'tramp-completion-file-name-handler)
       (eq (cdr x) 'tramp-file-name-handler)))
 file-name-handler-alist)

这解决了我的问题(在使用tramp之后,我无法再在gnus中单击超链接)。 我还没有尝试过应用此修复程序后再次使用tramp。 记住,您首先必须例如(require 'cl) - Simon Wright

1

使用“instrument find-file”调试,或使用“instrument your init file”进行调试。 然后,您可以逐步加载并查看tramp内容的加载位置。


这看起来像是我想做的事情 - 但我不知道该怎么做。你能给我一些详细信息吗?我在谷歌上搜索了一些用于调试的仪器emacs代码,似乎你建议我使用edebug-defun - 这正确吗?从查看tramp.el的内容来看,它似乎没有一个单一的入口点函数可以进行仪器化。考虑到我是一个emacs新手,更多的细节将非常有用。 - Rohith
1
我认为pajato0已经让这个变得不重要了。然而,我写了或者偷了下面的代码:(defun find-symbol-at-point () "Find the source of either the function or variable at point." (interactive) (or (find-function-at-point) (find-variable-at-point)))我将其绑定到F5键上,现在只需转到函数类型F5并获取它的定义位置,然后仅对此函数进行调试。 - Friedrich
在将符号视为函数或变量时要小心,因为给定的符号实际上可以是两者(这在模式中经常观察到)。在这些情况下,您的“find-symbol-at-point”永远不会注意到变量定义。 - phils

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接