all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: Dmitry Gutov <dgutov@yandex.ru>, 9300@debbugs.gnu.org
Subject: bug#9300: 24.0.50; `bounds-of-thing-at-point' does not return nil when just after THING
Date: Thu, 25 Feb 2016 17:44:07 -0800 (PST)	[thread overview]
Message-ID: <05f0b24b-1a52-4fa4-9f22-f34f5ed33556@default> (raw)
In-Reply-To: <e6f054a4-db1c-c1c9-caed-30d8d3f55103@yandex.ru>

> > The fix to your code and theirs is trivial.
> 
> Where's that "think of the poor users" call of yours that
> accompanies any breaking change in Emacs? Users don't like broken code.
> We can only fix code inside Emacs.

And when we do, 3rd-party code sometimes has to adjust.  I'm forced
to do that all the time - and not for bug fixes, usually.

This fix will give all users better, and consistent behavior.

> > Bit if you must, rename the current, bugged implementation of
> > `bounds-of-thing-at-point' to `bounds-of-thing-at-or-after-point'.

I meant ...-or-before-... not ...-or-after-...

> A rename will break third-party code just as well.

The proper fix for such bad 3rd-party code (it never should have
depended on a bug that nil is not returned when there is no thing
at point) is to move to the position where it _really_ wants to look
for a thing.  Such code is typically just looking for a thing near
point, for completion or to use as a default value.

But we _could_ provide a function that finds the thing at or just
before point.  If you don't want to provide such a function, so
much the better.

> > Tell such folks to use that.  Likewise, add `thing-at-or-after-
> > point',

(Again, I meant ...-or-before-... not ...-or-after-...)

> > if necessary, for any code that current depends on the broken
> > `thing-at-point'.
> 
> Won't be usable in packages targeting older versions.

Right.  Like all 3rd-party code, it will use (if (fboundp...)...).

But the proper fix for 3rd-party code, mentioned above, does not
have any such problem.  It should look for a thing at (1- (point))
if it wants to get a thing that might be just before point but not
at point.

That's what always should have done, and that has always worked
(and hopefully always will).

> > If you must, do that plus deprecate the (perfectly good, but not
> > for this broken code) name `bounds-of-thing-at-point', so any such
> > 3rd-party code makes the change.
> >
> > And add a function `bounds-of-thing-at-point-strict' that does
> > what `bounds-of-thing-at-point' should do (= the bug fix).  Change
> > the Emacs code that uses the broken `bounds-of-thing-at-point' to
> > use `bounds-of-thing-at-point-strict'.
> 
> We can add bounds-of-thing-at-point-strict even without changing the
> existing function. Patch welcome, I think.

It's the same patch.  The proper name for it is
`bounds-of-thing-at-point'.  But if you are stubborn then go for
`bounds-of-thing-at-point-strict'.  But be sure to use it everywhere
in the Emacs code in place of `bounds-of-thing-at-point' - that's the fix.

> > This is if you are convinced that there are zillions of uses of
> > the bugged `bounds-of-thing-at-point' that depend on the bugged
> > behavior.  I'm not convinced of that.
> 
> Maybe there aren't too many. Will you do the research on this?

Nope.  Will you?  Does anyone need to?  You're the one who
mentioned that your code depends on checking for a thing at the
wrong position in order to get a thing at point-minus-one.  And
you mentioned an Eclipse function that acts similarly.  That's two.

> > I'd say bite the bullet: fix the bug properly, and when anyone
> > complains tell them to use `bounds-of-thing-at-or-after-point'

(Again, I meant ...-or-before-... not ...-or-after-...)

> > if they really want the bugged behavior.  Better: tell them
> > to use the fixed `bounds-of-thing-at-point' after backing up
> > so point is actually on the THING instead of after it.
> 
> Any such client would be forced to call bounds-of-thing-at-point-
> strict twice. Which is not particularly ideal.

Not at all.  Why do you say that?  That's the behavior you get
today, and apparently the behavior you still want: ask for a thing
that is either at point or one char before point.

> Yup. But when we say "word X ends at position P", P is after the
> last character of X, not before.
> 
> > Before is not at (= after).  Ends at ORIG does not mean ends
> > before ORIG.
> 
> Think of the semantics of `match-end', or the last argument of
> `substring'.

Think of all the other uses of thing-at-point, and the other THINGs
it finds and where it finds them.

Type (foo bar) at top level, and put point after the ).
M-: (thing-at-point 'list)
What do you get?  id it give you "(foo bar)"?  Or did it give
you nil?  There is no list at point.  Is this a bug?  No; it's TRT.

There is a reason for this behavior.  It is what's needed when you
use `thing-at-point' in combination (e.g. repetitively).  I pointed
you to code that does this.  And yes, it needs to work for all types
of THINGs, including, yes, symbols (words, names,...).

