unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* forward-paragraph return value
@ 2010-08-23 18:25 Andreas Röhler
  2010-08-23 20:59 ` Andreas Schwab
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Röhler @ 2010-08-23 18:25 UTC (permalink / raw)
  To: Emacs developers


Hi,

`forward-paragraph' presently returns "0" if the number of steps given 
by ARG is completed. It's code ends with:

     ;; Return the number of steps that could not be done.
     arg))

IMHO buffer-position reached is a more useful return value.

Function may return point only when successfully, nil otherwise.

Thanks all


Andreas

--
https://code.launchpad.net/~a-roehler/python-mode
https://code.launchpad.net/s-x-emacs-werkstatt/




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

* Re: forward-paragraph return value
  2010-08-23 18:25 forward-paragraph return value Andreas Röhler
@ 2010-08-23 20:59 ` Andreas Schwab
  2010-08-24  5:43   ` Andreas Röhler
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2010-08-23 20:59 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: Emacs developers

Andreas Röhler <andreas.roehler@online.de> writes:

> `forward-paragraph' presently returns "0" if the number of steps given by
> ARG is completed. It's code ends with:
>
>     ;; Return the number of steps that could not be done.
>     arg))

Which makes it similar to forward-line.

> IMHO buffer-position reached is a more useful return value.

Which you can get with (point).  So what's the point?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



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

* Re: forward-paragraph return value
  2010-08-23 20:59 ` Andreas Schwab
@ 2010-08-24  5:43   ` Andreas Röhler
  2010-08-24  8:27     ` Stephen J. Turnbull
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Röhler @ 2010-08-24  5:43 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Emacs developers

Am 23.08.2010 22:59, schrieb Andreas Schwab:
> Andreas Röhler<andreas.roehler@online.de>  writes:
>
>    
>> `forward-paragraph' presently returns "0" if the number of steps given by
>> ARG is completed. It's code ends with:
>>
>>      ;; Return the number of steps that could not be done.
>>      arg))
>>      
> Which makes it similar to forward-line.
>
>    
>> IMHO buffer-position reached is a more useful return value.
>>      
> Which you can get with (point).  So what's the point?
>
> Andreas.
>
>    

Having a consistent design meeting expectations.
For example a function designed to move point should return new position.

Then people may write functions taking already the return value.
Thats more nice than writing FORWARD (point).

Presently return values of move functions are not regular. Some return 
nil or t, some positions IIRC, this
one it's remaining loop variable.

Well, would consider re-write efforts and not suggest that now for 
skip-char functions.
In case of moves over paragraphs its easily done.

Andreas

--
https://code.launchpad.net/~a-roehler/python-mode
https://code.launchpad.net/s-x-emacs-werkstatt/






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

* Re: forward-paragraph return value
  2010-08-24  5:43   ` Andreas Röhler
@ 2010-08-24  8:27     ` Stephen J. Turnbull
  2010-08-24  9:14       ` Andreas Röhler
  0 siblings, 1 reply; 9+ messages in thread
From: Stephen J. Turnbull @ 2010-08-24  8:27 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: Andreas Schwab, Emacs developers

Andreas Röhler writes:

 > Then people may write functions taking already the return value.

Sure.  But will they?  Show us examples of existing functions
(preferably already in Emacs) that would benefit from this change.
An easy example would be functions which look like

    ;; some code here
    (forward-paragraph count)
    (foo (point) other args)
    ;; more code

But it's not clear to me that

    ;; some code here
    (foo (forward-paragraph count) other args)
    ;; more code

is going to be more readable without seeing examples.  Since point has
a byte code, it's not particularly costly to use point.



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

* Re: forward-paragraph return value
  2010-08-24  8:27     ` Stephen J. Turnbull
@ 2010-08-24  9:14       ` Andreas Röhler
  2010-08-24 11:30         ` Davis Herring
  2010-08-24 12:06         ` Stephen J. Turnbull
  0 siblings, 2 replies; 9+ messages in thread
From: Andreas Röhler @ 2010-08-24  9:14 UTC (permalink / raw)
  To: Stephen J. Turnbull; +Cc: Andreas Schwab, Emacs developers

Am 24.08.2010 10:27, schrieb Stephen J. Turnbull:
> Andreas Röhler writes:
>
>   >  Then people may write functions taking already the return value.
>
> Sure.  But will they?  Show us examples of existing functions
> (preferably already in Emacs) that would benefit from this change.
>    

Didn't I point to?

If a look in forward-paragraph doesn't speak to you,
maybe have a look into

bounds-of-thing-at-point .

