Diredモードで新しいファイルを作成したい。 diredモードで「create new file」コマンドはありますか?たとえば、diredモードで「c」と入力すると、「untitled.txt」が作成されます。それは非常に簡単ですが、見つけることができません。
C-x C-fを押すだけです。これは、現在のバッファの現在のディレクトリをそれを入れるディレクトリとして使用して、ファイル名の入力を促します。
Diredモードでc
にC-x C-f
の機能を実行させたい場合、答えはtrivial:
(define-key dired-mode-map "c" 'find-file)
または、untitled.txt
という名前にする場合:
(define-key dired-mode-map "c"
(lambda () (interactive) (find-file "untitled.txt")))
すべてのおかげで、最終的に自分で解決しました。 ここ は私の答えです。 diredモードで「c」と入力すると、新しい無題のファイルを作成するよう求められます。次に、Enterキーを押すと、新しい無題のファイルが作成されます。はい、非常に冗長なコードです。誰かがそれを修正するかもしれません。
(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))
)
)
)
上記のステップの後、emacsは入力した名前で空のバッファーを作成します。しかし、emacsはデフォルトで空のファイルを作成することをサポートしていません。 emacsで空のファイルを作成する方法 を参照してください。
次の2つのオプションが含まれています。1つはtouch
が$PATH
-あるいは、絶対パスを使用できます。 touch
は通常、OSXなどのUnixフレーバーシステムで使用できます。この関数は、ファイル/バッファに連続して自動的に番号を付けます(例:untitled.txt)。 untitled1.txt; untitled2.txtなど.
(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.")) )) ))
ファイル名を入力したい場合、これは次のものの複製だと思います:
ファイル名を入力したくない場合でも、これらの回答の一部を使用し、対話形式で入力するのではなく、名前をハードコーディングすることで簡単に他の回答を調整できます。