> > But I think you either try to see or you don't.  I cannot make
> > you see.
> 
> That's a very zen position for someone who just wrote a 2.5 screen
> email. Why don't you present a valid (in your sense) configuration
> that a bounds-of-thing-at-point implementation without the "else"
> branch will return nil in?

OK, I give up.  I don't need this bug fix for my own code.  Just
trying to do a good deed for Emacs and its users.  I fixed this
long ago for myself, and I make heavy use of the fix.  You're not
interested in fixing this in Emacs.  So be it.

You said at the outset:

  Your reasoning seems valid, however by now this behavior is
  ingrained into my expectations of how thing-at-point should behave.

It's clearly not about your being unconvinced that the fix is correct.
It's about your not wanting to give up your ingrained expectations
of the incorrect behavior.  Sheesh.





  reply	other threads:[~2016-02-26  1:44 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <<B1052724B2D446C59E233FC1BD437723@us.oracle.com>
2015-07-29  1:44 ` bug#9300: 24.0.50; `bounds-of-thing-at-point' does not return nil when just after THING Drew Adams
2016-01-15 13:33   ` Drew Adams
2016-02-23  1:01     ` Dmitry Gutov
2016-02-23  6:37       ` Drew Adams
2016-02-23  7:59         ` Andreas Röhler
2016-02-23 10:22         ` Dmitry Gutov
2016-02-23 16:15           ` Drew Adams
2016-02-24  0:52             ` Dmitry Gutov
2016-02-24  1:31               ` Drew Adams
2016-02-26  1:03                 ` Dmitry Gutov
2016-02-26  1:44                   ` Drew Adams [this message]
2016-02-26 10:15                     ` Dmitry Gutov
2016-02-26 14:39                       ` Drew Adams
2016-02-26 15:25                         ` Dmitry Gutov
2016-02-26 17:00                           ` Drew Adams
2022-04-28 11:24       ` Lars Ingebrigtsen
2022-04-28 15:49         ` Drew Adams
2011-08-14 22:36 Drew Adams
2016-06-20  9:21 ` Tino Calancha
2016-06-20 12:53   ` Dmitry Gutov
2016-06-20 13:11     ` Tino Calancha
2016-06-20 14:48   ` Eli Zaretskii
2016-06-21  3:01     ` Tino Calancha
     [not found]   ` <<8337o79arh.fsf@gnu.org>
2016-06-20 17:50     ` Drew Adams
2016-06-20 18:38       ` Andreas Röhler
2016-06-20 20:04       ` Eli Zaretskii
2016-06-21  6:14         ` Andreas Röhler
2016-06-21 12:50           ` Eli Zaretskii
2016-06-21 13:07             ` Andreas Röhler
2016-06-21 15:13               ` Eli Zaretskii
2016-06-21 13:31             ` Drew Adams
2016-06-21 15:16               ` Eli Zaretskii
2016-06-22  5:23             ` Fwd: " Andreas Röhler
2016-07-06 21:21               ` John Wiegley
2016-07-06 21:51                 ` Dmitry Gutov
2016-07-06 23:31                   ` Drew Adams
2016-07-07  8:00                     ` Andreas Röhler
2016-06-21 13:25           ` Drew Adams
     [not found]   ` <<<8337o79arh.fsf@gnu.org>
     [not found]     ` <<0e2c9c67-12a2-4712-92d2-e3c204f46838@default>
     [not found]       ` <<83twgn7hjx.fsf@gnu.org>
2016-06-20 23:34         ` Drew Adams
2016-06-20 23:59           ` Noam Postavsky
2016-06-21  0:47             ` Drew Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=05f0b24b-1a52-4fa4-9f22-f34f5ed33556@default \
    --to=drew.adams@oracle.com \
    --cc=9300@debbugs.gnu.org \
    --cc=dgutov@yandex.ru \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.