web-dev-qa-db-fra.com

Comment créer un nouveau fichier à partir du mode Dired?

Je veux créer un nouveau fichier en mode Dired. Existe-t-il une commande "créer un nouveau fichier" en mode Dired? Par exemple, lorsque je tape "c" en mode dired, cela crée "untitled.txt". C'est très simple, mais je ne le trouve pas.

50
Kei Minagawa

Appuyez simplement sur C-x C-f. Cela demandera un nom de fichier, en utilisant le répertoire courant du tampon courant comme répertoire pour le mettre dedans. Pour un tampon dired, son répertoire courant est simplement le répertoire que vous regardez.

51
Robin Green

Si vous voulez que c en mode fatigué fasse ce que C-x C-f le fait, la réponse est triviale :

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

Ou si vous voulez qu'il ait le nom untitled.txt puis:

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

Merci à tous, Je l'ai finalement résolu moi-même . Ici est ma réponse. Taper "c" en mode dired vous invite à créer un nouveau fichier sans titre. Appuyez ensuite sur Entrée pour créer un nouveau fichier sans titre. Oui, c'est du code très détaillé. Quelqu'un peut le réparer.

(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))
       )
     )
  )
8
Kei Minagawa
  1. appuyez sur C-x C-f
  2. entrez le nom du fichier
  3. appuyez sur C-j

après les étapes ci-dessus, emacs créera un tampon vide avec le nom que vous avez entré. Mais emacs ne prend pas en charge la création de fichier vide par défaut. Vous pouvez vous référer à Comment créer un fichier vide dans emacs pour plus d'idées

6
user3113626

Ce qui suit contient deux (2) options, dont l'une requiert que touch soit dans le $PATH - alternativement, le chemin absolu peut être utilisé. touch est généralement disponible sur les systèmes de saveurs Unix, par exemple OSX, etc. Cette fonction numérotera automatiquement les fichiers/tampons successivement - par exemple, 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.")) )) ))
5
lawlist

Si vous voulez entrer le nom du fichier, je pense que c'est un doublon de:

Comment créer un fichier vide dans emacs?

Si vous ne souhaitez pas entrer le nom de fichier, vous pouvez toujours utiliser certaines de ces réponses et en adapter facilement d'autres en codant en dur le nom plutôt que de le demander de manière interactive.

3
phils