unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Philip K." <philipk@posteo.net>
To: Gregory Heytings <gregory@heytings.org>
Cc: emacs-devel@gnu.org
Subject: Re: PROPOSAL: Repurpose one key and reserve it for third-party packages
Date: Wed, 10 Feb 2021 00:18:54 +0100	[thread overview]
Message-ID: <87tuqk6d9d.fsf@posteo.net> (raw)
In-Reply-To: <8ed9b43502ae9a36b057@heytings.org> (Gregory Heytings's message of "Tue, 09 Feb 2021 20:39:53 +0000")

[-- Attachment #1: Type: text/plain, Size: 4298 bytes --]

Gregory Heytings <gregory@heytings.org> writes:

>>> When such packages need to bind a command to a key, they can (1)
>>> either suggest users to bind it to a key reserved for users (for
>>> example, org-mode suggests to globally bind "C-c c" to
>>> org-capture), or (2) bind it to a key currently unused by Emacs
>>> (for example, Magit binds "C-x g" to magit-status in buffers
>>> visiting a file in a Git repository).
>>>
>>> Neither of these solutions are optimal: (1) requires an explicit
>>> configuration by the user, something which might confuse newcomers,
>>> and which other users might not want to do because they already use
>>> the keys reserved for users for other purposes, and (2) might
>>> conflict with the evolution of Emacs when one or more commands are
>>> bound to a yet unused key.
>>
>> I don't think this is a good idea, because situation (1) is good,
>> actually.  Configuring a package, that provides a command as it's 
>> interface, should be done by binding it to a key reserved for
>> users. Just like how configuring a minor mode is done by adding it
>> to a hook or a major mode by adding it to auto-mode-alist.
>>
>
> Situation (1) might be good in theory, it was probably good twenty
> years ago, but at least nowadays it is, in practice, not good.  What
> most users do is that they install third-party packages through their
> distro package manager, or through Elpa or Melpa, and they just expect
> / would like it to work.  That's what would happen when you install
> extension packages in most (if not all) other software (editors,
> browsers, ...): you don't have to manually fiddle with configuration
> files to make them work.

If I install ffmpeg via apt on a Debian system, I expect it to work, in
the sense that I can invoke the command from the terminal whenever I
want to use it.  I don't think the analogy works for browsers, since
add-ons are usually filters or added to right-click menus.  I don't know
enough about other extensible editors, but if they do too-smart-for-me
guessing, that's probably why I don't use them.

What might be interesting would be something like the gnu-elpa
package[0], or something that goes in the other direction, where a
package can recommend a keybinding, hook, etc. and "automatically"
configure itself if the user agrees.

The problem I see is that key-bindings are usually user configuration,
and e.g. Magit *works* without them. I can do M-x magit-status, right
after installing it. No extra configuration necessary. But if I want to
have it easier, it's easy to add.

> It's probably not without reasons that packages such as Magit bind
> keys globally.

AFAIK this was discussed in [1], but I don't get it, and I think it was
a bad decision.

>>
>> If you ask me, packages should try to minimize change the
>> environment when they are installed, as I've argued in [0].  In
>> other words, package-install shouldn't have any side-effects, beyond
>> installing a package.
>>
>
> That's not what most users expect.  When you install a package, you
> just expect it to work.  If they install a package to edit, say,
> Python code, they expect it will be used the next time they open a .py
> file.  If they install Magit, they expect it will work when they open
> a file in a git repository.  If they install Ivy, they expect it will
> take over C-x C-f, C-x b, and so forth.

I think Ivy is a good example where this should *not* be the case,
because it changes the user-interface that can be confusing. Major modes
might be ok, but the edge-cases is where it's critical: Let's say there
were two third-party packages for perl and prolog. It's common for both
to use the ".pl" extension, but which should get it. If I have been
using perl for a while, and I install prolog, should the new package
just "steal" the extension? Same goes for key-bindings. This should not
be done automatically, and reserving a name-space to solve this issue is
the wrong approach.

But setting that aside, I think that this expectation is just "wrong".
Packaging doesn't do configuration, and we shouldn't encourage this
misunderstanding. What works for some, breaks stuff for other people,
and that should be respected.

[0] http://elpa.gnu.org/packages/gnu-elpa.html
[1] https://github.com/magit/magit/pull/4237

-- 
	Philip K.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 658 bytes --]

  parent reply	other threads:[~2021-02-09 23:18 UTC|newest]

Thread overview: 93+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-07 22:05 PROPOSAL: Repurpose one key and reserve it for third-party packages Gregory Heytings
2021-02-08  0:13 ` Ergus
2021-02-08  2:57 ` Jorge Javier Araya Navarro
2021-02-08  3:46 ` Richard Stallman
2021-02-08  7:20   ` Stefan Kangas
2021-02-08 14:58     ` Lars Ingebrigtsen
2021-02-08 21:00       ` Gregory Heytings
2021-02-08 21:33       ` Stefan Monnier
2021-02-09  8:13         ` Lars Ingebrigtsen
2021-02-09 16:54           ` Sean Whitton
2021-02-09 17:13             ` Lars Ingebrigtsen
2021-02-09 17:43             ` Eli Zaretskii
2021-02-09 21:21               ` Sean Whitton
2021-02-10 21:43                 ` Bindings for setting faces (was: PROPOSAL: Repurpose one key and reserve it for third-party packages) Kévin Le Gouguec
2021-02-09 18:37             ` PROPOSAL: Repurpose one key and reserve it for third-party packages Stefan Monnier
2021-02-08 22:45       ` Stefan Kangas
2021-02-08 15:45     ` Thibaut Verron
2021-02-08 23:01       ` Stefan Kangas
2021-02-09  3:20         ` [External] : " Drew Adams
2021-02-09  9:13         ` Simen Heggestøyl
2021-02-09  9:30         ` Juri Linkov
2021-02-09 13:01           ` Gregory Heytings
2021-02-08 21:00     ` Gregory Heytings
2021-02-09  6:03     ` Richard Stallman
2021-02-08 12:36   ` Alan Mackenzie
2021-02-08 21:00   ` Gregory Heytings
2021-02-08  4:52 ` Robin Tarsiger
2021-02-08  8:41   ` Thibaut Verron
2021-02-08 17:07     ` Robin Tarsiger
2021-02-11 12:59     ` Arthur Miller
2021-02-08 21:00   ` Gregory Heytings
2021-02-09  7:42     ` Yuri Khan
2021-02-09  8:23       ` Gregory Heytings
2021-02-08 23:14   ` Stefan Monnier
2021-02-09  8:23     ` Gregory Heytings
2021-02-08 12:42 ` Augusto Stoffel
2021-02-08 21:00   ` Gregory Heytings
2021-02-08 14:54 ` Dmitry Gutov
2021-02-08 21:00   ` Gregory Heytings
2021-02-08 17:59 ` Sean Whitton
2021-02-08 22:40   ` Eric Abrahamsen
2021-02-09 16:45     ` Sean Whitton
2021-02-10  5:28       ` Richard Stallman
2021-02-10  9:29         ` Thibaut Verron
2021-02-11 13:37           ` Richard Stallman
2021-02-11 13:52             ` Thibaut Verron
2021-02-10 10:42         ` Alfred M. Szmidt
2021-02-10 11:35           ` Thibaut Verron
2021-02-10 12:59             ` Alfred M. Szmidt
2021-02-10 13:09             ` vc-magit mode (was: Re: PROPOSAL: Repurpose one key and reserve it for third-party packages) Alfred M. Szmidt
2021-02-10 13:25               ` Thibaut Verron
2021-02-10 13:34               ` vc-magit mode Dmitry Gutov
2021-02-10 15:33               ` vc-magit mode (was: Re: PROPOSAL: Repurpose one key and reserve it for third-party packages) Eli Zaretskii
2021-02-10 16:47                 ` Alfred M. Szmidt
2021-02-10 17:22                   ` Eli Zaretskii
2021-02-11 13:37           ` PROPOSAL: Repurpose one key and reserve it for third-party packages Richard Stallman
2021-02-11 14:38             ` Stefan Kangas
2021-02-11 15:13               ` Robert Pluim
2021-02-11 16:08                 ` Stefan Monnier
2021-02-12  8:21                   ` Alfred M. Szmidt
2021-02-12  8:36                     ` Robert Pluim
2021-02-12 15:11                       ` Alfred M. Szmidt
2021-02-13  3:26                       ` Richard Stallman
2021-02-10 11:07         ` Gregory Heytings
2021-02-10 13:00           ` Alfred M. Szmidt
2021-02-10 13:59             ` Gregory Heytings
2021-02-10 14:10               ` Alfred M. Szmidt
2021-02-10 14:51                 ` Gregory Heytings
2021-02-10 15:12                   ` Alfred M. Szmidt
2021-02-10 15:23                     ` Gregory Heytings
2021-02-10 16:35               ` [External] : " Drew Adams
2021-02-10 16:35             ` Drew Adams
2021-02-10 17:05               ` Stefan Monnier
2021-02-11 13:37           ` Richard Stallman
2021-02-11 13:55             ` Gregory Heytings
2021-02-12  9:40       ` Jean Louis
2021-02-08 20:32 ` Ulrich Mueller
2021-02-08 21:00   ` Gregory Heytings
2021-02-08 21:37     ` Ulrich Mueller
2021-02-08 22:00       ` Gregory Heytings
2021-02-09 16:57       ` Sean Whitton
2021-02-09 17:19         ` Gregory Heytings
2021-02-09 17:59           ` Ulrich Mueller
2021-02-09 18:24             ` Gregory Heytings
2021-02-09 18:19           ` Thibaut Verron
2021-02-09 19:16             ` Gregory Heytings
2021-02-09 19:28               ` Thibaut Verron
2021-02-09 20:15                 ` Gregory Heytings
2021-02-09 19:47               ` Stefan Monnier
2021-02-09 22:19             ` Gregory Heytings
2021-02-09 21:34           ` Sean Whitton
     [not found] ` <8735y56naf.fsf@posteo.net>
     [not found]   ` <8ed9b43502ae9a36b057@heytings.org>
2021-02-09 23:18     ` Philip K. [this message]
2021-02-10 11:07       ` Gregory Heytings

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=87tuqk6d9d.fsf@posteo.net \
    --to=philipk@posteo.net \
    --cc=emacs-devel@gnu.org \
    --cc=gregory@heytings.org \
    /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 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).