all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* About a programming tip
@ 2013-02-21  1:51 Xue Fuqiao
  2013-02-21  6:42 ` Thierry Volpiatto
  0 siblings, 1 reply; 4+ messages in thread
From: Xue Fuqiao @ 2013-02-21  1:51 UTC (permalink / raw
  To: help-gnu-emacs

In (info "(elisp) Programming Tips"):

   * In `interactive', if you use a Lisp expression to produce a list
     of arguments, don't try to provide the "correct" default values for
     region or position arguments.
[...]
     You do not need to take such precautions when you use interactive
     specs `d', `m' and `r', because they make special arrangements to
     recompute the argument values on repetition of the command.

I'm confused with these two sentences.  The first sentence says that
"don't try to provide the 'correct' default values for region or
position arguments", but the second sentence says that "you don't need
to take such precautions when you use interactive specs `d', `m' and
`r'".  IIRC the specs `d', `m' and `r' are "region or position
arguments".  Where do I understand wrong, or is it a bug?  Thanks.

-- 
Best regards, Xue Fuqiao.
http://www.emacswiki.org/emacs/XueFuqiao



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: About a programming tip
  2013-02-21  1:51 About a programming tip Xue Fuqiao
@ 2013-02-21  6:42 ` Thierry Volpiatto
  2013-02-21  7:00   ` Andreas Röhler
  0 siblings, 1 reply; 4+ messages in thread
From: Thierry Volpiatto @ 2013-02-21  6:42 UTC (permalink / raw
  To: help-gnu-emacs

Xue Fuqiao <xfq.free@gmail.com> writes:

> In (info "(elisp) Programming Tips"):
>
>    * In `interactive', if you use a Lisp expression to produce a list
>      of arguments, don't try to provide the "correct" default values for
>      region or position arguments.
> [...]
>      You do not need to take such precautions when you use interactive
>      specs `d', `m' and `r', because they make special arrangements to
>      recompute the argument values on repetition of the command.
>
> I'm confused with these two sentences.  The first sentence says that
> "don't try to provide the 'correct' default values for region or
> position arguments", but the second sentence says that "you don't need
> to take such precautions when you use interactive specs `d', `m' and
> `r'".  IIRC the specs `d', `m' and `r' are "region or position
> arguments".  Where do I understand wrong, or is it a bug?  Thanks.

(defun foo-1 (beg end)
  (interactive (list (read-number "Beg: " (region-beginning))
                     (read-number "End: " (region-end))))
  (message "%S" (buffer-substring beg end)))

(defun foo (beg end)
  (interactive "r")
  (message "%S" (buffer-substring beg end)))

In other words you don't have to use foo-1, it is easier to use foo.

-- 
Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: About a programming tip
  2013-02-21  6:42 ` Thierry Volpiatto
@ 2013-02-21  7:00   ` Andreas Röhler
  2013-02-21  7:59     ` Thierry Volpiatto
  0 siblings, 1 reply; 4+ messages in thread
From: Andreas Röhler @ 2013-02-21  7:00 UTC (permalink / raw
  To: help-gnu-emacs

Am 21.02.2013 07:42, schrieb Thierry Volpiatto:
> Xue Fuqiao <xfq.free@gmail.com> writes:
>
>> In (info "(elisp) Programming Tips"):
>>
>>     * In `interactive', if you use a Lisp expression to produce a list
>>       of arguments, don't try to provide the "correct" default values for
>>       region or position arguments.
>> [...]
>>       You do not need to take such precautions when you use interactive
>>       specs `d', `m' and `r', because they make special arrangements to
>>       recompute the argument values on repetition of the command.
>>
>> I'm confused with these two sentences.  The first sentence says that
>> "don't try to provide the 'correct' default values for region or
>> position arguments", but the second sentence says that "you don't need
>> to take such precautions when you use interactive specs `d', `m' and
>> `r'".  IIRC the specs `d', `m' and `r' are "region or position
>> arguments".  Where do I understand wrong, or is it a bug?  Thanks.
>
> (defun foo-1 (beg end)
>    (interactive (list (read-number "Beg: " (region-beginning))
>                       (read-number "End: " (region-end))))
>    (message "%S" (buffer-substring beg end)))
>
> (defun foo (beg end)
>    (interactive "r")
>    (message "%S" (buffer-substring beg end)))
>
> In other words you don't have to use foo-1, it is easier to use foo.
>

IMO these remarks are misleading indeed, as the form "r" will raise an error if no region exists.
Quite often I need a command, which works on region if existing, but uses some default if not - for example
at the range of the function at point than.

For example if it should work at the whole buffer by default, find in convenient to write

(defun foo (&optional beg end)
   " "
   (interactive "*")
   (let ((beg (cond (beg)
                    ((region-active-p)
                     (region-beginning))
                    (t (point-min))))
         (end (cond (end (copy-marker end))
                    ((region-active-p)
                     (copy-marker (region-end)))
                    (t (copy-marker (point-max))))))




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: About a programming tip
  2013-02-21  7:00   ` Andreas Röhler
@ 2013-02-21  7:59     ` Thierry Volpiatto
  0 siblings, 0 replies; 4+ messages in thread
From: Thierry Volpiatto @ 2013-02-21  7:59 UTC (permalink / raw
  To: help-gnu-emacs

Andreas Röhler <andreas.roehler@easy-emacs.de> writes:

>
> IMO these remarks are misleading indeed, as the form "r" will raise an error if no region exists.
As expected, falling back to default values is a particular case and is
not what is asked here.

-- 
Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-02-21  7:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-21  1:51 About a programming tip Xue Fuqiao
2013-02-21  6:42 ` Thierry Volpiatto
2013-02-21  7:00   ` Andreas Röhler
2013-02-21  7:59     ` Thierry Volpiatto

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.