Я использую term-mode
для запуска оболочек Bash в Emacs. На удаленных хостах функция отслеживания каталогов term-mode
помогает установить default-directory
, чтобы в нем было имя хоста, так что завершение вкладки и доступ к файлам выполняются удаленно через Tramp. Однако иногда я использую удаленные хосты, которые в основном используют те же файловые системы, что и моя рабочая станция, поскольку они загружают одни и те же каталоги из NFS. В этих случаях Tramp слишком меня тормозит. Я бы хотел, чтобы при использовании этих систем Emacs устанавливал default-directory
локально. Для этого я скопировал term-handle-ansi-terminal-messages
из системы term.el
в новый файл, загруженный моим .emacs
. Заменяю эту деталь:
((= command-code ?h)
(setq term-ansi-at-host argument))
с этим:
((= command-code ?h)
(setq term-ansi-at-host-real argument)
(setq term-ansi-at-host
;; if it has an equivalent filesystem group, set to system-name
(if (term-equivalent-filesystem-host-group-p argument)
(system-name)
argument)))
Это вызывает функцию term-equivalent-filesystem-host-group-p
, которая сообщает, следует ли рассматривать хост как имеющий эквивалентную файловую систему.
Этот метод дает желаемый эффект, но копирование и изменение системного кода Lisp не устойчиво к любым будущим изменениям в коде. Я не думаю, что советовать функцию можно было бы без дублирования половины ее функциональности (либо цикла сообщений, либо установки переменных default-directory
и ange-ftp-
).
Есть лучший способ сделать это?