From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Philip Kaludercic Newsgroups: gmane.emacs.devel Subject: Re: find-file-dwim.el Date: Mon, 22 Jul 2024 14:02:17 +0000 Message-ID: <878qxtle3a.fsf@posteo.net> References: <87o76qs8el.fsf@dataswamp.org> <87le1urtgp.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="2525"; mail-complaints-to="usenet@ciao.gmane.io" To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Mon Jul 22 16:03:23 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 1sVtdL-0000WG-KM for ged-emacs-devel@m.gmane-mx.org; Mon, 22 Jul 2024 16:03:23 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sVtca-0000LG-25; Mon, 22 Jul 2024 10:02:37 -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 1sVtcP-0000KK-7T for emacs-devel@gnu.org; Mon, 22 Jul 2024 10:02:26 -0400 Original-Received: from mout02.posteo.de ([185.67.36.66]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sVtcM-00009I-T6 for emacs-devel@gnu.org; Mon, 22 Jul 2024 10:02:24 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 43515240104 for ; Mon, 22 Jul 2024 16:02:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1721656938; bh=ZjMbsF0KQNo4+YTDamEqhHd+g4/W5ruoRIZD/qoJXVo=; h=From:To:Subject:OpenPGP:Date:Message-ID:MIME-Version:Content-Type: From; b=Ura9q1ASTkmw4Gcan9RfvTckGHW6hrQfNQO7n3+UH4EvBF876qlm6+Wdy4nYv4YtR 8iEbGJjcGG4wN51IMtUHhb/a4egz6Sv6Y7XzZW/w9k/nzDWoEPwlRMxWjIOiuZKete df/KVoYPVk5XDdUOvhAF/aNjN8L2+Zkkq0p7wtTxDN8t/trAaOoFkaqskRzlhEQ60Y rKwiNAAuguQTTWh8lpFm8KHpUj3v6wbGtON1oJvWORY1wS8O8GPr4aX9Z3hcaFAOym 48Z62gOJrR7F6g2TkPYF//opQQe8BVbwR37IE2L9cEL4crznBxYpVBAyY4h4SAwcDk 6Qh0JddBwZSBA== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4WSMRF6wmYz9rxV for ; Mon, 22 Jul 2024 16:02:17 +0200 (CEST) In-Reply-To: <87le1urtgp.fsf@dataswamp.org> (Emanuel Berg's message of "Mon, 22 Jul 2024 05:33:42 +0200") OpenPGP: id=7126E1DE2F0CE35C770BED01F2C3CC513DB89F66; url="https://keys.openpgp.org/vks/v1/by-fingerprint/7126E1DE2F0CE35C770BED01F2C3CC513DB89F66"; preference=signencrypt Received-SPF: pass client-ip=185.67.36.66; envelope-from=philipk@posteo.net; helo=mout02.posteo.de X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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:321941 Archived-At: It might just be, but your message confuses me: I am not sure what you are trying to say here, are you proposing adding the these functions to the core (in which case a patch would be more appropriate) or to ELPA (in which case we'd like a link to some Git repository). If you are just interested in sharing code with others, perhaps the development mailing list is not the right place to do so. (Also, please don't forget to CC me in your response, I recall this being an issue in the past where I didn't see your response until much later). Emanuel Berg writes: >> I'll do the legendary Holy Grail of Elisp programming, >> namely find-file-dwim.el > > I'm working on this now so I'll forget all the rest. Do Calc if > you want to. > > This will be a heck of an application. There will be several > servers that are always ready and as soon as one server gets > it right it will be promoted to try its thing sooner the > next time. > > The individual servers can also be adapting and self-improving > just by functioning much like a memory hierarchy with levels > of differently sized, paced, and priced cache. Maybe overkill > to do but would be cool. > > But it is all based on proximity in time and space. > > Ikr? Just like a drill! Emanuel Berg writes: >> 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) -- Philip Kaludercic on peregrine