How to set default working directory in Emacs - troubleshooting

百般思念 提交于 2019-11-30 12:42:11

问题


I know this has been posted many times, but the solutions are not working for me. I've tried the following solutions from this post (Changing the default folder in Emacs):

  • Solution 1: Add (cd "C:/Users/Name/Desktop") to the .emacs file
  • Solution 2: Add (setq default-directory "C:/Documents and Settings/USER NAME/Desktop/" ) to the .emacs file
  • Solution 3: Right click the emacs short cut, hit properties and change the start in field to the desired directory.

and only solution 3 is working. Unfortunately, I need to use either solution 1 or 2.

I believe that my .emacs file is correct, because my theme is being correctly loaded/unloaded when I add/remove (load-theme 'light-blue t) from the .emacs file.

Here is my MOST RECENT .emacs file:

(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)

My emacs.exe is saved under C:\emacs\emacs-24.3\bin (which is also my default directory, but I want to change it to C:/Users/Lucas/), and my .emacs is under my home - C:\Users\Lucas.

UPDATE

I RECENTLY found out that my command (setq-default default-directory "C:/Users/Lucas/"), which should set my default-directory, is not performing. Immediately after startup, this is my *Messages* buffer:

Default Dir: "C:\\emacs\\emacs-24.3\\bin/" [3 times]
For information about GNU Emacs and the GNU system, type C-h C-a.

It behaves as if I am overriding the .emacs file. I double/triple checked, and I cannot find another .emacs in my path. Also, I am not running Emacs from a shortcut. Any suggestions would be appreciated. Thanks for all of the support.


回答1:


From what you write, it sounds like you are running windows. Have you verified that emacs is actually finding and loading .emacs from the directory C:\Users\Lucas? If it is, that means Windows understands your home directory is C:\Users\Lucas. You can check that by looking at the environment variable HOME. In emacs, try:

(getenv "HOME")

In your .emacs file, you could then put:

(setq default-directory "~/")



回答2:


The problem for me was the Initial Start Up Screen of emacs.

It can be deactivated by:

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

It seems that the default welcome screen of emacs (with the tutorial links) forces you to start in your $HOME path.


After that you can either cd or setq default-directory like so:

(setq default-directory "~/")

or

(cd "~/")



回答3:


Here's what I did, and worked with no problems:

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

Saved and relaunched. I think in the windows env, you need to have double back-slashes.




回答4:


I just tested and it behaved fine with regards to Default-Directory. My settings are as follows:

emacs.exe in c:\bin\emacs\bin

%PATH% includes c:\bin\emacs\bin\

%HOME% set to %USERPROFILE (C:\Users\)

Direct from Run-box

Win+remacs -qRET

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

From cmd.exe after changing directory

Win+rcmdRET

cd c:\users\publicRET

emacs -qRET

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

Do you have emacs added to your %PATH% variable?

If I try to launch emacs by browsing to it's location then launching the default directory is set to the executable location.




回答5:


I've been suffering similar weirdness with Emacs 24.3.1 on Windows 10. The solution is even weirder : customize Emacs to inhibit the startup screen. This can be done through the startup customization buttons, so you end up with the following in your .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))

With the startup screen in place (eg. change t to nil above) the Windows shortcut "Start in" field (set to "E:\Users\Rob\") dominates and Ctrl-x Ctrl-f yields E:\Users\Rob/ (note the weird slash directions).

With the startup screen inhibited (t above) the .emacs

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

dominates and Ctrl-x Ctrl-f yields E:/Users/Rob/me/ (all forward slashes).




回答6:


Set your default-directory last in your init file, if you expect that setting to be useful after the init file is loaded.

If you also need it set earlier in the init file (e.g., so that some of your init-file code gets the right value) , then set it earlier too. When you do stuff in your init file, that stuff can change the variable value.

You can also use (setq-default default-directory "C:/Documents and Settings/USER NAME/Desktop/") (or whatever the directory name is), if you want that to be the default for every buffer.




回答7:


I think you just need to use the right backslash (and escape them). This worked in my .emacs:

(setq default-directory "C:\windows")



来源:https://stackoverflow.com/questions/21059833/how-to-set-default-working-directory-in-emacs-troubleshooting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!