;;; find-file-dwim.el --- find files DWIM style -*- lexical-binding: t -*- ;; ;; Author: Emanuel Berg ;; Created: 2024-07-22 ;; Keywords: search ;; License: GPL3+ ;; URL: https://dataswamp.org/~incal/emacs-init/find-file-dwim.el ;; Version: 0.7.6 ;; ;;; Commentary: ;; ;; Discontinued in this form. The below idea has been explored ;; further in this file where it is much better done: ;; ;; https://dataswamp.org/~incal/emacs-init/minibuffer-complete-files.el ;; ;;; Code: (require 'cl-lib) ;;;###autoload (defun find-file-dwim (&optional f) (interactive (list (completing-read-default "File: " (ffd--collection-init) nil nil default-directory) )) (when (file-exists-p f) (find-file f))) ;; (call-interactively #'find-file-dwim) (defun ffd--collection-init () (cl-loop with c for d in (ffd--get-dirs) do (setq c (cl-union c (ffd--sort-mod-time-sec d))) finally return (ffd--remove-data (cl-sort c #'> :key #'car)))) ;; (car (ffd--collection-init)) ;; (length (ffd--collection-init)) (defun ffd--get-dirs (&optional fs) (unless fs (setq fs (directory-files default-directory t))) (cl-remove-if-not #'file-directory-p fs)) ;; (ffd--get-dirs) (defun ffd--remove-data (ds) (mapcar #'cadr ds)) ;; (ffd--remove-data (list (ffd--mod-time-sec user-init-file))) (defun ffd--mod-time-sec (f) (let* ((attribs (file-attribute-modification-time (file-attributes f))) (s (time-convert attribs 'integer))) (list s f) )) ;; (ffd--mod-time-sec user-init-file) (defun ffd--sort-mod-time-sec (&optional dir) (unless dir (setq dir default-directory)) (let* ((fs (directory-files dir t nil t)) (all (mapcar #'ffd--mod-time-sec fs)) ) (cl-sort all #'> :key #'car))) ;; (car (ffd--sort-mod-time-sec)) ;; (car (last (ffd--sort-mod-time-sec))) (provide 'find-file-dwim) ;;; find-file-dwim.el ends here