diff --git a/core/core.el b/core/core.el index 6fc582e77..ce049b9de 100644 --- a/core/core.el +++ b/core/core.el @@ -262,6 +262,14 @@ original value of `symbol-file'." (doom|run-local-var-hooks))) (add-hook 'after-change-major-mode-hook #'doom|run-local-var-hooks-if-necessary) +(defun doom|create-non-existent-directories () + "Automatically create missing directories when creating new files." + (let ((parent-directory (file-name-directory buffer-file-name))) + (when (and (not (file-exists-p parent-directory)) + (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory))) + (make-directory parent-directory t)))) +(add-hook 'find-file-not-found-functions #'doom|create-non-existent-directories) + ;; ;;; Garbage collector optimizations diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index 9953b2a0b..990585a26 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -24,27 +24,10 @@ ;; when not using GNU ls. (if-let* ((gls (executable-find "gls"))) (setq insert-directory-program gls) - (setq args (delete "--group-directories-first" args)) - (message "Cannot find `gls` (GNU ls). Install coreutils via your system package manager"))) + ;; BSD ls doesn't support --group-directories-first + (setq args (delete "--group-directories-first" args)))) (setq dired-listing-switches (string-join args " "))) - (defun +dired|sort-directories-first () - "List directories first in dired buffers." - (save-excursion - (let (buffer-read-only) - (forward-line 2) ;; beyond dir. header - (sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))) - (set-buffer-modified-p nil)) - (add-hook 'dired-after-readin-hook #'+dired|sort-directories-first) - - ;; Automatically create missing directories when creating new files - (defun +dired|create-non-existent-directory () - (let ((parent-directory (file-name-directory buffer-file-name))) - (when (and (not (file-exists-p parent-directory)) - (y-or-n-p (format "Directory `%s' does not exist! Create it?" parent-directory))) - (make-directory parent-directory t)))) - (add-to-list 'find-file-not-found-functions '+dired|create-non-existent-directory nil #'eq) - ;; Kill buffer when quitting dired buffers (define-key dired-mode-map [remap quit-window] (λ! (quit-window t)))) @@ -103,7 +86,7 @@ ;; -;; Evil integration +;;; Evil integration (map! :when (featurep! :editor evil +everywhere) :after dired diff --git a/modules/emacs/dired/doctor.el b/modules/emacs/dired/doctor.el new file mode 100644 index 000000000..2c2e77b29 --- /dev/null +++ b/modules/emacs/dired/doctor.el @@ -0,0 +1,4 @@ +;;; emacs/dired/doctor.el -*- lexical-binding: t; -*- + +(when (and IS-BSD (not (executable-find "gls"))) + (warn! "Cannot find gls (GNU ls). This may cause issues with dired"))