* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion @ 2023-01-03 19:05 Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-03 20:14 ` Drew Adams ` (4 more replies) 0 siblings, 5 replies; 14+ messages in thread From: Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-03 19:05 UTC (permalink / raw) To: 60527 Package: Emacs Version: 30.0.50 I wish the SPC binding to `minibuffer-complete-word` would go because it makes it hard to type SPC in the minibuffer whenever there's completion. Typing a SPC in a "minibuffer with completion" can be needed when the things we want to complete contains a SPC character (e.g. file names, which is why we disable that SPC binding when completing file names), but also when using completion styles like `orderless` which make the use of a SPC character to specify how to select the completion candidates. So my favorite option is indeed to simply remove this binding. Those few users who like it and use it (probably long-time users of Emacs) could easily get it back with: (define-key minibuffer-local-completion-map " " 'minibuffer-complete-word) Another option is to change `minibuffer-complete-word` so that instead of beeping "No match", it inserts a SPC when there's no completion and `require-match` is nil (after checking that the command was invoked via SPC). Yet another option would be to let callers of `completing-read` indicate that it's likely the users will sometimes want to type a SPC character for this specific minibuffer input (i.e. `completing-read` would then use a map like `minibuffer-local-filename-completion-map`). Currently packages which want to use `completing-read` to let the users enter a string that will often contain spaces are reduced the either telling their users "Add this `define-key` thingy in your .emacs because the defaults suck" or having to use a `minibuffer-with-setup-hook` workaround that forcefully rebinds SPC during that minibuffer session, which may be the wrong thing to do if SPC was binding to something else than `minibuffer-complete-word`. Both of those options are undesirable, IMO. We should instead improve the defaults to make such recommendations and workarounds unnecessary. Stefan In GNU Emacs 30.0.50 (build 2, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars) of 2023-01-01 built on pastel Repository revision: a1dce171667209f9dc5b63fd1cf9a067d8ab419a Repository branch: work Windowing system distributor 'The X.Org Foundation', version 11.0.12011000 System Description: Debian GNU/Linux 11 (bullseye) Configured using: 'configure -C --enable-checking --enable-check-lisp-object-type --with-modules --with-cairo --with-tiff=ifavailable 'CFLAGS=-Wall -g3 -Og -Wno-pointer-sign' PKG_CONFIG_PATH=/home/monnier/lib/pkgconfig' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LANG: fr_CH.UTF-8 locale-coding-system: utf-8-unix Major mode: InactiveMinibuffer Minor modes in effect: server-mode: t electric-pair-mode: t global-reveal-mode: t reveal-mode: t auto-insert-mode: t savehist-mode: t minibuffer-electric-default-mode: t global-compact-docstrings-mode: t global-corfu-mode: t url-handler-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t global-prettify-symbols-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/monnier/src/emacs/nongnu/packages/org-contrib/org-contrib-autoloads hides /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/org-contrib-autoloads /home/monnier/src/emacs/nongnu/packages/php-mode/php-mode-autoloads hides /home/monnier/src/emacs/nongnu/packages/php-mode/lisp/php-mode-autoloads /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/ob-arduino hides /home/monnier/src/emacs/nongnu/packages/arduino-mode/ob-arduino /home/monnier/src/emacs/nongnu/packages/stylus-mode/jade-mode hides /home/monnier/src/emacs/nongnu/packages/jade-mode/jade-mode /home/monnier/src/emacs/nongnu/packages/stylus-mode/sws-mode hides /home/monnier/src/emacs/nongnu/packages/jade-mode/sws-mode /home/monnier/src/emacs/nongnu/packages/stylus-mode/stylus-mode hides /home/monnier/src/emacs/nongnu/packages/jade-mode/stylus-mode /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-psql hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-psql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-mysql hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-mysql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-pg hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-pg /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-builtin hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-sqlite-builtin /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-sqlite /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-compiler hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-compiler /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-module hides /home/monnier/src/emacs/nongnu/packages/emacsql-mysql/emacsql-sqlite-module /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-psql hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-psql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-mysql hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-mysql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-pg hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-pg /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-builtin hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-sqlite-builtin /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-sqlite /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-compiler hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-compiler /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-module hides /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite/emacsql-sqlite-module /home/monnier/src/emacs/nongnu/packages/notmuch/notmuch-autoloads hides /home/monnier/src/emacs/nongnu/packages/notmuch/emacs/notmuch-autoloads /home/monnier/src/emacs/nongnu/packages/magit/magit-autoloads hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/magit-autoloads /home/monnier/src/emacs/nongnu/packages/magit/git-commit-autoloads hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/git-commit-autoloads /home/monnier/src/emacs/nongnu/packages/magit/magit-pkg hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/magit-pkg /home/monnier/src/emacs/nongnu/packages/magit/magit-section-autoloads hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/magit-section-autoloads /home/monnier/src/emacs/nongnu/packages/magit/git-commit-pkg hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/git-commit-pkg /home/monnier/src/emacs/nongnu/packages/magit/magit-section-pkg hides /home/monnier/src/emacs/nongnu/packages/magit/lisp/magit-section-pkg /home/monnier/src/emacs/nongnu/packages/pdf-tools/pdf-tools-autoloads hides /home/monnier/src/emacs/nongnu/packages/pdf-tools/lisp/pdf-tools-autoloads /home/monnier/src/emacs/nongnu/packages/geiser-kawa/geiser-kawa-autoloads hides /home/monnier/src/emacs/nongnu/packages/geiser-kawa/elisp/geiser-kawa-autoloads /home/monnier/src/emacs/nongnu/packages/with-editor/with-editor-autoloads hides /home/monnier/src/emacs/nongnu/packages/with-editor/lisp/with-editor-autoloads /home/monnier/src/emacs/nongnu/packages/geiser/geiser-autoloads hides /home/monnier/src/emacs/nongnu/packages/geiser/elisp/geiser-autoloads /home/monnier/src/emacs/nongnu/packages/subed/subed-autoloads hides /home/monnier/src/emacs/nongnu/packages/subed/subed/subed-autoloads /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-psql hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-psql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-mysql hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-mysql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-pg hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-pg /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-builtin hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-sqlite-builtin /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-sqlite /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-compiler hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-compiler /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-module hides /home/monnier/src/emacs/nongnu/packages/emacsql-psql/emacsql-sqlite-module /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-psql hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-psql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-mysql hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-mysql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-pg hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-pg /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-builtin hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-sqlite-builtin /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-sqlite /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-compiler hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-compiler /home/monnier/src/emacs/nongnu/packages/emacsql-sqlite-builtin/emacsql-sqlite-module hides /home/monnier/src/emacs/nongnu/packages/emacsql/emacsql-sqlite-module /home/monnier/src/emacs/nongnu/packages/flx-ido/flx-ido hides /home/monnier/src/emacs/nongnu/packages/flx/flx-ido /home/monnier/src/emacs/nongnu/packages/flx-ido/flx hides /home/monnier/src/emacs/nongnu/packages/flx/flx /home/monnier/src/emacs/nongnu/packages/mastodon/mastodon-autoloads hides /home/monnier/src/emacs/nongnu/packages/mastodon/lisp/mastodon-autoloads /home/monnier/src/emacs/elpa/packages/bbdb/bbdb-autoloads hides /home/monnier/src/emacs/elpa/packages/bbdb/lisp/bbdb-autoloads /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/org-notify hides /home/monnier/src/emacs/elpa/packages/org-notify/org-notify /home/monnier/src/emacs/elpa/packages/srht/srht-autoloads hides /home/monnier/src/emacs/elpa/packages/srht/lisp/srht-autoloads /home/monnier/src/emacs/elpa/packages/transient/transient-autoloads hides /home/monnier/src/emacs/elpa/packages/transient/lisp/transient-autoloads /home/monnier/src/emacs/nongnu/packages/paredit/test hides /home/monnier/src/emacs/elpa/packages/num3-mode/test /home/monnier/src/emacs/elpa/packages/gpr-query/gpr-query hides /home/monnier/src/emacs/elpa/packages/ada-mode/gpr-query /home/monnier/src/emacs/elpa/packages/gpr-query/prj hides /home/monnier/src/emacs/elpa/packages/ada-mode/prj /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/org-contacts hides /home/monnier/src/emacs/elpa/packages/org-contacts/org-contacts /home/monnier/src/emacs/elpa/packages/taxy-magit-section/taxy-magit-section hides /home/monnier/src/emacs/elpa/packages/taxy/taxy-magit-section /home/monnier/src/emacs/nongnu/packages/forth-mode/build hides /home/monnier/src/emacs/elpa/packages/lentic/build /home/monnier/src/emacs/elpa/packages/realgud-lldb/cask-install hides /home/monnier/src/emacs/elpa/packages/realgud-trepan-ni/cask-install /home/monnier/src/emacs/nongnu/packages/mentor/url-scgi hides /home/monnier/src/emacs/elpa/packages/url-scgi/url-scgi /home/monnier/src/emacs/elpa/packages/ada-mode/gpr-mode hides /home/monnier/src/emacs/elpa/packages/gpr-mode/gpr-mode /home/monnier/src/emacs/elpa/packages/ada-mode/gpr-skel hides /home/monnier/src/emacs/elpa/packages/gpr-mode/gpr-skel /home/monnier/src/emacs/elpa/packages/ada-mode/gpr-process hides /home/monnier/src/emacs/elpa/packages/gpr-mode/gpr-process /home/monnier/src/emacs/elpa/packages/ada-mode/gpr-indent-user-options hides /home/monnier/src/emacs/elpa/packages/gpr-mode/gpr-indent-user-options /home/monnier/src/emacs/elpa/packages/ada-mode/gnat-core hides /home/monnier/src/emacs/elpa/packages/wisi/gnat-core /home/monnier/src/emacs/nongnu/packages/paredit/test hides /home/monnier/src/emacs/elpa/packages/easy-kill/test /home/monnier/src/emacs/elpa/packages/use-package/use-package-tests hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-tests /home/monnier/src/emacs/elpa/packages/use-package/use-package-delight hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-delight /home/monnier/src/emacs/elpa/packages/use-package/use-package-diminish hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-diminish /home/monnier/src/emacs/elpa/packages/use-package/bind-chord hides /home/monnier/src/emacs/elpa/packages/bind-key/bind-chord /home/monnier/src/emacs/elpa/packages/use-package/use-package-lint hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-lint /home/monnier/src/emacs/elpa/packages/use-package/use-package-core hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-core /home/monnier/src/emacs/elpa/packages/use-package/use-package-ensure hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-ensure /home/monnier/src/emacs/elpa/packages/use-package/use-package-chords hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-chords /home/monnier/src/emacs/elpa/packages/use-package/bind-key hides /home/monnier/src/emacs/elpa/packages/bind-key/bind-key /home/monnier/src/emacs/elpa/packages/use-package/use-package-chords-tests hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-chords-tests /home/monnier/src/emacs/elpa/packages/use-package/use-package-jump hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-jump /home/monnier/src/emacs/elpa/packages/use-package/use-package hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package /home/monnier/src/emacs/elpa/packages/use-package/use-package-bind-key hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-bind-key /home/monnier/src/emacs/elpa/packages/use-package/use-package-ensure-system-package hides /home/monnier/src/emacs/elpa/packages/bind-key/use-package-ensure-system-package /home/monnier/src/emacs/elpa/packages/realgud-lldb/cask-install hides /home/monnier/src/emacs/elpa/packages/realgud/cask-install /home/monnier/src/emacs/elpa/packages/hydra/hydra-test hides /home/monnier/src/emacs/elpa/packages/lv/hydra-test /home/monnier/src/emacs/elpa/packages/hydra/hydra hides /home/monnier/src/emacs/elpa/packages/lv/hydra /home/monnier/src/emacs/elpa/packages/hydra/lv hides /home/monnier/src/emacs/elpa/packages/lv/lv /home/monnier/src/emacs/elpa/packages/hydra/hydra-ox hides /home/monnier/src/emacs/elpa/packages/lv/hydra-ox /home/monnier/src/emacs/elpa/packages/hydra/hydra-examples hides /home/monnier/src/emacs/elpa/packages/lv/hydra-examples /home/monnier/src/emacs/elpa/packages/embark-consult/embark-consult hides /home/monnier/src/emacs/elpa/packages/embark/embark-consult /home/monnier/src/emacs/elpa/packages/embark-consult/embark-org hides /home/monnier/src/emacs/elpa/packages/embark/embark-org /home/monnier/src/emacs/elpa/packages/embark-consult/embark hides /home/monnier/src/emacs/elpa/packages/embark/embark /home/monnier/src/emacs/elpa/packages/embark-consult/avy-embark-collect hides /home/monnier/src/emacs/elpa/packages/embark/avy-embark-collect /home/monnier/src/emacs/elpa/packages/ess/ess-autoloads hides /home/monnier/src/emacs/elpa/packages/ess/lisp/ess-autoloads /home/monnier/src/emacs/elpa/packages/transient/lisp/transient hides /home/monnier/src/emacs/work/lisp/transient /home/monnier/src/emacs/elpa/packages/use-package/use-package-delight hides /home/monnier/src/emacs/work/lisp/use-package/use-package-delight /home/monnier/src/emacs/elpa/packages/use-package/use-package-diminish hides /home/monnier/src/emacs/work/lisp/use-package/use-package-diminish /home/monnier/src/emacs/elpa/packages/use-package/use-package-lint hides /home/monnier/src/emacs/work/lisp/use-package/use-package-lint /home/monnier/src/emacs/elpa/packages/use-package/use-package-core hides /home/monnier/src/emacs/work/lisp/use-package/use-package-core /home/monnier/src/emacs/elpa/packages/use-package/use-package-ensure hides /home/monnier/src/emacs/work/lisp/use-package/use-package-ensure /home/monnier/src/emacs/elpa/packages/use-package/bind-key hides /home/monnier/src/emacs/work/lisp/use-package/bind-key /home/monnier/src/emacs/elpa/packages/use-package/use-package-jump hides /home/monnier/src/emacs/work/lisp/use-package/use-package-jump /home/monnier/src/emacs/elpa/packages/use-package/use-package hides /home/monnier/src/emacs/work/lisp/use-package/use-package /home/monnier/src/emacs/elpa/packages/use-package/use-package-bind-key hides /home/monnier/src/emacs/work/lisp/use-package/use-package-bind-key /home/monnier/src/emacs/elpa/packages/use-package/use-package-ensure-system-package hides /home/monnier/src/emacs/work/lisp/use-package/use-package-ensure-system-package /home/monnier/src/emacs/elpa/packages/eglot/eglot hides /home/monnier/src/emacs/work/lisp/progmodes/eglot /home/monnier/src/emacs/elpa/packages/csharp-mode/csharp-mode hides /home/monnier/src/emacs/work/lisp/progmodes/csharp-mode /home/monnier/src/emacs/nongnu/packages/lua-mode/lua-mode hides /home/monnier/src/emacs/work/lisp/progmodes/lua-mode /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/ob-julia hides /home/monnier/src/emacs/work/lisp/org/ob-julia /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/ol-man hides /home/monnier/src/emacs/work/lisp/org/ol-man /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/ox-koma-letter hides /home/monnier/src/emacs/work/lisp/org/ox-koma-letter /home/monnier/src/emacs/elpa/packages/cl-generic/cl-generic hides /home/monnier/src/emacs/work/lisp/emacs-lisp/cl-generic /home/monnier/.emacs.d/elpa/hyperbole-8.0.0/set hides /home/monnier/src/emacs/work/lisp/emacs-lisp/set /home/monnier/src/emacs/elpa/packages/nadvice/nadvice hides /home/monnier/src/emacs/work/lisp/emacs-lisp/nadvice /home/monnier/src/emacs/elpa/packages/seq/seq hides /home/monnier/src/emacs/work/lisp/emacs-lisp/seq /home/monnier/src/emacs/elpa/packages/cl-lib/cl-lib hides /home/monnier/src/emacs/work/lisp/emacs-lisp/cl-lib /home/monnier/src/emacs/work/lisp/keymap hides /home/monnier/src/emacs/work/lisp/emacs-lisp/keymap /home/monnier/src/emacs/elpa/packages/landmark/landmark hides /home/monnier/src/emacs/work/lisp/obsolete/landmark /home/monnier/src/emacs/elpa/packages/crisp/crisp hides /home/monnier/src/emacs/work/lisp/obsolete/crisp Features: (shadow sort mail-extr emacsbug rect cl-print debug backtrace mule-util autorevert org-eldoc org-element org-persist org-id org-refile avl-tree generator oc-basic ol-eww eww xdg url-queue mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time gnus-spec gnus-int gnus-range gnus-win gnus nnheader range wid-edit ol-docview doc-view filenotify jka-compr image-mode exif ol-bibtex bibtex iso8601 ol-bbdb ol-w3m ol-doi org-link-doi org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete drupal/pcomplete pcomplete org-list org-footnote org-faces org-entities ob-emacs-lisp ob-core ob-eval org-cycle org-table org-keys oc org-loaddefs find-func cal-menu calendar cal-loaddefs gitignore-mode conf-mode vc-fossil vc-backup vc-hg vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc-got log-edit message sendmail yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils mailheader vc-annotate vc-dir ewoc whitespace executable copyright dabbrev shortdoc help-fns radix-tree smerge-mode diff add-log log-view pcvs-util vc misearch multi-isearch vc-git diff-mode easy-mmode vc-dispatcher filecache bug-reference raku-detect server cl-extra time-date flymake-proc flymake project compile text-property-search comint ansi-osc ansi-color ring noutline outline flyspell ispell checkdoc lisp-mnt thingatpt help-mode elec-pair reveal autoinsert savehist minibuf-eldef disp-table compact-docstrings corfu undo-fu-autoloads inkpot-theme-autoloads keycast-autoloads rubocop-autoloads pcmpl-args-autoloads undo-fu-session-autoloads camera-autoloads bash-completion-autoloads flymake-popon-autoloads drupal-mode-autoloads org-superstar-autoloads apache-mode-autoloads dart-mode-autoloads lua-mode-autoloads evil-goggles-autoloads monokai-theme-autoloads cyberpunk-theme-autoloads mpv-autoloads highlight-parentheses-autoloads minibar-autoloads multiple-cursors-autoloads dockerfile-mode-autoloads symbol-overlay-autoloads diff-ansi-autoloads eat-autoloads free-keys-autoloads evil-anzu-autoloads anzu-autoloads tuareg-autoloads caml-autoloads jinja2-mode-autoloads pcre2el-autoloads paredit-autoloads apropospriate-theme-autoloads shellcop-autoloads racket-mode-autoloads pacmacs-autoloads gnuplot-autoloads stylus-mode-autoloads spell-fu-autoloads nginx-mode-autoloads material-theme-autoloads el-mock-autoloads raku-mode-autoloads denote-refs-autoloads arduino-mode-autoloads ede/auto eieio-base guru-mode-autoloads vc-fossil-autoloads jade-mode-autoloads zig-mode-autoloads subatomic-theme-autoloads orgit-autoloads evil-nerd-commenter-autoloads typescript-mode-autoloads why-this-autoloads emacsql-sqlite-builtin-autoloads iwindow-autoloads workroom-autoloads gnu-indent-autoloads buttercup-autoloads evil-numbers-autoloads emacsql-mysql-autoloads git-modes-autoloads with-simulated-input-autoloads evil-indent-plus-autoloads jabber-autoloads emacsql-sqlite-autoloads alect-themes-autoloads geiser-chicken-autoloads sly-autoloads gruvbox-theme-autoloads vcomplete-autoloads editorconfig-autoloads devhelp-autoloads auto-dim-other-buffers-autoloads org-journal-autoloads elpher-autoloads coffee-mode-autoloads blow-autoloads scala-mode-autoloads ample-theme-autoloads htmlize-autoloads meow-autoloads graphql-mode-autoloads wgrep-autoloads markdown-mode-autoloads inf-clojure-autoloads yasnippet-snippets-autoloads autothemer-autoloads moe-theme-autoloads evil-visualstar-autoloads gc-buffers-autoloads org-auto-tangle-autoloads gnu-apl-mode-autoloads geiser-mit-autoloads zenburn-theme-autoloads afternoon-theme-autoloads org-mime-autoloads xkcd-autoloads xah-fly-keys-autoloads testcover-mark-line-autoloads geiser-stklos-autoloads proof-general-autoloads proof-site proof-autoloads flx-ido-autoloads lorem-ipsum-autoloads webpaste-autoloads evil-args-autoloads org-present-autoloads org-drill-autoloads julia-mode-autoloads corfu-terminal-autoloads cycle-at-point-autoloads gotham-theme-autoloads tangotango-theme-autoloads telephone-line-autoloads geiser-gambit-autoloads d-mode-autoloads ws-butler-autoloads nasm-mode-autoloads spacemacs-theme-autoloads opam-switch-mode-autoloads boxquote-autoloads org-tree-slide-autoloads projectile-autoloads nix-mode-autoloads swift-mode-autoloads ujelly-theme-autoloads geiser-gauche-autoloads swsw-autoloads idle-highlight-mode-autoloads flymake-kondor-autoloads hl-block-mode-autoloads web-mode-autoloads j-mode-autoloads notmuch-autoloads inf-ruby-autoloads anti-zenburn-theme-autoloads evil-exchange-autoloads hl-column-autoloads haskell-mode-autoloads geiser-guile-autoloads popon-autoloads evil-lisp-state-autoloads better-jumper-autoloads annotate-autoloads doc-show-inline-autoloads gruber-darker-theme-autoloads tablist-autoloads rainbow-delimiters-autoloads mentor-autoloads xml-rpc-autoloads textile-mode-autoloads bison-mode-autoloads rfc-mode-autoloads geiser-chibi-autoloads sass-mode-autoloads haml-mode-autoloads systemd-autoloads rust-mode-autoloads elixir-mode-autoloads writegood-mode-autoloads cdlatex-autoloads haskell-tng-mode-autoloads geiser-kawa-autoloads cider-autoloads parseedn-autoloads parseclj-autoloads yaml-mode-autoloads evil-matchit-autoloads oblivion-theme-autoloads recomplete-autoloads forth-mode-autoloads engine-mode-autoloads scroll-on-jump-autoloads geiser-chez-autoloads sesman-autoloads geiser-racket-autoloads geiser-autoloads helm-autoloads popup-autoloads helm-core-autoloads scroll-on-drag-autoloads toc-org-autoloads subed-autoloads prescient-autoloads focus-autoloads edit-indirect-autoloads sweeprolog-autoloads visual-fill-column-autoloads emacsql-psql-autoloads emacsql-autoloads go-mode-autoloads dracula-theme-autoloads solarized-theme-autoloads slime-autoloads macrostep-autoloads kotlin-mode-autoloads flx-autoloads smartparens-autoloads evil-iedit-state-autoloads iedit-autoloads evil-autoloads goto-chg-autoloads crux-autoloads bind-map-autoloads clojure-mode-autoloads idris-mode-autoloads prop-menu-autoloads mastodon-autoloads ement-autoloads gnugo-autoloads detached-autoloads wconf-autoloads json-mode-autoloads ada-ref-man-autoloads memory-usage-autoloads rich-minority-autoloads capf-autosuggest-autoloads rt-liberation-autoloads bbdb-autoloads auto-correct-autoloads tramp-nspawn-autoloads yasnippet-classic-snippets-autoloads elisp-benchmarks-autoloads luwak-autoloads gnus-mock-autoloads fontaine-autoloads vdiff-autoloads omn-mode-autoloads osc-autoloads pspp-mode-autoloads hcel-autoloads mines-autoloads comint-mime-autoloads tiny-autoloads phps-mode-autoloads sql-indent-autoloads ascii-art-to-unicode-autoloads agitate-autoloads vc-hgcmd-autoloads wpuzzle-autoloads nameless-autoloads gle-mode-autoloads crdt-autoloads perl-doc-autoloads ahungry-theme-autoloads nano-modeline-autoloads dired-du-autoloads adjust-parens-autoloads dired-git-info-autoloads polymode-autoloads pyim-basedict-autoloads sxhkdrc-mode-autoloads repology-autoloads ace-window-autoloads easy-escape-autoloads org-notify-autoloads flymake-proselint-autoloads yasnippet-autoloads elsa-autoloads org-translate-autoloads highlight-escape-sequences-autoloads lmc-autoloads counsel-autoloads landmark-autoloads diffview-autoloads validate-autoloads muse-autoloads sql-smie-autoloads code-cells-autoloads jgraph-mode-autoloads multishell-autoloads wcheck-mode-autoloads gcmh-autoloads marginalia-autoloads dts-mode-autoloads ediprolog-autoloads paced-autoloads exwm-autoloads devdocs-autoloads sokoban-autoloads valign-autoloads rnc-mode-autoloads el-search-autoloads stream-autoloads sml-mode-autoloads scanner-autoloads djvu-autoloads expand-region-autoloads poke-mode-autoloads org-modern-autoloads gnu-elpa-keyring-update-autoloads minimap-autoloads plz-autoloads sql-beeline-autoloads cycle-quotes-autoloads lin-autoloads buffer-expose-autoloads midi-kbd-autoloads isearch-mb-autoloads eglot-autoloads f90-interface-browser-autoloads emacspeak-autoloads xclip-autoloads brief-autoloads company-math-autoloads dbus-codegen-autoloads csv-mode-autoloads chess-autoloads svg-tag-mode-autoloads visual-filename-abbrev-autoloads mct-autoloads rcirc-menu-autoloads beacon-autoloads org-remark-autoloads aggressive-indent-autoloads ack-autoloads arbitools-autoloads shelisp-autoloads gpr-query-autoloads ob-haxe-autoloads ebdb-i18n-chn-autoloads vlf-autoloads enwc-autoloads system-packages-autoloads docbook-autoloads notmuch-indicator-autoloads num3-mode-autoloads notes-mode-autoloads trinary-autoloads temp-buffer-browse-autoloads scroll-restore-autoloads html5-schema-autoloads math-symbol-lists-autoloads poke-autoloads gnu-elpa-autoloads gnu-elpa-features vcl-mode-autoloads jarchive-autoloads guess-language-autoloads oauth2-autoloads svg-clock-autoloads org-real-autoloads ol rx org-fold org-fold-core org-compat org-version org-macs format-spec inspector-autoloads treeview-autoloads uni-confusables-autoloads register-list-autoloads excorporate-autoloads url-http-ntlm-autoloads url-auth ada-mode-autoloads fsm-autoloads pq-autoloads multi-mode-autoloads ftable-autoloads crisp-autoloads captain-autoloads cursory-autoloads realgud-node-debug-autoloads diminish-autoloads org-edna-autoloads aumix-mode-autoloads parsec-autoloads coterm-autoloads uniquify-files-autoloads cape-autoloads minibuffer-header-autoloads advice-patch-autoloads org-contacts-autoloads sed-mode-autoloads poker-autoloads wrap-search-autoloads sisu-mode-autoloads sketch-mode-autoloads quarter-plane-autoloads markchars-autoloads setup-autoloads engrave-faces-autoloads pinentry-autoloads sotlisp-autoloads ggtags-autoloads gtags-mode-autoloads hiddenquote-autoloads which-key-autoloads minibuffer-line-autoloads epoch-view-autoloads disk-usage-autoloads rmsbolt-autoloads debbugs-autoloads standard-themes-autoloads vc-got-autoloads ivy-hydra-autoloads hydra-autoloads blist-autoloads ilist-autoloads timerfunctions-autoloads spinner-autoloads smart-yank-autoloads transcribe-autoloads ssh-deploy-autoloads path-iterator-autoloads all-autoloads nano-agenda-autoloads electric-spacing-autoloads tramp-theme-autoloads relint-autoloads slime-volleyball-autoloads ergoemacs-mode-autoloads on-screen-autoloads nlinum-autoloads bug-hunter-autoloads org-transclusion-autoloads nhexl-mode-autoloads auto-overlays-autoloads jumpc-autoloads zones-autoloads shell-quasiquote-autoloads nano-theme-autoloads realgud-lldb-autoloads boxy-headlines-autoloads zuul-autoloads tempel-autoloads delight-autoloads darkroom-autoloads cobol-mode-autoloads visual-fill-autoloads diff-hl-autoloads ampc-autoloads ivy-posframe-autoloads pyim-autoloads xr-autoloads frog-menu-autoloads taxy-magit-section-autoloads taxy-autoloads smalltalk-mode-autoloads prefixed-core-autoloads lentic-server-autoloads lentic-autoloads logos-autoloads dismal-autoloads gited-autoloads sql-cassandra-autoloads kind-icon-autoloads tomelr-autoloads windower-autoloads parser-generator-autoloads javaimp-autoloads triples-autoloads realgud-trepan-ni-autoloads async-autoloads finder-inf orgalist-autoloads compact-docstrings-autoloads altcaps-autoloads tmr-autoloads bluetooth-autoloads dash-autoloads peg-autoloads rcirc-color-autoloads objed-autoloads flylisp-autoloads dict-tree-autoloads undo-tree-autoloads xpm-autoloads denote-autoloads realgud-ipdb-autoloads vcard-autoloads lex-autoloads cpio-mode-autoloads vertico-posframe-autoloads kmb-autoloads gnome-c-style-autoloads websocket-autoloads wisitoken-grammar-mode-autoloads mmm-mode-autoloads topspace-autoloads realgud-jdb-autoloads rainbow-mode-autoloads js2-mode-autoloads ioccur-autoloads osm-autoloads boxy-headings-autoloads shell-command+-autoloads url-scgi-autoloads rbit-autoloads vertico-autoloads company-statistics-autoloads sm-c-mode-autoloads gpr-mode-autoloads gnat-compiler-autoloads wisi-autoloads web-server-autoloads swiper-autoloads trie-autoloads heap-autoloads tNFA-autoloads queue-autoloads vigenere-autoloads package-fixes-autoloads toc-mode-autoloads ebdb-gnorb-autoloads cl-seq gnorb-autoloads ivy-explorer-autoloads buffer-env-autoloads vc-backup-autoloads satchel-autoloads xelb-autoloads cl-generic-autoloads easy-kill-autoloads csharp-mode-autoloads aircon-theme-autoloads loccur-autoloads aggressive-completion-autoloads webfeeder-autoloads boxy-autoloads nftables-mode-autoloads consult-recoll-autoloads bnf-mode-autoloads pabbrev-autoloads leaf-autoloads adaptive-wrap-autoloads doc-toc-autoloads ztree-autoloads use-package-autoloads bind-key-autoloads gpastel-autoloads cpupower-autoloads ef-themes-autoloads transient-cycles-autoloads vundo-autoloads pulsar-autoloads context-coloring-autoloads caps-lock-autoloads persist-autoloads realgud-node-inspect-autoloads realgud-autoloads test-simple-autoloads loc-changes-autoloads eldoc-eval-autoloads psgml-autoloads frame-tabs-autoloads myers-autoloads eev-autoloads names-autoloads kiwix-autoloads request-autoloads greenbar-autoloads rec-mode-autoloads shen-mode-autoloads greader-autoloads orderless-autoloads graphql-autoloads load-relative-autoloads emms-autoloads iterators-autoloads load-dir-autoloads clipboard-collector-autoloads hook-helpers-autoloads other-frame-window-autoloads company-ebdb-autoloads info ebdb-autoloads company-autoloads assess-autoloads m-buffer-autoloads seq-autoloads ivy-avy-autoloads avy-autoloads ivy-autoloads corfu-doc-autoloads corfu-autoloads posframe-autoloads filladapt-autoloads svg-lib-autoloads metar-autoloads cl-lib-autoloads lv-autoloads embark-consult-autoloads consult-autoloads compat-autoloads nadvice-autoloads embark-autoloads windresize-autoloads ess-autoloads ustar-withsub-autoloads rudel-autoloads rudel-backend warnings icons package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source eieio eieio-core cl-macs gv pcase password-cache json subr-x map byte-opt bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray button loaddefs theme-loaddefs oclosure cl-preloaded faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 446004 226855) (symbols 48 32264 176) (strings 32 139470 29573) (string-bytes 1 4602266) (vectors 16 70511) (vector-slots 8 1801395 281279) (floats 8 514 350) (intervals 56 20148 0) (buffers 984 43)) ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-01-03 20:14 ` Drew Adams 2023-01-04 18:17 ` Jean Louis 2023-01-03 22:50 ` Dmitry Gutov ` (3 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Drew Adams @ 2023-01-03 20:14 UTC (permalink / raw) To: Stefan Monnier, 60527@debbugs.gnu.org > I wish the SPC binding to `minibuffer-complete-word` would go because it > makes it hard to type SPC in the minibuffer whenever there's completion. Finally. Bravo - bonne initiative ! > Typing a SPC in a "minibuffer with completion" can be needed when the > things we want to complete contains a SPC character (e.g. file names, > which is why we disable that SPC binding when completing file names), > but also when using completion styles like `orderless` which make the > use of a SPC character to specify how to select the > completion candidates. > > So my favorite option is indeed to simply remove this binding. > Those few users who like it and use it (probably long-time users of > Emacs) could easily get it back with: > > (define-key minibuffer-local-completion-map > " " 'minibuffer-complete-word) > > Another option is to change `minibuffer-complete-word` so that instead > of beeping "No match", it inserts a SPC when there's no completion and > `require-match` is nil (after checking that the command was invoked via > SPC). > > Yet another option would be to let callers of `completing-read` indicate > that it's likely the users will sometimes want to type a SPC character > for this specific minibuffer input (i.e. `completing-read` would then > use a map like `minibuffer-local-filename-completion-map`). > > Currently packages which want to use `completing-read` to let the users > enter a string that will often contain spaces are reduced the either > telling their users "Add this `define-key` thingy in your .emacs because > the defaults suck" or having to use a `minibuffer-with-setup-hook` > workaround that forcefully rebinds SPC during that minibuffer session, > which may be the wrong thing to do if SPC was binding to something else > than `minibuffer-complete-word`. > Both of those options are undesirable, IMO. We should instead improve > the defaults to make such recommendations and workarounds unnecessary. FWIW, Icicles removes `SPC' for word completion by default (since 2005, i.e., nearly the beginning). It puts word completion on a different key (`M-SPC', by default). ____ icicle-word-completion-keys is a variable defined in `icicles-opt.el'. Its value is ([(meta 32)]) Documentation: Key sequences to use for minibuffer prefix word completion. A list of values that each has the same form as a key-sequence argument to `define-key'. It is a list mainly in order to accommodate different keyboards. Because file names, in particular, can contain spaces, some people prefer such a key sequence to be non-printable, such as `M-SPC'. This is the default value in Icicles. But because the spacebar is such a convenient key to hit, other people prefer to use `SPC' for word completion, and to insert a space some other way. The usual way to do that is via `C-q SPC', but command `icicle-insert-a-space' is provided for convenience. You can bind this to `M-SPC', for instance, in `minibuffer-local-completion-map', `minibuffer-local-completion-map', and `minibuffer-local-must-match-map'. You can customize this variable. ____ ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 20:14 ` Drew Adams @ 2023-01-04 18:17 ` Jean Louis 0 siblings, 0 replies; 14+ messages in thread From: Jean Louis @ 2023-01-04 18:17 UTC (permalink / raw) To: Drew Adams; +Cc: 60527@debbugs.gnu.org, Stefan Monnier * Drew Adams <drew.adams@oracle.com> [2023-01-03 23:17]: > FWIW, Icicles removes `SPC' for word completion by > default (since 2005, i.e., nearly the beginning). > It puts word completion on a different key > (`M-SPC', by default). I would prefer this approach, though I don't find completing by word useful. Do you have some example where word by word would be useful? -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-03 20:14 ` Drew Adams @ 2023-01-03 22:50 ` Dmitry Gutov 2023-01-04 3:29 ` Eli Zaretskii 2023-01-04 7:09 ` Kévin Le Gouguec ` (2 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Dmitry Gutov @ 2023-01-03 22:50 UTC (permalink / raw) To: Stefan Monnier, 60527 On 03/01/2023 21:05, Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors wrote: > So my favorite option is indeed to simply remove this binding. > Those few users who like it and use it (probably long-time users of > Emacs) could easily get it back with: > > (define-key minibuffer-local-completion-map > " " 'minibuffer-complete-word) Yes, please. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 22:50 ` Dmitry Gutov @ 2023-01-04 3:29 ` Eli Zaretskii 2023-01-04 12:05 ` Dmitry Gutov 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2023-01-04 3:29 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 60527, monnier > Date: Wed, 4 Jan 2023 00:50:10 +0200 > From: Dmitry Gutov <dgutov@yandex.ru> > > On 03/01/2023 21:05, Stefan Monnier via Bug reports for GNU Emacs, the > Swiss army knife of text editors wrote: > > So my favorite option is indeed to simply remove this binding. > > Those few users who like it and use it (probably long-time users of > > Emacs) could easily get it back with: > > > > (define-key minibuffer-local-completion-map > > " " 'minibuffer-complete-word) > > Yes, please. My preference is for the more-compatible alternatives. It is notoriously non-trivial to figure out minibuffer bindings, so expecting users to do the above is not very friendly. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 3:29 ` Eli Zaretskii @ 2023-01-04 12:05 ` Dmitry Gutov 2023-01-04 14:47 ` Eli Zaretskii 0 siblings, 1 reply; 14+ messages in thread From: Dmitry Gutov @ 2023-01-04 12:05 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 60527, monnier On 04/01/2023 05:29, Eli Zaretskii wrote: > My preference is for the more-compatible alternatives. It is > notoriously non-trivial to figure out minibuffer bindings, so > expecting users to do the above is not very friendly. It's the same for the users who are bothered by this behavior: I stumble over it with certain regularity, but still haven't disabled the SPC binding in my init script. Those those dislike the change, however, will read the necessary invocation in NEWS. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 12:05 ` Dmitry Gutov @ 2023-01-04 14:47 ` Eli Zaretskii 2023-01-04 17:00 ` Dmitry Gutov 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2023-01-04 14:47 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 60527, monnier > Date: Wed, 4 Jan 2023 14:05:37 +0200 > Cc: 60527@debbugs.gnu.org, monnier@iro.umontreal.ca > From: Dmitry Gutov <dgutov@yandex.ru> > > On 04/01/2023 05:29, Eli Zaretskii wrote: > > My preference is for the more-compatible alternatives. It is > > notoriously non-trivial to figure out minibuffer bindings, so > > expecting users to do the above is not very friendly. > > It's the same for the users who are bothered by this behavior: I stumble > over it with certain regularity, but still haven't disabled the SPC > binding in my init script. I didn't say I'm against any change in this behavior. Stefan proposed at least two alternatives that produce basically the same user-facing behavior when SPC is supposed to be interpreted verbatim, so they come very close to the alternative that you like better, but still stop short of breaking someone's muscle memory. > Those those dislike the change, however, will read the necessary > invocation in NEWS. I think you greatly overestimate the number of people who read NEWS, even when they have some reason to look up a specific change there. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 14:47 ` Eli Zaretskii @ 2023-01-04 17:00 ` Dmitry Gutov 2023-01-04 17:16 ` Eli Zaretskii 0 siblings, 1 reply; 14+ messages in thread From: Dmitry Gutov @ 2023-01-04 17:00 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 60527, monnier On 04/01/2023 16:47, Eli Zaretskii wrote: >> Date: Wed, 4 Jan 2023 14:05:37 +0200 >> Cc: 60527@debbugs.gnu.org, monnier@iro.umontreal.ca >> From: Dmitry Gutov <dgutov@yandex.ru> >> >> On 04/01/2023 05:29, Eli Zaretskii wrote: >>> My preference is for the more-compatible alternatives. It is >>> notoriously non-trivial to figure out minibuffer bindings, so >>> expecting users to do the above is not very friendly. >> >> It's the same for the users who are bothered by this behavior: I stumble >> over it with certain regularity, but still haven't disabled the SPC >> binding in my init script. > > I didn't say I'm against any change in this behavior. Stefan proposed > at least two alternatives that produce basically the same user-facing > behavior when SPC is supposed to be interpreted verbatim, so they come > very close to the alternative that you like better, but still stop > short of breaking someone's muscle memory. The first alternative provides sometimes the same, and sometimes different behavior. In particular, when there are valid completions, "SPC" would still perform completion -- something that I don't think many users expect. Especially novices. The second alternative is even more involved, requiring 'completing-read' callers to decide in advance whether the users will want to have SPC insert SPC or perform completion. That's still odd and seems like crossing the proper abstraction layers. The caller might not know the collection contains spaces. And this approach can break established muscle memory just the same, as soon as enough callers start to make this choice. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 17:00 ` Dmitry Gutov @ 2023-01-04 17:16 ` Eli Zaretskii 2023-01-04 17:45 ` Dmitry Gutov 0 siblings, 1 reply; 14+ messages in thread From: Eli Zaretskii @ 2023-01-04 17:16 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 60527, monnier > Date: Wed, 4 Jan 2023 19:00:44 +0200 > Cc: 60527@debbugs.gnu.org, monnier@iro.umontreal.ca > From: Dmitry Gutov <dgutov@yandex.ru> > > On 04/01/2023 16:47, Eli Zaretskii wrote: > > I didn't say I'm against any change in this behavior. Stefan proposed > > at least two alternatives that produce basically the same user-facing > > behavior when SPC is supposed to be interpreted verbatim, so they come > > very close to the alternative that you like better, but still stop > > short of breaking someone's muscle memory. > > The first alternative provides sometimes the same, and sometimes > different behavior. In particular, when there are valid completions, > "SPC" would still perform completion -- something that I don't think > many users expect. Especially novices. > > The second alternative is even more involved, requiring > 'completing-read' callers to decide in advance whether the users will > want to have SPC insert SPC or perform completion. That's still odd and > seems like crossing the proper abstraction layers. The caller might not > know the collection contains spaces. And this approach can break > established muscle memory just the same, as soon as enough callers start > to make this choice. I understand that just rebinding SPC is much easier. But we are supposed to consider other factors, not just the ease of implementation. And I'm not afraid of code that is somewhat inelegant and even breaks abstractions, if we provide better, friendlier UI which breaks less habits. Many Emacs's abstractions leak from many holes anyway. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 17:16 ` Eli Zaretskii @ 2023-01-04 17:45 ` Dmitry Gutov 2023-01-04 18:37 ` Eli Zaretskii 0 siblings, 1 reply; 14+ messages in thread From: Dmitry Gutov @ 2023-01-04 17:45 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 60527, monnier On 04/01/2023 19:16, Eli Zaretskii wrote: >> Date: Wed, 4 Jan 2023 19:00:44 +0200 >> Cc:60527@debbugs.gnu.org,monnier@iro.umontreal.ca >> From: Dmitry Gutov<dgutov@yandex.ru> >> >> On 04/01/2023 16:47, Eli Zaretskii wrote: >>> I didn't say I'm against any change in this behavior. Stefan proposed >>> at least two alternatives that produce basically the same user-facing >>> behavior when SPC is supposed to be interpreted verbatim, so they come >>> very close to the alternative that you like better, but still stop >>> short of breaking someone's muscle memory. >> The first alternative provides sometimes the same, and sometimes >> different behavior. In particular, when there are valid completions, >> "SPC" would still perform completion -- something that I don't think >> many users expect. Especially novices. >> >> The second alternative is even more involved, requiring >> 'completing-read' callers to decide in advance whether the users will >> want to have SPC insert SPC or perform completion. That's still odd and >> seems like crossing the proper abstraction layers. The caller might not >> know the collection contains spaces. And this approach can break >> established muscle memory just the same, as soon as enough callers start >> to make this choice. > I understand that just rebinding SPC is much easier. But we are > supposed to consider other factors, not just the ease of > implementation. And I'm not afraid of code that is somewhat inelegant > and even breaks abstractions, if we provide better, friendlier UI > which breaks less habits. Using proper abstractions is what can lead to predictable, better UI. And vice versa -- patching through special cases upon special cases leads to less predictable, worse UI. I wasn't talking about the ease of implementation, really. > Many Emacs's abstractions leak from many > holes anyway. That's more of a problem for a UI which is used in many, many places and in different contexts. ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-04 17:45 ` Dmitry Gutov @ 2023-01-04 18:37 ` Eli Zaretskii 0 siblings, 0 replies; 14+ messages in thread From: Eli Zaretskii @ 2023-01-04 18:37 UTC (permalink / raw) To: Dmitry Gutov; +Cc: 60527, monnier > Date: Wed, 4 Jan 2023 19:45:45 +0200 > Cc: 60527@debbugs.gnu.org, monnier@iro.umontreal.ca > From: Dmitry Gutov <dgutov@yandex.ru> > > > I understand that just rebinding SPC is much easier. But we are > > supposed to consider other factors, not just the ease of > > implementation. And I'm not afraid of code that is somewhat inelegant > > and even breaks abstractions, if we provide better, friendlier UI > > which breaks less habits. > > Using proper abstractions is what can lead to predictable, better UI. > And vice versa -- patching through special cases upon special cases > leads to less predictable, worse UI. > > I wasn't talking about the ease of implementation, really. Not necessarily. And let's stop here and agree to disagree about this, okay? ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-03 20:14 ` Drew Adams 2023-01-03 22:50 ` Dmitry Gutov @ 2023-01-04 7:09 ` Kévin Le Gouguec 2023-01-04 18:14 ` Jean Louis 2023-01-04 19:11 ` Jim Porter 4 siblings, 0 replies; 14+ messages in thread From: Kévin Le Gouguec @ 2023-01-04 7:09 UTC (permalink / raw) To: 60527; +Cc: Stefan Monnier Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> writes: > Yet another option would be to let callers of `completing-read` indicate > that it's likely the users will sometimes want to type a SPC character > for this specific minibuffer input (i.e. `completing-read` would then > use a map like `minibuffer-local-filename-completion-map`). Thinking out loud, not sure how reasonable that idea is: something akin to the *-completion-ignore-case options? E.g. *-completion-literal-spc? (Or *-completion-literal-keys) > Currently packages which want to use `completing-read` to let the users > enter a string that will often contain spaces are reduced the either > telling their users "Add this `define-key` thingy in your .emacs because > the defaults suck" or having to use a `minibuffer-with-setup-hook` > workaround that forcefully rebinds SPC during that minibuffer session, > which may be the wrong thing to do if SPC was binding to something else > than `minibuffer-complete-word`. With the suggestion above, packages could define their own *-completion-whatever-its-named option, that may default to letting SPC self-insert; like ebdb defining its own ebdb-completion-ignore-case that defaults to t. Users could then set those options, and possibly set a bare defvar à la completion-ignore-case for those who feel very strongly that SPC has no business completing. (Full disclosure: I find SPC completion somewhat useful, especially for Lisp symbols, because pounding on SPC is much, much easier than reaching for hyphens on AZERTY) ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors ` (2 preceding siblings ...) 2023-01-04 7:09 ` Kévin Le Gouguec @ 2023-01-04 18:14 ` Jean Louis 2023-01-04 19:11 ` Jim Porter 4 siblings, 0 replies; 14+ messages in thread From: Jean Louis @ 2023-01-04 18:14 UTC (permalink / raw) To: Stefan Monnier; +Cc: 60527 * Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors <bug-gnu-emacs@gnu.org> [2023-01-03 22:07]: > I wish the SPC binding to `minibuffer-complete-word` would go because it > makes it hard to type SPC in the minibuffer whenever there's completion. > > Typing a SPC in a "minibuffer with completion" can be needed when the > things we want to complete contains a SPC character (e.g. file names, > which is why we disable that SPC binding when completing file names), > but also when using completion styles like `orderless` which make the > use of a SPC character to specify how to select the > completion candidates. > > So my favorite option is indeed to simply remove this binding. > Those few users who like it and use it (probably long-time users of > Emacs) could easily get it back with: Thanks. It will help in my packages as I have completion which I need to be editable by user, such as header, footer specification and inserting space require knowing how to use `C-q SPC', not a big deal, but it will help in usability. For completion I use TAB, instead of space. Space goes slow word by word, but I did not find use for it yet. -- Jean Take action in Free Software Foundation campaigns: https://www.fsf.org/campaigns In support of Richard M. Stallman https://stallmansupport.org/ ^ permalink raw reply [flat|nested] 14+ messages in thread
* bug#60527: 30.0.50; Typing SPC in a minibuffer with completion 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors ` (3 preceding siblings ...) 2023-01-04 18:14 ` Jean Louis @ 2023-01-04 19:11 ` Jim Porter 4 siblings, 0 replies; 14+ messages in thread From: Jim Porter @ 2023-01-04 19:11 UTC (permalink / raw) To: Stefan Monnier, 60527 On 1/3/2023 11:05 AM, Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors wrote: > I wish the SPC binding to `minibuffer-complete-word` would go because it > makes it hard to type SPC in the minibuffer whenever there's completion. [snip] > So my favorite option is indeed to simply remove this binding. > Those few users who like it and use it (probably long-time users of > Emacs) could easily get it back with: > > (define-key minibuffer-local-completion-map > " " 'minibuffer-complete-word) This would be my preference too, so long as there were an easy way for people who like the old behavior to get it back. (Would it be sufficient to just put that snippet in a NEWS entry?) > Another option is to change `minibuffer-complete-word` so that instead > of beeping "No match", it inserts a SPC when there's no completion and > `require-match` is nil (after checking that the command was invoked via > SPC). I'm not sure about this one; if it were hard to predict ahead of time what SPC will do, then it could be even less usable. For example, if I want to insert a literal space, I might press SPC only to find that it performs completion. So then I have to undo and press "C-q SPC" to get what I want. > Yet another option would be to let callers of `completing-read` indicate > that it's likely the users will sometimes want to type a SPC character > for this specific minibuffer input (i.e. `completing-read` would then > use a map like `minibuffer-local-filename-completion-map`). If this would work, it seems like a good compromise. But do the callers know for sure how this should be set? If they got it wrong, then it might have the effect of annoying both users who like the current binding and those who don't. (Similar to the above, there's not much worse than a button that *sometimes* does what you want.) As yet another option, how about doing something like the first one, but gate it behind a defcustom? That provides an easy way for users to get the behavior they want, without having to deal with figuring out minibuffer bindings. (If we had a time machine, the defcustom probably wouldn't be necessary, but I think it makes sense to provide an easy escape hatch if changing some long-standing feature.) ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2023-01-04 19:11 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-03 19:05 bug#60527: 30.0.50; Typing SPC in a minibuffer with completion Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-01-03 20:14 ` Drew Adams 2023-01-04 18:17 ` Jean Louis 2023-01-03 22:50 ` Dmitry Gutov 2023-01-04 3:29 ` Eli Zaretskii 2023-01-04 12:05 ` Dmitry Gutov 2023-01-04 14:47 ` Eli Zaretskii 2023-01-04 17:00 ` Dmitry Gutov 2023-01-04 17:16 ` Eli Zaretskii 2023-01-04 17:45 ` Dmitry Gutov 2023-01-04 18:37 ` Eli Zaretskii 2023-01-04 7:09 ` Kévin Le Gouguec 2023-01-04 18:14 ` Jean Louis 2023-01-04 19:11 ` Jim Porter
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).