Как установить рабочий каталог по умолчанию в Emacs - устранение неполадок
Я знаю, что это было опубликовано много раз, но решения для меня не работают. Я пробовал следующие решения из этого сообщения (Изменение папки по умолчанию в Emacs):
- Решение 1: Добавить
(cd "C:/Users/Name/Desktop")
в файл .emacs
- Решение 2: Добавить
(setq default-directory "C:/Documents and Settings/USER NAME/Desktop/" )
в файл .emacs
- Решение 3: щелкните правой кнопкой мыши по кратковременному удалению emacs, ударите свойства и измените начало в поле на нужный каталог.
и работает только решение 3. К сожалению, мне нужно использовать либо решение 1, либо 2.
Я считаю, что мой файл .emacs
верен, потому что моя тема правильно загружается/выгружается, когда я добавляю/удаляю (load-theme 'light-blue t)
из файла .emacs
.
Вот мой файл MOST RECENT .emacs
:
(message "Default Dir: %S" default-directory)
(setq-default default-directory "C:/Users/Lucas/")
(message "Default Dir: %S" default-directory)
(setq-default indent-tabs-mode nil)
(add-hook 'ruby-mode-hook
(lambda ()
(define-key ruby-mode-map "\C-c#" 'comment-or-uncomment-region)
)
)
(defadvice comment-or-uncomment-region (before slick-comment activate compile)
"When called interactively with no active region, comment a single line instead."
(interactive
(if mark-active (list (region-beginning) (region-end))
(list (line-beginning-position)
(line-beginning-position 2)))))
(load-theme 'light-blue t)
;setq default-directory "~/")
(setq-default default-directory "C:/Users/Lucas/")
(defun xp-read-file-name (prompt &optional dir default-filename mustmatch initial predicate)
(setq last-nonmenu-event nil)
(funcall (or read-file-name-function #'read-file-name-default)
prompt dir default-filename mustmatch initial predicate))
(defun xp-save-as (filename &optional confirm)
(interactive
(list (if buffer-file-name
(xp-read-file-name "Write file: " nil nil nil nil)
(xp-read-file-name "Write file: " "C:/Users/Lucas/"
(expand-file-name
(file-name-nondirectory (buffer-name))
"C:/Users/Lucas/")
nil nil))
(not current-prefix-arg)))
(or (null filename) (string-equal filename "")
(progn
(if (file-directory-p filename)
(setq filename (concat (file-name-as-directory filename)
(file-name-nondirectory
(or buffer-file-name (buffer-name))))))
(and confirm
(file-exists-p filename)
(not (and (eq (framep-on-display) 'ns)
(listp last-nonmenu-event)
use-dialog-box))
(or (y-or-n-p (format "File `%s' exists; overwrite? " filename))
(error "Canceled")))
(set-visited-file-name filename (not confirm))))
(set-buffer-modified-p t)
(and buffer-file-name
(file-writable-p buffer-file-name)
(setq buffer-read-only nil))
(save-buffer)
(vc-find-file-hook))
(defun comment-or-uncomment-region-or-line ()
"Comments or uncomments the region or the current line if there no active region."
(interactive)
(let (beg end)
(if (region-active-p)
(setq beg (region-beginning) end (region-end))
(setq beg (line-beginning-position) end (line-end-position)))
(comment-or-uncomment-region beg end)
(next-line)))
(global-set-key (kbd "C-x C-;") 'comment-region)
(setq lazy-highlight-cleanup nil)
(message "Default Dir: %S" default-directory)
My emacs.exe
сохраняется в C:\emacs\emacs-24.3\bin
(который также является моим каталогом по умолчанию, но я хочу изменить его на C:/Users/Lucas/
), а мой .emacs
находится под моим домом - C:\Users\Lucas
.
UPDATE
НЕДАВНО узнал, что моя команда (setq-default default-directory "C:/Users/Lucas/")
, которая должна установить мой default-directory
, не выполняет. Сразу после запуска это мой буфер *Messages*
:
Default Dir: "C:\\emacs\\emacs-24.3\\bin/" [3 times]
For information about GNU Emacs and the GNU system, type C-h C-a.
Он ведет себя так, как будто я переопределяю файл .emacs
. Я проверял double/triple, и я не могу найти другой .emacs
на моем пути. Кроме того, я не запускаю Emacs из ярлыка. Мы ценим любые предложения. Спасибо за поддержку.
Ответы
Ответ 1
Из того, что вы пишете, похоже, что вы работаете с окнами.
Вы подтвердили, что emacs на самом деле находит и загружает .emacs из каталога C:\Users\Lucas? Если это так, значит, Windows понимает, что ваш домашний каталог - C:\Users\Lucas. Вы можете проверить это, посмотрев переменную среды HOME. В emacs попробуйте:
(getenv "HOME")
В вашем файле .emacs вы можете поставить:
(setq default-directory "~/")
Ответ 2
С моей настройкой в OSX, каталог по умолчанию для буфера для посещений без файла совпадает с моим user-emacs-directory
.
Я использовал различные функции для использования разных каталогов - например, при открытии файла или сохранении файла. Вот несколько примеров того, как изменить местоположение сохранения при использовании Emacs в Windows и еще один пример для OSX. Переменная default-directory
используется для xp-save-as
, но вы можете установить ее на все, что хотите - даже поместите ее в кавычки "C:/Documents and Settings/USER NAME/Desktop/"
.
Пример Windows:
(defun xp-read-file-name (prompt &optional dir default-filename mustmatch initial predicate)
(setq last-nonmenu-event nil)
(funcall (or read-file-name-function #'read-file-name-default)
prompt dir default-filename mustmatch initial predicate))
(defun xp-save-as (filename &optional confirm)
(interactive
(list (if buffer-file-name
(xp-read-file-name "Write file: " nil nil nil nil)
(xp-read-file-name "Write file: " default-directory
(expand-file-name
(file-name-nondirectory (buffer-name))
default-directory)
nil nil))
(not current-prefix-arg)))
(or (null filename) (string-equal filename "")
(progn
(if (file-directory-p filename)
(setq filename (concat (file-name-as-directory filename)
(file-name-nondirectory
(or buffer-file-name (buffer-name))))))
(and confirm
(file-exists-p filename)
(not (and (eq (framep-on-display) 'ns)
(listp last-nonmenu-event)
use-dialog-box))
(or (y-or-n-p (format "File `%s' exists; overwrite? " filename))
(error "Canceled")))
(set-visited-file-name filename (not confirm))))
(set-buffer-modified-p t)
(and buffer-file-name
(file-writable-p buffer-file-name)
(setq buffer-read-only nil))
(save-buffer)
(vc-find-file-hook))
Пример OSX:
(defun ns-lawlist-save-as ()
(interactive)
(let ((filename (ns-read-file-name "Write file: " (if buffer-file-name (file-name-directory buffer-file-name)) nil (if buffer-file-name (file-name-nondirectory buffer-file-name) "Untitled"))))
(and filename (write-file (expand-file-name filename)))))
Ответ 3
Установите свой default-directory
последний в файл инициализации, если вы ожидаете, что этот параметр будет полезен после загрузки файла инициализации.
Если вам также понадобится установить его ранее в файле инициализации (например, так, чтобы часть кода вашего файла инициализации получила правильное значение), установите его и раньше. Когда вы делаете материал в файле инициализации, этот материал может изменить значение переменной.
Вы также можете использовать (setq-default default-directory "C:/Documents and Settings/USER NAME/Desktop/")
(или любое другое имя каталога), если вы хотите, чтобы это было по умолчанию для каждого буфера.
Ответ 4
Вот что я сделал и работал без проблем:
setq default-directory "C:\\Path\\To\\Directory\\"
Сохранено и перезаписано. Я думаю, что в окнах env вам нужно иметь двойные обратные черточки.
Ответ 5
Я только что протестировал, и он отлично поступил в отношении Default-Directory. Мои настройки следующие:
emacs.exe в c:\bin\emacs\bin
%PATH%
включает c:\bin\emacs\bin\
%HOME%
установлен на %USERPROFILE
(C:\Users \)
Непосредственно из Run-box
Win+r emacs -q
RET
(message "%s" default-directory)
= > "C:\Users\jonpe/"
Из cmd.exe после смены каталога
Win+r cmd
RET
cd c:\users\public
RET
emacs -q
RET
(message "%s" default-directory)
= > "C:\Users\Public/"
У вас есть emacs, добавленные в вашу переменную %PATH%
?
Если я попытаюсь запустить emacs, просмотрев его местоположение, тогда запуск каталога по умолчанию будет установлен в исполняемое местоположение.
Ответ 6
Я страдал от подобной странности с Emacs 24.3.1 в Windows 10.
Решение еще более странное: настройте Emacs для запрета запуска экрана. Это можно сделать с помощью кнопок настройки запуска, поэтому в вашем .emacs вы получите следующее:
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(inhibit-startup-screen t))
При запуске экрана (например, изменить t на nil выше) доминирует ярлык Windows "Start in" (установленный в "E:\Users\Rob" ), а Ctrl-x Ctrl-f дает E:\Users\Rob/(обратите внимание на странные направления слэш).
Когда экран запуска заблокирован (t выше),.emacs
(setq default-directory "E:/Users/Rob/me/")
доминирует, а Ctrl-x Ctrl-f дает E:/Users/Rob/me/(все косые черты).
Ответ 7
Проблема для меня была Начальный экран запуска emacs.
Его можно отключить:
;; no startup msg
(setq inhibit-startup-message t)
Кажется, что экран приветствия по умолчанию emacs (с помощью ссылок на учебники) заставляет вас начать в вашем пути $HOME
.
После этого вы можете либо cd
, либо setq default-directory
следующим образом:
(setq default-directory "~/")
или
(cd "~/")
Ответ 8
Я думаю, вам просто нужно использовать обратную косую черту (и избежать их). Это работало в моем .emacs:
(setq default-directory "C:\windows" )