Я использую Emacs в Windows XP, и всякий раз, когда я набираю «~/», он автоматически заменяет его каталогом, в моем случае это «C:/Documents and Settings//Application Data». Есть ли способ, которым я могу указать это на другой каталог, например, каталог моих проектов на рабочем столе? Каждый раз, когда мне нужно создать новый файл, я должен указать Cx Cf + полный путь, и хотя завершение табуляции делает его более быстрым, чем обычно, было бы неплохо связать этот каталог с чем-то вроде "~/"для легкого доступа. Есть ли способ сделать это?
3 ответа
Все, что вам нужно сделать, это установить переменную среды %HOME%
.
Это можно сделать, перейдя в:
Пуск-> Настройки-> Панель управления-> Система
Нажмите на вкладку «Дополнительно». Внизу есть кнопка: « Переменные среды ».
Создайте новую переменную с именем HOME
и поместите туда нужный путь.
Так как большинство программ для Windows не заботятся об этой переменной, вряд ли это повлияет на вас.
Это также можно сделать, отредактировав записи реестра для emacs. Вот некоторая информация о переменных реестра: Ms Windows Registry.
Кажется, ~
обрабатывается при expand-file-name
, и в нем не упоминается какой-либо способ изменить способ его расширения. Но он использует переменную среды HOME
. Вы можете указать новое значение для HOME
, но это может сбить с толку другие вещи, которые используют HOME
как место для хранения файлов (customize
и т.д., Которые могут потребоваться для чтения или записи в файлы в HOME
).
В качестве эксперимента я написал несколько советов для find-file
который временно изменяет значение HOME
. Идея состоит в том, чтобы минимизировать время, в течение которого альтернативное значение активно.
(defvar fake-HOME-value "/var/tmp"
"An alternate value to use for the HOME environment variable
while the 'fake-HOME' around advice is active.")
(defadvice find-file (around fake-HOME)
"Temporarily replace the HOME environment variable with
the value from 'fake-HOME-value'."
(let ((original-HOME-value (getenv "HOME")))
(unwind-protect
(progn
(setenv "HOME" fake-HOME-value)
ad-do-it)
(setenv "HOME" original-HOME-value))))
(defun disable-fake-HOME ()
"Disable the fake-HOME advice for find-file."
(interactive)
(progn
(ad-disable-advice 'find-file 'around 'fake-HOME)
(ad-update 'find-file)))
(defun enable-fake-HOME ()
"Enable the fake-HOME advice for find-file."
(interactive)
(progn
(ad-enable-advice 'find-file 'around 'fake-HOME)
(if (ad-is-active 'find-file)
(ad-update 'find-file)
(ad-activate 'find-file))))
(enable-fake-HOME)
;(disable-fake-HOME)
Поместите его в свой .emacs
(или в файл .el
, и (load-file "/path/to/your.el")
). Я не могу проверить это на Windows, но единственное, что зависит от платформы, это использование HOME
, но я думаю, что Emacs конвертирует эквивалент Windows (комбинацию нескольких переменных среды?) в HOME
.
~
является очень старым и хорошо зарекомендовавшим себя синонимом «домашний каталог пользователя», и эта логика, вероятно, скрыта глубоко в emacs и вряд ли изменится, если вы не захотите пересобрать ее из исходного кода после нахождения соответствующего кода и его изменения. С другой стороны, вы, вероятно, могли бы настроить ярлык на запуск emacs для запуска в выбранном вами каталоге, что позволит вам сохранять и загружать файлы без указания пути. Наверное.