From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: Re: find-file-dwim.el Date: Mon, 22 Jul 2024 07:32:15 +0200 Message-ID: <87ikwyrnz4.fsf@dataswamp.org> References: <87o76qs8el.fsf@dataswamp.org> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34225"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:phzNoN/mWKR8y7yxIcfV3j5LNdY= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Jul 22 13:07:09 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sVqsm-0008gc-Bz for ged-emacs-devel@m.gmane-mx.org; Mon, 22 Jul 2024 13:07:08 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sVqsQ-0005P7-KJ; Mon, 22 Jul 2024 07:06:46 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sVles-0002ID-JR for emacs-devel@gnu.org; Mon, 22 Jul 2024 01:32:26 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sVleq-0007Fo-Kd for emacs-devel@gnu.org; Mon, 22 Jul 2024 01:32:26 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1sVleo-0000mL-E1 for emacs-devel@gnu.org; Mon, 22 Jul 2024 07:32:22 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Mon, 22 Jul 2024 07:06:45 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:321930 Archived-At: > I'll do the legendary Holy Grail of Elisp programming, > namely find-file-dwim.el Four methods now and one can add a lot of those if one comes up with new ideas. What remains to do, well, polishing, is the interface and I think it will be super-important to get that right, how to indicate a suggested file isn't what you look for, for example. I'll post a new version in a couple of days or so, maybe. ;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/emacs-init/find-file-dwim.el ;; ;; created: 2024-07-22 ;; version: 0.1.0 (require 'cl-lib) (require 'psea) ; https://dataswamp.org/~incal/emacs-init/psea.el (defun buffers () (mapcar #'buffer-name (buffer-list)) ) ;; (buffers) (defun mod-time-sec (f) (let ((s (time-convert (file-attribute-modification-time (file-attributes f)) 'integer) )) (list s f) )) ;; (mod-time-sec "~/.emacs") (defun remove-data (ds) (mapcar #'cadr ds) ) (defun sort-mod-time-sec (&optional dir) (or dir (setq dir default-directory)) (let ((fs (directory-files dir nil nil t))) (remove-data (reverse (cl-sort (mapcar #'mod-time-sec fs) #'> :key #'car)) ))) ;; (sort-mod-time-sec) (defun psea-hit (s fs &optional max gov) (and max (setq fs (seq-take fs max))) (or gov (setq gov 70) ) (cl-loop with perc with res for f in fs do (setq perc (sdp s f)) (when (< gov perc) (cl-pushnew (list perc f) res) ) finally return (remove-data (cl-sort res #'> :key #'car)) )) ;; (psea-hit "buffer-menu" (buffers)) ;; (psea-hit "find-file-dwim.el" (sort-mod-time-sec)) (defun re-hit (re fs &optional max) (and max (setq fs (seq-take fs max))) (cl-remove-if-not (lambda (f) (string-match re f)) fs) ) ;; (re-hit "line" (buffers)) ;; (re-hit "line" (sort-mod-time-sec) 1000) (provide 'find-file-dwim) -- underground experts united https://dataswamp.org/~incal