file - que - ¿Cómo crear un nuevo archivo desde el modo directo?
que es un archivo csv (6)
Quiero crear un nuevo archivo en modo directo. ¿Existe el comando "crear nuevo archivo" en modo directo? Por ejemplo, cuando escribo "c" en modo directo, crea "untitled.txt". Es muy simple, pero no puedo encontrarlo.
- presione Cx Cf
- ingrese el nombre del archivo
- presione Cj
después de los pasos anteriores, emacs creará un búfer vacío con el nombre que ingresó. Pero emacs no admite la creación de un archivo vacío de forma predeterminada. Puede consultar Cómo crear un archivo vacío en emacs para obtener más ideas
El siguiente contiene dos (2) opciones, una de las cuales requiere que el touch
esté en $PATH
- alternativamente, se puede usar la ruta absoluta. touch
generalmente está disponible en sistemas de sabor Unix, por ejemplo, OSX, etc. Esta función numerará automáticamente los archivos / búferes sucesivamente, por ejemplo, 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.")) )) ))
Gracias a todos, finalmente lo resolví yo mismo . Here está mi respuesta. Escribir "c" en modo directo le pedirá que cree un nuevo archivo sin título. Luego presione enter para crear un nuevo archivo sin título. Sí, es un código muy detallado. Alguien puede arreglarlo.
(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))
)
)
)
Si quiere que c
en el modo Dired haga lo que Cx Cf
hace, la respuesta es trivial :
(define-key dired-mode-map "c" ''find-file)
O si desea que tenga el nombre untitled.txt
entonces:
(define-key dired-mode-map "c"
(lambda () (interactive) (find-file "untitled.txt")))
Si quieres ingresar el nombre del archivo, entonces creo que es un duplicado de:
¿Cómo creo un archivo vacío en emacs?
Si no desea ingresar el nombre del archivo, aún puede usar algunas de esas respuestas y adaptar fácilmente otras codificando el nombre en lugar de solicitarlo interactivamente.
Simplemente presione Cx Cf. Esto solicitará un nombre de archivo, utilizando el directorio actual del búfer en uso como directorio para colocarlo. Para un búfer directo, su directorio actual es simplemente el directorio que está mirando.