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.
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.
File does not exist, create buffer?
I select y
. I get a new BUFFER with the filename I entered. However, if I leave the buffer empty, then when I do C-x C-w, it prompts me AGAIN to enter a filename and I'm back where I started. In other words, this method forces me to enter the filename twice. Assuming I just want to create the file but not enter any text, is there a way around this? –
Daphinedaphna touch filename
. This only works on non-Windows systems and only if you don't already have a shell open inside Emacs. –
Nita 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")))
(with-eval-after-load 'dired ...)
–
Kreisler - press C-x C-f
- enter file name
- 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
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))
)
)
)
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.")) )) ))
If you want to enter the filename, then I think this is a duplicate of:
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.
© 2022 - 2024 — McMap. All rights reserved.
untitled.txt
already exists? Just trust me that this problem is solved andC-x C-f
is the simplest way – Froemmingtouch
analog in "dired", admit it – Kissnertouch
analog indired
? – Fender