emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: forward-paragraph return value


From: Andreas Röhler
Subject: Re: forward-paragraph return value
Date: Tue, 24 Aug 2010 19:10:59 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.1.11) Gecko/20100711 Thunderbird/3.0.6

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.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]