How to set default working directory in Emacs – troubleshooting


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."
   (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)
   (list (if buffer-file-name
       (xp-read-file-name "Write file: " nil nil nil nil)
     (xp-read-file-name "Write file: " "C:/Users/Lucas/"
          (file-name-nondirectory (buffer-name))
         nil nil))
   (not current-prefix-arg)))
  (or (null filename) (string-equal filename "")
  (if (file-directory-p filename)
      (setq filename (concat (file-name-as-directory filename)
            (or buffer-file-name (buffer-name))))))
  (and confirm
       (file-exists-p filename)
       (not (and (eq (framep-on-display) 'ns)
           (listp last-nonmenu-event)
       (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))
(defun comment-or-uncomment-region-or-line ()
    "Comments or uncomments the region or the current line if there's no active region."
    (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)
(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.


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.

Best Solution

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 "~/")


(cd "~/")
Related Question