How to create new file from dired mode?

FileEmacsDired

File Problem Overview


I want to create a new file in dired mode. Is there "create new file" command in dired mode ? For example, When I type "c" in dired mode, it creates "untitled.txt". It's very simple , but I can't find it.

File Solutions


Solution 1 - File

Just press C-x C-f. This will prompt for a filename, using the current directory of the current buffer as the directory to put it in. For a dired buffer, its current directory is simply the directory you are looking at.

Solution 2 - File

If you want c in Dired mode to do what C-x C-f does, the answer is trivial:

(define-key dired-mode-map "c" 'find-file)

Or if you want it to have the name untitled.txt then:

(define-key dired-mode-map "c"
  (lambda () (interactive) (find-file "untitled.txt")))

Solution 3 - File

Thanks to all, I finally solved it myself. Here is my answer. Typing "c" in dired mode will prompt you creating new untitled file. Then press enter will create new untitled file. Yes it's very verbose code. Someone may fix it.

(eval-after-load 'dired
  '(progn
     (define-key dired-mode-map (kbd "c") 'my-dired-create-file)
     (defun create-new-file (file-list)
       (defun exsitp-untitled-x (file-list cnt)
         (while (and (car file-list) (not (string= (car file-list) (concat "untitled" (number-to-string cnt) ".txt"))))
           (setq file-list (cdr file-list)))
         (car file-list))
       
       (defun exsitp-untitled (file-list)
         (while (and (car file-list) (not (string= (car file-list) "untitled.txt")))
           (setq file-list (cdr file-list)))
         (car file-list))
       
       (if (not (exsitp-untitled file-list))
           "untitled.txt"
         (let ((cnt 2))
           (while (exsitp-untitled-x file-list cnt)
             (setq cnt (1+ cnt)))
           (concat "untitled" (number-to-string cnt) ".txt")
           )
         )
       )
     (defun my-dired-create-file (file)
       (interactive
        (list (read-file-name "Create file: " (concat (dired-current-directory) (create-new-file (directory-files (dired-current-directory))))))
        )
       (write-region "" nil (expand-file-name file) t) 
       (dired-add-file file)
       (revert-buffer)
       (dired-goto-file (expand-file-name file))
       )
     )
  )

Solution 4 - File

  1. press C-x C-f
  2. enter file name
  3. press C-j

after the above steps, emacs will create an empty buffer with the name you input. But emacs doesn't support to create empty file by default. You can refer to How do I create an empty file in emacs for more ideas

Solution 5 - File

The following contains two (2) options, one of which requires that touch be in the $PATH -- alternatively, the absolute path may be used. touch is usually available on unix flavor systems, e.g., OSX, etc. This function will automatically number the files / buffers successively -- e.g., untitled.txt; untitled1.txt; untitled2.txt, etc.

(define-key dired-mode-map (kbd "c") 'dired-new-file)

(defun dired-new-file ()
(interactive)
  (let* (
      (n 0)
      lawlist-filename
      (dired-buffer-name (buffer-name)))
    (catch 'done
      (while t
        (setq lawlist-filename (concat "untitled"
          (if (= n 0) "" (int-to-string n))
            ".txt"))
        (setq n (1+ n))
        (if (not (file-exists-p lawlist-filename))
          (throw 'done nil)) ))
    (message "[b]uffer + file (maybe) | [f]ile + buffer (maybe)")
    (let ((file-or-buffer (read-char-exclusive)))
      (cond
        ((eq file-or-buffer ?b)
          (switch-to-buffer (get-buffer-create lawlist-filename))
          (text-mode)
          (or (y-or-n-p (format "Save Buffer `%s'? "lawlist-filename))
            (error "Done."))
          (write-file lawlist-filename)
          (with-current-buffer dired-buffer-name
            (revert-buffer)))
        ((eq file-or-buffer ?f)
          (start-process "touch-file" nil "touch" lawlist-filename)
          (revert-buffer)
          (or (y-or-n-p (format "Open `%s'? "lawlist-filename))
            (error "Done."))
          (find-file lawlist-filename)
          (text-mode))
        (t (message "You have exited the function.")) )) ))

Solution 6 - File

If you want to enter the filename, then I think this is a duplicate of:

https://stackoverflow.com/questions/2592095/how-do-i-create-an-empty-file-in-emacs

If you don't want to enter the filename, you could still use some of those answers, and easily adapt others by hard-coding the name rather than prompting for it interactively.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKei MinagawaView Question on Stackoverflow
Solution 1 - FileRobin GreenView Answer on Stackoverflow
Solution 2 - FileDrewView Answer on Stackoverflow
Solution 3 - FileKei MinagawaView Answer on Stackoverflow
Solution 4 - Fileuser3113626View Answer on Stackoverflow
Solution 5 - FilelawlistView Answer on Stackoverflow
Solution 6 - FilephilsView Answer on Stackoverflow