* 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.