From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: Embedded list selection with ido-completing-read. Date: Tue, 26 Oct 2021 13:23:21 +0200 Message-ID: <87bl3ckp1y.fsf@zoho.eu> References: <87r1cbwnda.fsf@zoho.eu> <87a6iz1at1.fsf@zoho.eu> <87sfwqxuhi.fsf@zoho.eu> <878rygmkhn.fsf@zoho.eu> Reply-To: Emanuel Berg Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="19857"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:gd/rxkbIIFmK/PJXSlxSOmeot+Y= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Tue Oct 26 13:27:46 2021 Return-path: Envelope-to: geh-help-gnu-emacs@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 1mfKcL-0004w8-BL for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 26 Oct 2021 13:27:45 +0200 Original-Received: from localhost ([::1]:42460 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mfKcJ-00038A-O6 for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 26 Oct 2021 07:27:43 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:36126) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfKYM-0001Dc-5d for help-gnu-emacs@gnu.org; Tue, 26 Oct 2021 07:23:39 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:60942) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mfKYI-0004xI-7i for help-gnu-emacs@gnu.org; Tue, 26 Oct 2021 07:23:37 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mfKYF-0009nY-1e for help-gnu-emacs@gnu.org; Tue, 26 Oct 2021 13:23:31 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: help-gnu-emacs@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -15 X-Spam_score: -1.6 X-Spam_bar: - X-Spam_report: (-1.6 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.25, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:134201 Archived-At: Hongyi Zhao wrote: > I tried for some time and got the following code snippet, > but it doesn't seem to be able to complete the work > discussed here by the original code snippet: > > (defun atomic-position (prog flag1 flag2) > (interactive > (list > (completing-read "prog: " '("neb" "pw" "cp") nil t) > (completing-read "flag1: " '("alat" "angstrom" "bohr" "crystal" > "crystal_sg") nil t) > (completing-read "flag2: " '("alat" "angstrom" "bohr" "crystal") nil t) > ) > ) > > (cond ((or (equal prog "neb") > (equal prog "pw")) > (insert (format "Atomic position: %s\n" flag1))) > ((equal prog "cp") > (insert (format "Atomic position: %s\n" flag2))) > )) Badness 1635247083: Don't add several arguments for the different way the function can execute. If program "neb" takes one flag and program "cp" one as well then "prog" and "flag" is enough. I changed that and see what, then the whole `cond' thing became redundant since it then did the same thing ... so normally we would here think, "good", and just remove it and perhaps think about how good code leads to even better code ... But I said in another thread to not use cond but instead `cl-case' or `pcase' so I wanted to show you that, for that reason I changed the output a little bit so it would, technically at least, be correct to use either one of these three including cond, hopefully you'll see the improvement with pcase tho. Note that with interactive use, we don't get weird indata because of REQUIRE-MATCH, and from Lisp, because of the "matches anything" pcase (the last one, the underscore) we catch bogus programs. But from Lisp it is possible to send bogus flags! Or brilliant ones for that matter ... so you omitted that, perhaps realizing that possibility and potential among future users ... But regardless of whatever, one should be aware of it. (defun atomic-position (prog flag) (interactive (list (completing-read "program: " '("cp" "neb" "pw") nil t) (completing-read "flag: " '("alat" "angstrom" "bohr" "crystal" "crystal_sg") nil t) )) (let ((pstr (pcase prog ((or "neb" "pw") (format "[neb/pw, here %s] %s\n" prog flag)) ("cp" (format "[%s] %s" prog flag)) (_ (error "No such program")) ))) (insert "Atomic Kitten " pstr) )) ;; test: ;; (atomic-position "neb" "bohr") ;; (call-interactively #'atomic-position) Now do this: https://www.youtube.com/watch?v=uQgB1DdwdMQ And read this post again ... and sloowly this time! -- underground experts united https://dataswamp.org/~incal