2014-01-11 2 views
11

Я знаю, что это было опубликовано много раз, но решения для меня не работают. Я попытался следующие решения с этого поста (Changing the default folder in Emacs):Как установить рабочий каталог по умолчанию в Emacs - устранение неполадок

  • Решение 1: Добавить (cd "C:/Users/Name/Desktop") в файл .emacs
  • Решение 2: Добавить (setq default-directory "C:/Documents and Settings/USER NAME/Desktop/") в файл .emacs
  • Решение 3: Щелкните правой кнопкой мыши emacs short cut, hit properties и изменить начало в поле на нужный каталог.

и только решение 3 работает. К сожалению, мне нужно использовать либо раствор 1 или 2.

Я считаю, что мой .emacs файл является правильным, потому что моя тема быть правильно загружена/порожнее, когда я добавить/удалить (load-theme 'light-blue t) из файла .emacs.

Вот мой последний .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's 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) 

Мои 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. Я проверял дважды/тройку, и я не могу найти еще один .emacs на моем пути. Кроме того, я не запускаю Emacs из ярлыка. Мы ценим любые предложения. Спасибо за поддержку.

+0

[ "Emacs запускается на вашем рабочем столе, что путь, если у вас есть открытый файл. Обычно он запускается в том же каталоге, что и файл в вашем текущем буфере. "] (Http://stackoverflow.com/a/65411/1309352) –

+0

В чем проблема, которую вы пытаетесь сделать так LVE? (т. е. почему значение 'default-directory' является проблемой?) – phils

+0

Я пытаюсь установить рабочий каталог по умолчанию на' C:/Users/Lucas/'. Моя текущая настройка, похоже, игнорирует строку '(setq default-directory" C:/Users/Lucas/")' из моего файла '.emacs'. – modulitos

ответ

1

С моей настройкой на 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))))) 
+0

Я скопировал и вставил эти функции в конец моего файла инициализации и заменил два экземпляра 'default-directory' в' xp-save-as' на 'C:/Users/Lucas /', но я не получаю другой каталог по умолчанию при открытии или сохранении файлов - это все еще 'C: \ emacs \ emacs-24.3 \ bin /' (где мой Emacs .exe сохраняется). Какие-либо предложения? – modulitos

+0

Это новая функция - попробуйте 'Mx xp-save-as' при сохранении буфера посещения без файлов - например, сначала оцените' (get-buffer-create "foo") 'для работы с файлом no-file буфер посещения. Буфер для посещения файла по умолчанию будет находиться в каталоге, в котором файл уже существует. – lawlist

+0

Интересно - ваши инструкции имеют смысл, но я не знаю, как он решает мой OP. Я оценил '(get-buffer-create" foo ")', открыл новый буфер «foo», затем запустил «M-x xp-save-as'; это открывает графический интерфейс Emacs «Запись файла:» из моего каталога HOME. В других файлах «M-x xp-save-as» открывает графический интерфейс, из которого был сохранен файл. Таким образом, это помогает мне сохранять файлы (используя графический интерфейс), но я по-прежнему не могу открыть файл из HOME по умолчанию. Кроме того, 'M-x xp-read-file-name' не распознается, но я копировал/вставлял его как-есть. Не было 'default-directory', но я должен изменить его другим способом? – modulitos

0

Я думаю, вам просто нужно использовать правильный обратный слэш (и избежать их). Это сработало в моем.Emacs:

(SETQ по умолчанию-каталог "C: \ Windows")

+0

Я пробовал это, но результаты ничем не отличаются. Конечно, если я не убегу, я получаю сообщение об ошибке загрузки файла инициализации. – modulitos

7

Из того, что вы пишете, это звучит, как вы работаете окна. Вы подтвердили, что emacs на самом деле находит и загружает .emacs из каталога C: \ Users \ Lucas? Если это так, значит, Windows понимает, что ваш домашний каталог - C: \ Users \ Lucas. Вы можете проверить это, посмотрев переменную среды HOME. В Emacs, попробуйте:

(getenv "HOME") 

В файле .emacs, можно затем поставить:

(setq default-directory "~/") 
+0

Это звучит неплохо, но как я могу запустить '(getenv" HOME ")'? Должен ли я помещать '(getenv" HOME ")' в мой файл init ('.emacs'), или есть способ запустить это прямо из моего редактора как Lisp-код? (Извините, я немного новичок в Emacs). В конечном итоге я планирую использовать каталог '~ /', чтобы мой файл init работал на разных платформах. – modulitos

+0

Кроме того, я считаю, что моя системная переменная HOME правильно установлена. Когда я запускаю 'C-x C-f ~/.emacs', я переносится в файл' .emacs' под 'c:/Users/Lucas/.emacs'. – modulitos

