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.help Subject: Re: (interactive) and &optional Date: Thu, 23 Mar 2023 19:20:29 +0000 Message-ID: <87jzz746ma.fsf@posteo.net> References: <25628.42021.832534.376361@woitok.gmail.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="13687"; mail-complaints-to="usenet@ciao.gmane.io" Cc: help-gnu-emacs@gnu.org To: Dr Rainer Woitok Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Thu Mar 23 20:21:18 2023 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 1pfQUw-0003LE-1H for geh-help-gnu-emacs@m.gmane-mx.org; Thu, 23 Mar 2023 20:21:18 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pfQUI-0003fo-R4; Thu, 23 Mar 2023 15:20:38 -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 1pfQUF-0003fa-IN for help-gnu-emacs@gnu.org; Thu, 23 Mar 2023 15:20:35 -0400 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 1pfQUD-0006ZE-5a for help-gnu-emacs@gnu.org; Thu, 23 Mar 2023 15:20:35 -0400 Original-Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id ECF5E2405E5 for ; Thu, 23 Mar 2023 20:20:30 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1679599231; bh=8BDJHJ3Vh6AS4i+zCpSIBSxQXIxTQXmmUHLwfW+oQhA=; h=From:To:Cc:Subject:Autocrypt:Date:From; b=ZzJGFDjLlNCLhtxg1BMDGUgapHKvCBwBjTLF4C9AnX0RLxeiJk0iRj2whTbySKxb3 D4nPFW/u3RkxX6EykqtulGL+/p7AqsgRCn7oV0wokax6wovyRMYvozPu+lkFRWgIUy mKsJoQGpFip16ZpsZEQ+/BezSWTgoSv/tpTn06f39EYmCtMibhCh5hKJeOBO5Eav4g nfMqgixkEgJ/VC0H5HByNQQZ9kQAlKw+tVLgip061HvbbJjp2oRvHK5a0j7hbeRE/z 7pjLcifbYnLJU1JjxkwQfwsKx5VL59ryADDKPiQGN5sTwN6Qh0hpTyGCiSklCOt5CR 2oHd4jYVS8YhQ== Original-Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4PjFYB2ykkz9rxb; Thu, 23 Mar 2023 20:20:30 +0100 (CET) In-Reply-To: <25628.42021.832534.376361@woitok.gmail.com> (Rainer Woitok's message of "Thu, 23 Mar 2023 20:10:32 +0100") 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 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_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 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-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.help:143099 Archived-At: Dr Rainer Woitok writes: > Greetings, > > In an attempt to write a function with and optional argument which is > both, callable from Lisp and via "M-x", I ran into some unexpected (by > me) problems. Consider the following function: > > (defun fun (&optional arg) > (interactive "Sarg: ") > (message "%s:%s.\n" 'val (symbol-name arg))) This would have done the same thing: (message "val: %s.\n" arg) > > Calling "M-: (fun 'a)" returns > > "val:a. > " > > including the double quotes, while calling "M-x fun" and then typing "a > RET" at the prompt returns > > val:a.\n That is because `message' returns the message as a string when evaluated, and using M-: you first have `message' do it's thing, then return the string it printed (using the printed representation for a string, which includes queotes). You can verify this by looking up the message log using C-h e. > without double quotes. Apart from perhaps the double quotes, this is > what I had expected. Likewise, calling "M-: (fun)" returns > > "val:nil. > " > > as expected, while calling "M-x fun" and then just typing "RET" at the > prompt returns > > val:.\n > > that is, an empty symbol or string. Right. > Am I really expected in a function that is both, callable from Lisp and > via "M-x", to code something along the lines of > > (cond ((or (null arg) (string-empty-p arg)) 'default-val) > (arg)) > > to check whether or not an optional argument has been passed? Are there > any more elegant ways to achieve this? The interactive spec can either take a string as you did here, or an expression that will be evaluated to generate a list of arguments. So the following will read a string (not a symbol), check if the string is empty (I don't think the nil check is necessary) in which case the symbol `default-var' is returned, otherwise we use `intern' to request a symbol with the name of whatever we just queried the user: --8<---------------cut here---------------start------------->8--- (defun fun (&optional arg) (interactive (list (let ((name (read-string "arg: "))) (if (string-empty-p name) 'default-val (intern name))))) (message "val: %s.\n" arg)) --8<---------------cut here---------------end--------------->8--- > Any pointers welcome :-) > > Sincerely, > Rainer -- Philip Kaludercic