all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Vitalie Spinu <spinuvit@gmail.com>, emacs-devel@gnu.org
Subject: Re: Bad moves with xref-find-definitions
Date: Sat, 25 Apr 2015 22:01:47 +0300	[thread overview]
Message-ID: <553BE49B.20302@yandex.ru> (raw)
In-Reply-To: <87h9s6c27z.fsf@gmail.com>

Hi there,

On 04/23/2015 06:07 PM, Vitalie Spinu wrote:

> There has been a breaking change in UI with respect to find definition
> functionality. I am all for generic interface but IMO there is no reason
> to break standard Emacs interaction mechanism in favor for some not that
> well thought UI borrowed from SLIME.

SLIME has plenty of users who find the approach convenient. You should 
notice that in both CIDER discussions you've referenced that opinion has 
also been expressed.

When discussing the options for the new UI to replace `find-tag', both 
initial proposals also opted not to prompt by default [1][2]. And this 
is the first complaint we've received about that aspect, in the four 
months since xref had been introduced.

>   1) `find-tag` (previously bound to M-.) was prompting for a symbol
>       before jumping to the definition. The symbol at point was the
>       default. On the expense of one additional RET this was very
>       convenient because it leaves the possibility to jump to a different
>       symbol and also saves you from useless navigation to a symbol when
>       symbol is not directly under the cursor. The desired symbol might
>       not be visible, or even present in current buffer.

Since you're usually intent on typing out the symbol name, pressing 
`C-u' before that shouldn't make a lot of difference. On the other hand, 
when "jump to the symbol at point" is a frequent operation, it makes 
sense to optimize it.

>       Now, "xref-find-definitions" encourages you to navigate to a symbol
>       by disrupting the flow twice. Once, when you navigate to a symbol,
>       and often for the second time when you need to go back to the
>       editing after you saw the definition. This just fosters a bad habit
>       of tracking what you read with a cursor. It just cannot be right.

I don't know if it's a bad habit. Apparently, it's a common one.

>       Needless to say that most other functionality in Emacs does ask for
>       completion before performing an action (documentation, find-file
>       etc).

In my view, "jump to the thing at point" is a different kind of 
operation (and it can work with symbols, file paths, etc).

It also has correspondence in other editors: Ctrl-] in Vim, or 
Ctrl+Click in IDEs.

>       Having an option to *not* navigate to symbol is very useful and
>       Emacs was recognizing this need all this time. Why would you change
>       this now?

The question could as well be, why wasn't it changed sooner. Anyway, 
this behavior can be customizable, like suggested by Michael Griffiths 
in the second CIDER discussion.

But while you're only person requesting it, you can modify the current 
behavior trivially with `advice-add'.

>       Etags is still very useful even with dynamic languages. For example
>       the language tool might not load all the files in current
>       project/directory, or you might intentionally keep some code in
>       non-project directories. You might also define your tags for a
>       bunch of other related projects which you want to access from the
>       current project.

`completion-at-point-functions' defaults to 
`'(tags-completion-at-point-function)'. Are you also worried about a 
major mode overriding it? That's the whole point of adding this kind of 
variable.

And if by any chance the major mode does a poor job, you can use 
xxx-mode-hook to override it back. In this case, there already exists 
`xref-etags-mode', because of a prior request.

>       Now, when "M-." is gone, if the language re-defines
>       `xref-find-function` how do I access tags? Do I need to bind a new
>       global key for `find-tag` command?

You can also add a separate binding for it. And if/when `find-tag' goes 
away, you can use that binding for a new command wrapping 
`xref-find-definitions'.

By the way, it seems I've forgot to declare `find-tag' obsolete.

> There has been a lengthy discussion on Cider issue tracker to change the
> behavior borrowed from SLIME into standard emacs UI [1][2]. Once that
> was changed, emacs itself seems to move into wrong ways.

Maybe the fact that Emacs currently behaves in a certain some way is not 
always a bullet-proof argument in its favor.