Forms like
         (let
           (beg
             (progn
              (funcall
               (or (get thing 'beginning-op)
                               (lambda () (forward-thing thing -1))))
              (point))))

Thats bug-sourcing BTW, as it returns point in any case, even if move 
failed.
Why not make implementation of return value from

search-forward

canonical instead, returning the position if succesful, nil otherwise.

The gain will be for newly written code.
For writers first, who must not learn function by function the return value.

In the example above we could write

(let
     (beg
      (funcall
       (or (get thing 'beginning-op)
           (lambda () (forward-thing thing -1))))))

Its clean and much more reliable, as beg will be nil, if nothing was found.

> An easy example would be functions which look like
>
>      ;; some code here
>      (forward-paragraph count)
>      (foo (point) other args)
>      ;; more code
>
> But it's not clear to me that
>
>      ;; some code here
>      (foo (forward-paragraph count) other args)
>      ;; more code
>
> is going to be more readable without seeing examples.  Since point has
> a byte code, it's not particularly costly to use point.
>
>    




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

* Re: forward-paragraph return value
  2010-08-24  9:14       ` Andreas Röhler
@ 2010-08-24 11:30         ` Davis Herring
  2010-08-24 16:57           ` Andreas Röhler
  2010-08-24 12:06         ` Stephen J. Turnbull
  1 sibling, 1 reply; 9+ messages in thread
From: Davis Herring @ 2010-08-24 11:30 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: Stephen J. Turnbull, Andreas Schwab, Emacs developers

> Its clean and much more reliable, as beg will be nil, if nothing was
> found.

If (forward-paragraph 10) can only advance past 7 paragraphs, has it
failed or not?  And how is the caller to know that what they asked for was
impossible if it merely returns (point-end) or so?

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.



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

* Re: forward-paragraph return value
  2010-08-24  9:14       ` Andreas Röhler
  2010-08-24 11:30         ` Davis Herring
@ 2010-08-24 12:06         ` Stephen J. Turnbull
  2010-08-24 17:10           ` Andreas Röhler
  1 sibling, 1 reply; 9+ messages in thread
From: Stephen J. Turnbull @ 2010-08-24 12:06 UTC (permalink / raw)
  To: Andreas Röhler; +Cc: Andreas Schwab, Emacs developers

Andreas Röhler writes:
 > Am 24.08.2010 10:27, schrieb Stephen J. Turnbull:
 > > Andreas Röhler writes:
 > >
 > >   >  Then people may write functions taking already the return
 > >   >  value.
 > > Sure.  But will they?  Show us examples of existing functions
 > > (preferably already in Emacs) that would benefit from this
 > > change.
 > >    
 > 
 > Didn't I point to?
 > 
 > If a look in forward-paragraph doesn't speak to you,

Of course that doesn't speak to me; that's the function you propose to
change.

 > maybe have a look into
 > 
 > bounds-of-thing-at-point .

`forward-paragraph' is a command.  `bounds-of-thing-at-point' is not.
There's a big difference.

 > Forms like
 >          (let
 >            (beg
 >              (progn
 >               (funcall
 >                (or (get thing 'beginning-op)
 >                                (lambda () (forward-thing thing -1))))
 >               (point))))

I doubt that form appears anywhere in Emacs.  The style is nauseating,
not to mention that `progn' is a very unusual choice for a variable
you are let-binding. ;-)  Please give *real* examples, or if you're
going to simplify real code to make your point, say that's what you're
doing.  And do it correctly, even for a fragment like this.

 > Thats bug-sourcing BTW, as it returns point in any case, even if
 > move failed.  Why not make implementation of return value from
 > 
 > search-forward
 > 
 > canonical instead, returning the position if succesful, nil
 > otherwise.

Er, because otherwise `search-forward' does not return nil, but rather
signals an error?  You need to specify additional arguments to get it
to return nil.  There's a reason for this interface, related to the
fact that `search-forward' is a command, as is `forward-paragraph'.

 > The gain will be for newly written code.  For writers first, who
 > must not learn function by function the return value.

A common convention might be a good idea.  It's a better idea for
non-commands than it is for commands, though.

 > In the example above we could write
 > 
 > (let
 >      (beg
 >       (funcall
 >        (or (get thing 'beginning-op)
 >            (lambda () (forward-thing thing -1))))))
 > 
 > Its clean and much more reliable, as beg will be nil, if nothing
 > was found.

Maybe.  But in fact, this is a (broken) copy of (part of) the
implementation of `bounds-of-thing-at-point'.  At least in XEmacs,
that function has *much* bigger problems than the return value of
forward-thing.  Also, since the return value of `forward-thing' is
undocumented (and probably rather unreliable), you could change that,
or define an internal function for the use of functions defun'ed in
thingatpt.el.

The issue with forward-paragraph is quite different, because it is
documented and it is a command.



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

* Re: forward-paragraph return value
  2010-08-24 11:30         ` Davis Herring
@ 2010-08-24 16:57           ` Andreas Röhler
  0 siblings, 0 replies; 9+ messages in thread
From: Andreas Röhler @ 2010-08-24 16:57 UTC (permalink / raw)
  To: herring; +Cc: Stephen J. Turnbull, Andreas Schwab, Emacs developers

Am 24.08.2010 13:30, schrieb Davis Herring:
>> Its clean and much more reliable, as beg will be nil, if nothing was
>> found.
>>      
> If (forward-paragraph 10) can only advance past 7 paragraphs, has it
> failed or not?  And how is the caller to know that what they asked for was
> impossible if it merely returns (point-end) or so?
>
> Davis
>
>    

Example mentioned was search-forward. It sends all the info you need.



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

* Re: forward-paragraph return value
  2010-08-24 12:06         ` Stephen J. Turnbull
@ 2010-08-24 17:10           ` Andreas Röhler
  0 siblings, 0 replies; 9+ messages in thread
From: Andreas Röhler @ 2010-08-24 17:10 UTC (permalink / raw)
  To: emacs-devel; +Cc: Stephen J. Turnbull, Andreas Schwab

Am 24.08.2010 14:06, schrieb Stephen J. Turnbull:
> Andreas Röhler writes:
>   >  Am 24.08.2010 10:27, schrieb Stephen J. Turnbull:
>   >  >  Andreas Röhler writes:
>   >  >
>   >  >    >   Then people may write functions taking already the return
>   >  >    >   value.
>   >  >  Sure.  But will they?  Show us examples of existing functions
>   >  >  (preferably already in Emacs) that would benefit from this
>   >  >  change.
>   >  >
>   >
>   >  Didn't I point to?
>   >
>   >  If a look in forward-paragraph doesn't speak to you,
>
> Of course that doesn't speak to me; that's the function you propose to
> change.
>
>   >  maybe have a look into
>   >
>   >  bounds-of-thing-at-point .
>
> `forward-paragraph' is a command.  `bounds-of-thing-at-point' is not.
> There's a big difference.
>
>   >  Forms like
>   >           (let
>   >             (beg
>   >               (progn
>   >                (funcall
>   >                 (or (get thing 'beginning-op)
>   >                                 (lambda () (forward-thing thing -1))))
>   >                (point))))
>
> I doubt that form appears anywhere in Emacs.  The style is nauseating,
> not to mention that `progn' is a very unusual choice for a variable
> you are let-binding. ;-)  Please give *real* examples,

it is, just the var is called real-beg, which make things still more 
confusion and has been
let aside here as an example was the concern

                       (real-beg
                (progn
              (funcall
               (or (get thing 'beginning-op)
                               (lambda () (forward-thing thing -1))))
              (point))))

Also you may see

           ;; If that brings us all the way back to ORIG,
           ;; it worked.  But END may not be the real end.
           ;; So find the real end that corresponds to BEG.
           (let ((real-end
              (progn
                (funcall
                 (or (get thing 'end-op)
                                 (lambda () (forward-thing thing 1))))
                (point))))

> or if you're
> going to simplify real code to make your point, say that's what you're
> doing.

Please stop insinuations.

>    And do it correctly, even for a fragment like this.
>
>   >  Thats bug-sourcing BTW, as it returns point in any case, even if
>   >  move failed.  Why not make implementation of return value from
>   >
>   >  search-forward
>   >
>   >  canonical instead, returning the position if succesful, nil
>   >  otherwise.
>
> Er, because otherwise `search-forward' does not return nil, but rather
> signals an error?  You need to specify additional arguments to get it
> to return nil.  There's a reason for this interface, related to the
> fact that `search-forward' is a command, as is `forward-paragraph'.
>
>   >  The gain will be for newly written code.  For writers first, who
>   >  must not learn function by function the return value.
>
> A common convention might be a good idea.  It's a better idea for
> non-commands than it is for commands, though.
>
>   >  In the example above we could write
>   >
>   >  (let
>   >       (beg
>   >        (funcall
>   >         (or (get thing 'beginning-op)
>   >             (lambda () (forward-thing thing -1))))))
>   >
>   >  Its clean and much more reliable, as beg will be nil, if nothing
>   >  was found.
>
> Maybe.  But in fact, this is a (broken) copy of (part of) the
> implementation of `bounds-of-thing-at-point'.  At least in XEmacs,
> that function has *much* bigger problems than the return value of
> forward-thing.

Same in Emacs. But for the reasons just started to discuss. It's simply 
not written to the end, not
thought through. Or it's author had to leave in the middle of his work.

I wonder what happened, as it's a great set-out, a fine idea.
For me one of the most interesting stuff in Emacs.
Thanks BTW.

Andreas




>   Also, since the return value of `forward-thing' is
> undocumented (and probably rather unreliable), you could change that,
> or define an internal function for the use of functions defun'ed in
> thingatpt.el.
>
> The issue with forward-paragraph is quite different, because it is
> documented and it is a command.
>
>
>    




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

end of thread, other threads:[~2010-08-24 17:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-08-23 18:25 forward-paragraph return value Andreas Röhler
2010-08-23 20:59 ` Andreas Schwab
2010-08-24  5:43   ` Andreas Röhler
2010-08-24  8:27     ` Stephen J. Turnbull
2010-08-24  9:14       ` Andreas Röhler
2010-08-24 11:30         ` Davis Herring
2010-08-24 16:57           ` Andreas Röhler
2010-08-24 12:06         ` Stephen J. Turnbull
2010-08-24 17:10           ` Andreas Röhler

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).