Как в Emacs узнать, какой пакет загружает бродягу?

У меня странное взаимодействие с бродягой и cygwin-mount (я думаю: Emacs: завершение имени файла с помощью табуляции добавляет дополнительный i:\cygwin). Из-за этого я хочу отключить трамп. Я не могу найти ничего в моем .emacs, который явно загружает трамп. Я вижу «Загрузка бродяги ...», когда нажимаю вкладку в минибуфере поиска файлов. Я хотел бы выяснить, какой пакет вызывает загрузку бродяги, и отключить это. Как мне это сделать? Я пытался искать (требовать «бродягу»), но не смог найти ничего интересного. Единственный другой вариант, который я могу придумать, - это закомментировать фрагменты моего .emacs один за другим и посмотреть, какой из них работает, но это настолько грубая сила, что мне нужен более умный (и простой) способ.


person Rohith    schedule 10.11.2009    source источник


Ответы (4)


Какой отличный вопрос! Хотя бы потому, что я не знал о функции (форма файла eval-after-load), которая позволит вам написать следующий код и поместить его в ваш файл .emacs:

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

Что в форме грубой силы вырвет трассировку в вашем окне и обнаружит оскорбительную библиотеку.

person pajato0    schedule 10.11.2009
comment
Я тоже этого не знал, кажется, это именно то, что искал Рит. - person Friedrich; 11.11.2009
comment
Потрясающе, pajato0. Это действительно помогло мне сузить круг проблем и сэкономило мне как минимум день на устранение неполадок. Кроме того, я узнал намного больше о emacs! Всем спасибо за ответы и помощь. - person Rohith; 11.11.2009

Я думаю, вы обнаружите, что бродяга включена по умолчанию. Если вы сделаете:

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

("Customize (regexp):" - это приглашение от emacs) вы увидите две перечисленные переменные (по крайней мере, я делаю это в emacs 23), что-то вроде:

alt text

Если вы установили режим бродяги на «выкл», сохраните для будущих сессий и перезапустите emacs бродяга больше не должен загружаться. Я считаю, что вы можете просто отключить его в текущем сеансе, чтобы вы могли проверить это, но это не всегда работает с настраиваемыми переменными, хотя это должно работать с чем-то вроде трамп, который является частью стандартного дистрибутива emacs.

У меня больше не установлен emacs 22, но что-то подобное должно работать и для него.

person Peter Hart    schedule 10.11.2009

У меня была аналогичная проблема с трампом, когда однажды я обнаружил в своей системе «/C:\...\debuglog.txt». Из-за этого файла автозаполнение вызывало бродягу каждый раз, когда я вводил «/». И бродяга, конечно же, выдавал ошибку. автозаполнение звонило

(expand-file-name ...)

который из-за текущего обработчика имен файлов вызывал бродягу. Мое решение было:

(delete-if
 (lambda (x)
   (or (eq (cdr x) 'tramp-completion-file-name-handler)
       (eq (cdr x) 'tramp-file-name-handler)))
 file-name-handler-alist)
person abo-abo    schedule 23.04.2012
comment
Это решило мою проблему (после использования трамп я больше не мог щелкнуть гиперссылку в gnus). Я еще не пробовал бродягу снова после применения этого исправления. Помните, что вы должны сначала, например, (require 'cl). - person Simon Wright; 22.09.2012

Инструментируйте файл поиска для отладки и/или инструментируйте свой файл инициализации для отладки. Затем вы можете пройти через загрузку и посмотреть, куда загружается бродячий материал.

person Friedrich    schedule 10.11.2009
comment
Это похоже на то, что я хочу сделать, но я не знаю, как это сделать. Можете ли вы дать мне некоторые подробности, пожалуйста? Я погуглил код инструмента emacs для отладки, и кажется, что вы предлагаете мне использовать edebug-defun - это правильно? Глядя на tram.el, не похоже, что у трампа есть единственная функция точки входа, которую я могу использовать. Некоторые подробности были бы действительно полезны, учитывая, что я новичок в emacs. - person Rohith; 10.11.2009
comment
Ну, я думаю, pajato0 сделал это неважным. Однако я написал или украл следующий код: (defun найти-символ-в-точке () Найти источник либо функции, либо переменной в точке. (интерактивно) (или (найти-функцию-в-точке) (найти- переменная-в-точке))) Я привязал это к F5, и теперь я просто перехожу к функции типа F5 и получаю, где она была определена, а затем просто использую эту функцию для отладки. - person Friedrich; 11.11.2009
comment
Будьте немного осторожны, рассматривая символ как либо функцию, или переменную, потому что данный символ фактически может быть и тем, и другим (что регулярно наблюдается с модами). Ваш find-symbol-at-point никогда не заметит определение переменной в этих случаях. - person phils; 04.10.2011