[1] http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01302.html
[2] http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg01684.html



  parent reply	other threads:[~2015-04-25 19:01 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-23 15:07 Bad moves with xref-find-definitions Vitalie Spinu
2015-04-25 14:24 ` Stefan Monnier
2015-04-25 16:25   ` Dmitry Gutov
2015-04-25 17:42   ` Vitalie Spinu
2015-04-25 18:49     ` Vitalie Spinu
2015-04-25 19:07       ` Dmitry Gutov
2015-04-25 18:56     ` João Távora
2015-04-25 23:50       ` Dmitry Gutov
2015-04-26 11:51         ` xref backends for elisp-related modes Was: " João Távora
2015-04-26 13:56           ` Dmitry Gutov
2015-04-26 14:51           ` Eli Zaretskii
2015-04-28 11:06             ` Vitalie Spinu
2015-04-28 11:41               ` João Távora
2015-04-28 11:59                 ` Vitalie Spinu
2015-04-28 15:17                   ` Eli Zaretskii
2015-04-28 15:45                     ` Vitalie Spinu
2015-04-28 16:01                       ` Eli Zaretskii
2015-04-28 13:27                 ` Stefan Monnier
2015-04-28 21:28                   ` Dmitry Gutov
2015-04-29 12:35                     ` Vitalie Spinu
2015-04-29 15:45                     ` Eli Zaretskii
2015-04-28 15:15               ` Eli Zaretskii
2015-04-28 15:47                 ` Vitalie Spinu
2015-04-28 16:03                   ` Eli Zaretskii
2015-04-29  6:55               ` Helmut Eller
2015-04-29 12:40                 ` Vitalie Spinu
2015-04-29 13:01                   ` Helmut Eller
2015-04-29 15:30                     ` Vitalie Spinu
2015-04-29 17:09                       ` Dmitry Gutov
2015-04-29 12:47                 ` Dmitry Gutov
2015-04-29 13:04                   ` Helmut Eller
2015-04-29 13:12                     ` Dmitry Gutov
2015-04-27  2:20           ` Stefan Monnier
2015-04-25 19:11     ` Dmitry Gutov
2015-04-25 20:43       ` Vitalie Spinu
2015-04-26  3:37         ` Dmitry Gutov
2015-04-26  6:38           ` Bozhidar Batsov
2015-04-26 18:41             ` Dmitry Gutov
2015-04-27 19:36               ` Bozhidar Batsov
2015-04-28  1:23                 ` Dmitry Gutov
2015-04-28 11:30               ` Vitalie Spinu
2015-04-26 10:44           ` Vitalie Spinu
2015-04-26 13:14             ` Vitalie Spinu
2015-04-26 15:09             ` Dmitry Gutov
2015-04-26 16:23               ` Vitalie Spinu
2015-04-26 17:51                 ` Dmitry Gutov
2015-04-26 20:56                   ` Vitalie Spinu
2015-04-27 21:57                     ` Dmitry Gutov
2015-04-26  3:34     ` Stefan Monnier
2015-04-26 11:31       ` Vitalie Spinu
2015-04-26 14:50         ` Eli Zaretskii
2015-04-26 15:12           ` Dmitry Gutov
2015-04-26 15:32             ` Eli Zaretskii
2015-04-26 15:20         ` Dmitry Gutov
2015-04-26 16:01           ` Vitalie Spinu
2015-04-26 17:26             ` Dmitry Gutov
2015-04-27  2:26         ` Stefan Monnier
2015-04-25 19:01 ` Dmitry Gutov [this message]
2015-04-25 20:34   ` Vitalie Spinu
2015-04-25 21:44     ` Vitalie Spinu
2015-04-26  0:20     ` Dmitry Gutov
2015-04-26  0:28       ` Dmitry Gutov
2015-04-28 15:31       ` Vitalie Spinu

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=553BE49B.20302@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=spinuvit@gmail.com \
    /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.