Почему W32 Emacs вставляет "/Application Data/Application Data/" в путь к файлу, начинающийся с ~/, когда я использую Cx Cf?
Я только что установил Emacs Speaks Statistics, когда появилась эта ошибка. Удаление не исправило это.
Когда я использую Cx Cf, я могу нормально перемещаться, но когда я на самом деле нажимаю enter, кажется, что Emacs вставляет "/Application Data/Application Data/" после "~" во все пути, например, если я перехожу к:
c: / Documents and Settings / admin / Мои документы / sig.html
И нажмите Enter, я открываю:
~ / Данные приложения / Данные приложения / Мои документы / sig.html
Любая идея, какие переменные я могу редактировать, чтобы исправить это?
4 ответа
Проверьте вашу переменную HOME. Может быть, это указывает на c:/Documents and Settings/admin/Application Data
Функция, которая расширяет имена файлов: expand-file-name
Emacs изменил расположение дома по умолчанию в последних выпусках - новое значение по умолчанию - это то, что вы видите. Явно установить env var HOME
все, что вы хотите, и все будет хорошо.
Вы можете изменить это поведение, используя M-x setenv
, Например:
M-x setenv <RET> HOME <RET> c:/Documents and Settings/admin
Если это работает, вы можете добавить
(setenv "HOME" "c:/Documents and Settings/admin")
в ваш файл инициализации для более постоянного решения.
Похоже, что это ошибка между текущими и кэшированными значениями, связанными с $HOME. Проблема в том, что шаблон, используемый для сопоставления с домашним каталогом, больше не совпадает.
В некоторый момент (setq filename (abbreviate-file-name (имя-файла-имени-файла-расширения))) портит имя.
Вот обходной путь, который я создал и добавил в.emacs, _emacs, .emacs.el или Application Data.emacs.d\init.el, чтобы вернуть abbreviated-home-dir в форму:
Не забывайте: не байт-компилируйте ваш файл инициализации, иначе вы не синхронизированы.
;;; files.el mistakenly initializes abbreviated-home-dir just once
;;; not realizing that its value should change when HOME is redefined.
;;; Thus abbreviated-home-dir is "^c:/Documents and settings/USER/Application Data\\(/\\|\\'\\)"
;;; when it should, now, be "^c:/Documents and settings/USER\\(/\\|\\'\\)"
;;; Then when you try to open "^c:/Documents and settings/USER/Application Data/"
;;; The name is abbreviated to "~", but expanded back to "c:/Documents and settings/USER/"
;;; losing part of the name ("Application Data/")
;;;
;;; Rather than explicitly re-initialize abbreviated-home-dir, it should be set to nil
;;; (setq abbreviated-home-dir "$foo") ;; Impossible pattern match.
;;; This causes the filepath to never match, and ~ is never abbreviated.
;;;
;;; We _could_ explicitly initialize it:
;;; (setq abbreviated-home-dir "^c:/Documents and settings/badgerb\\(/\\|\\'\\)")
;;; But this is a bad idea. It is _highly_ dependent on the workings of files.el, and it
;;; seems better to me to just clear the value and let files.el re-initialize it.
(setq abbreviated-home-dir nil)