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: Add completion to compilation-read-command Date: Thu, 26 Dec 2024 11:39:58 +0000 Message-ID: <877c7m8ygh.fsf@posteo.net> References: <87ttatb9g0.fsf@posteo.net> <87a5clm3p5.fsf@mail.linkov.net> <8734icaegs.fsf@posteo.net> <9a4bb215-561c-468f-97de-7d84fe7adc43@posteo.net> <87ttas80au.fsf@posteo.net> <962064f8-fab7-4867-af04-135e48a9dd15@posteo.net> <87ldw390ql.fsf@posteo.net> <4a27c5d7-b207-4bf1-a01b-552bf88a6347@posteo.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28155"; mail-complaints-to="usenet@ciao.gmane.io" Cc: juri@linkov.net, emacs-devel@gnu.org To: Spyros Roum Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Dec 26 12:41:02 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 1tQmEf-00078E-Qf for ged-emacs-devel@m.gmane-mx.org; Thu, 26 Dec 2024 12:41:01 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tQmDs-0000PJ-CK; Thu, 26 Dec 2024 06:40:12 -0500 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 1tQmDn-0000MO-5X for emacs-devel@gnu.org; Thu, 26 Dec 2024 06:40:07 -0500 Original-Received: from mout01.posteo.de ([185.67.36.65]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tQmDk-00077p-Ti for emacs-devel@gnu.org; Thu, 26 Dec 2024 06:40:06 -0500 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 0DAF3240027 for ; Thu, 26 Dec 2024 12:40:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1735213201; bh=ALaEM1wGYQzH0MmQcjepvK2oEpBYLiZT7f1/m6LEVGY=; h=From:To:Cc:Subject:Autocrypt:OpenPGP:Date:Message-ID:MIME-Version: Content-Type:From; b=f9Xin9syntMAMcKbgMZDcpikKX1H+78xRJFh6hjWma9f7UPiwmB6UANWLwZEXYmSq LXlVXyb0xrv9B+BVp4bMCZY8ebtmeLXHi2Ix//a0eW7DOF0oCLun52XcXjTxM/i1Bh rC8y1NsfSMLZrh+efYkldz9U5M5XLmV8lEsurDfyVMjm7sSr9zz7qHE1XupA31GkLE TzoHIQK3marvAL1VjP3ihHK3lDm6tQTvmoKUlSuo6MyNrTedbv8KEmQsNCWgcfNMU5 kuiZJuV36g8rZznpIZij/20eodywOsf+glWoCb7bfxeP5OSWiruKd3xs5lLGU9ZNlS oFPBrZnKh72iA== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4YJmrc4L9pz9rxM; Thu, 26 Dec 2024 12:39:59 +0100 (CET) In-Reply-To: <4a27c5d7-b207-4bf1-a01b-552bf88a6347@posteo.net> (Spyros Roum's message of "Wed, 25 Dec 2024 22:11:52 +0000") Autocrypt: addr=philipk@posteo.net; keydata= mDMEZBBQQhYJKwYBBAHaRw8BAQdAHJuofBrfqFh12uQu0Yi7mrl525F28eTmwUDflFNmdui0QlBo aWxpcCBLYWx1ZGVyY2ljIChnZW5lcmF0ZWQgYnkgYXV0b2NyeXB0LmVsKSA8cGhpbGlwa0Bwb3N0 ZW8ubmV0PoiWBBMWCAA+FiEEDg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwMFCQHhM4AFCwkI BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ8xYDWXahwulikAEA77hloUiSrXgFkUVJhlKBpLCHUjA0 mWZ9j9w5d08+jVwBAK6c4iGP7j+/PhbkxaEKa4V3MzIl7zJkcNNjHCXmvFcEuDgEZBBQQhIKKwYB BAGXVQEFAQEHQI5NLiLRjZy3OfSt1dhCmFyn+fN/QKELUYQetiaoe+MMAwEIB4h+BBgWCAAmFiEE Dg7HY17ghYlni8XN8xYDWXahwukFAmQQUEICGwwFCQHhM4AACgkQ8xYDWXahwukm+wEA8cml4JpK NeAu65rg+auKrPOP6TP/4YWRCTIvuYDm0joBALw98AMz7/qMHvSCeU/hw9PL6u6R2EScxtpKnWof z4oM OpenPGP: id=philipk@posteo.net; url="https://keys.openpgp.org/vks/v1/by-email/philipk@posteo.net"; preference=signencrypt Received-SPF: pass client-ip=185.67.36.65; envelope-from=philipk@posteo.net; helo=mout01.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_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=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:327143 Archived-At: Spyros Roum writes: > Philip Kaludercic wrote: >>> Also, I'm wondering if this counts as non-trivial enough that I would >>> need to sign the FSF copyright. >> It looks like it to me, and either way it is not bad to do that so that >> you have it behind you for future contributions either to Emacs or ELPA. > You are right, I have initiated the process. >>> Regarding testing, as far as I can tell, there are currently no tests >>> for `compilation-read-command`. >>> Should I add anything? If yes, I'll probably need someone to point to >>> existing tests for similar things that I can copy from. >> You could take a look at test/lisp/progmodes/compile-tests.el, but I >> don't think this breaks the patch, especially when dealing with >> something as interactive as what you are proposing. > > I did check compile-tests.el and found no references to > `compilation-read-command`, > that's why I said I think it's not tested currently. Ah my bad, I misunderstood that you couldn't find any tests at all. > I'll not add any tests, I wouldn't even know how to test something > interactive like that. IIRC you could simulate input using `unread-command-events'. >>> Am I forgetting anything else? >>> From e1068206662913978d541f924205a0615f8d2d95 Mon Sep 17 00:00:00 2001 >>> From: Spyros Roum >>> Date: Wed, 25 Dec 2024 17:32:31 +0200 >>> Subject: [PATCH] Add option for making compilation-read-command use >>> completing-read >> A ChageLog style commit message would be expected here as well. You can >> inject the structure in vc-mode using C-c C-w. > > I'm not sure the level of detail I should go in describing each > function I touch, so I wrote (what I think is) a lot. Let me know if > it's not necessary or if it's fine as is. I did see some examples from > the wiki/other commits and I think it's fine. > >>> + "Function used by `compilation-read-command' to get user's input. >>> +Defaults to `compilation-prompt-read-shell-command', >>> +but `compilation-prompt-read-command-with-completion' can be used instead for >> If possible, avoid the passive phrase here. > > I changed it to active voice. I'll also say I'm not a native speaker, > so if you think > it's still weird/not good enough, please let me know. > > I've attached a new draft based on your feedback. Additionally, I've > renamed the new function to something that describes that completion > happens based on history, according to Juri's input. > > One additional question: The NEWS file is for version 31.1. Should the > `:version` tag also be for 31.1 instead of 31? It should be for 31.1, as that will be the version when Emacs is released. > From 7e140c1ab5bfc7440753ab3aff2c3ce7eb38414e Mon Sep 17 00:00:00 2001 > From: Spyros Roum > Date: Wed, 25 Dec 2024 17:32:31 +0200 > Subject: [PATCH] Add option for making compilation-read-command use > completing-read > > * etc/NEWS: Add to NEWS > * lisp/progmodes/compile.el (compilation-read-command): > Call function based on `compilation-read-command-function`. > > (compilation-prompt-read-shell-command): The existing > functionality from compilation-read-command extracted to > a function. > > (compilation-prompt-read-with-history-completion): A > function that uses completing-read to read the command. > > (compilation-read-command-function): The new option that > controlls which function is used. The detail seems fine, the formatting is just unusual but that can be fixed when applying the patch. > --- > etc/NEWS | 8 ++++++++ > lisp/progmodes/compile.el | 28 +++++++++++++++++++++++++++- > 2 files changed, 35 insertions(+), 1 deletion(-) > > diff --git a/etc/NEWS b/etc/NEWS > index ca107bb4938..cfb137c2399 100644 > --- a/etc/NEWS > +++ b/etc/NEWS > @@ -147,6 +147,14 @@ will still be on that candidate after "*Completions*" is updated with a > new list of completions. The candidate is automatically deselected when > the "*Completions*" buffer is hidden. > > +--- > +*** New user option 'compilation-read-command-function'. > +This option controls what function is used to read user input for > +'compilation-read-command'. > +It defaults to 'compilation-prompt-read-shell-command', which preserves > +existing behavior. When set to 'compilation-prompt-read-with-history-completion', > +'completing-read' is used allowing autocomplete based on past runs of 'compile'. I am not sure if we need to go into the options here. > + > ** Windows > > +++ > diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el > index 6784a12fd63..d01e8c69017 100644 > --- a/lisp/progmodes/compile.el > +++ b/lisp/progmodes/compile.el > @@ -1797,12 +1797,38 @@ compilation-mode-font-lock-keywords > '((compilation--ensure-parse)) > compilation-mode-font-lock-keywords)) > > -(defun compilation-read-command (command) > +(defun compilation-prompt-read-shell-command (command) > (read-shell-command "Compile command: " command > (if (equal (car compile-history) command) > '(compile-history . 1) > 'compile-history))) > > +(defun compilation-prompt-read-with-history-completion (command) > + (completing-read "Compile command: " compile-history > + nil nil command > + (if (equal (car compile-history) command) > + '(compile-history . 1) > + 'compile-history))) > + > +(defcustom compilation-read-command-function > + #'compilation-prompt-read-shell-command > + "`compilation-read-command' uses this function to get user's input. > +Defaults to `compilation-prompt-read-shell-command', > +but 'compilation-prompt-read-with-history-completion' can be used instead for > +a completing version based on past runs." > + :version "31.0" > + :type 'function > + :options > + (list > + #'compilation-prompt-read-shell-command > + #'compilation-prompt-read-with-history-completion)) > + > +(defun compilation-read-command (command) > + "Prompt user for command to run. > +`compilation-read-command-function' controls the way input is read > +from the minibuffer." > + (funcall compilation-read-command-function command)) > + > > ;;;###autoload > (defun compile (command &optional comint)