+2

В emacs перейдите к буферу нуля. Он находится в режиме взаимодействия с lisp. Смысл, вы можете ввести emacs-lisp и оценить его. Поэтому просто введите (getenv «HOME») и нажмите C-j (удерживайте клавишу управления и нажмите «j»). Emacs оценит, что вы ввели, и верните результат. –

1

Установите ваш default-directoryпоследний в вашем файле инициализации, если вы ожидаете, что установка будет полезно после загрузки файла инициализации.

Если вам также необходимо установить его ранее в файле инициализации (например, так, чтобы часть кода инициализационного файла получила правильное значение), установите его и раньше. Когда вы делаете материал в файле инициализации, этот материал может изменить значение переменной.

Вы также можете использовать (setq-default default-directory "C:/Documents and Settings/USER NAME/Desktop/") (или любое другое имя каталога), если вы хотите, чтобы это значение по умолчанию для каждого буфера.

+0

Я попытался добавить '(setq-default default-directory" C:/Users/Lucas/")' в мой файл инициализации и попытался установка моего 'default-directory' в начале и конце файла init (' .emacs'), но результаты те же. Есть ли что-нибудь еще, что я могу попробовать? – modulitos

+0

Проверьте, что было после файла инициализации и т. Д. Загружены. Если это не то, что вы установили в своем файле инициализации (в конце), вам нужно будет просмотреть файл init. Когда я говорю в конце, я имею в виду конец - после того, как ваш файл инициализации может загружать другие библиотеки и т. Д. Если это правильно сразу после загрузки файла инициализации, то что-то, что вы делаете после этого, меняет его. – Drew

+0

Есть ли у вас какие-либо предложения о том, как я могу проверить свой 'default-directory' в конце моего файла инициализации?Должен ли я проверить это, как-то распечатать 'default-directory'? Или я должен напечатать свой «каталог по умолчанию» из буфера с нуля? Я немного новичок в Emacs, поэтому я хочу убедиться, что я начинаю с правильного подхода :) – modulitos

1

Вот что я сделал, и работал без проблем:

setq default-directory "C:\\Path\\To\\Directory\\" 

Сохраненный и возобновлен. Я думаю, что в окнах env вам нужно иметь двойные обратные черточки.

+5

Лицо, разместившее вопрос, уже заявило, что это решение для них не работает. Пожалуйста, внимательно прочитайте вопрос, прежде чем отвечать. –

+0

Однако этот плакат использует setq, а не setq-default – fiacobelli

1

Я только что протестировал, и он отлично поступил в отношении Default-Directory. Мои настройки следующим образом:

emacs.exe в c:\bin\emacs\bin

%PATH% включает c:\bin\emacs\bin\

%HOME% набор для %USERPROFILE (C: \ Users \)

Напрямую от Run коробки

Win + remacs -qRET

(message "%s" default-directory) => "C: \ Users \ jonpe /"

Из ЦМД.ехе после изменения каталога

Win + RcmdRET

cd c:\users\publicRET

emacs -qRET

(message "%s" default-directory) => «C: \ Users \ Public/"

У вас есть emacs, добавленные в вашу переменную %PATH%?

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

1

Я страдаю от подобной странности с помощью 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)) 

С экрана запуска вместо ярлыка для Windows «Пуск в «поле (установленное в« E: \ Users \ Rob \ ») доминирует, а Ctrl-x Ctrl-f дает E: \ Users \ Rob/(обратите внимание на странные направления слэш).

С экрана запуска тормозится (т выше) .emacs

(setq default-directory "E:/Users/Rob/me/") 

доминирует и Ctrl-х Ctrl-F дает E:/Users/Rob/меня/(все косые черты).

1

Проблема для меня была Начальный экран запуска emacs.

Это может быть деактивирован:

;; no startup msg 
(setq inhibit-startup-message t) 

Кажется, что по умолчанию в окне приветствия в Emacs (с учебником ссылок) заставляет вас начать в вашем $HOME пути.


После этого вы можете либо cd или setq default-directory так:

(setq default-directory "~/") 

или

(cd "~/") 
+0

Да, вы правы. Я пробовал все другие вещи, упомянутые выше, и никто не работал. Если я начал emacs из приглашения на поиск, по умолчанию был System32. Если я начал с ярлыка на рабочем столе (на runemacs.com), он открыл папку bin, в которой установлен emacs. После отключения начального экрана запуска работал каталог по умолчанию. Я использую (setq default-directory "C: \\ Path \\ To \\ My Folder") –

Смежные вопросы