GNU bug report logs - #69003
29.2; IELM: Improve ielm-dynamic-return when electric-pair-mode is enabled

Previous Next

Package: emacs;

Reported by: Sean Devlin <spd <at> toadstyle.org>

Date: Fri, 9 Feb 2024 17:56:02 UTC

Severity: normal

Found in version 29.2

To reply to this bug, email your comments to 69003 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#69003; Package emacs. (Fri, 09 Feb 2024 17:56:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Sean Devlin <spd <at> toadstyle.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 09 Feb 2024 17:56:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Sean Devlin <spd <at> toadstyle.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.2; IELM: Improve ielm-dynamic-return when electric-pair-mode is 
 enabled
Date: Fri, 9 Feb 2024 12:52:16 -0500
Hi folks,

This is a feature request.

IELM has an existing customization ielm-dynamic-return with DWIM
behavior when typing RET. If there is a complete sexp at the prompt, it
is evaluated; otherwise, it inserts a newline and indents.

This is a great feature, but it doesn't work as well if you have
electric-pair-mode (or similar) enabled. Since the closing parenthesis
is inserted automatically, you almost always have a complete sexp at the
prompt.

Here's a recipe to reproduce a frustrating interaction:

1. Emacs -Q
2. M-x electric-pair-mode
3. M-x ielm
4. Type the text: "(defun my-function ()"
5. Due to electric-pair-mode, this is what the prompt now looks like
(with the "|" character representing the point):

IELM> (defun my-function ()|)

6. Type RET
7. IELM evaluates the input

What I really wanted was to continue editing the function, but since
electric-pair-mode and ielm-dynamic-return are both enabled, IELM
evaluated the function prematurely.

It would be great to extend ielm-dynamic-return to improve handling of
this case. In my own configuration, I have RET bound to a function that
also checks whether point is at the end of the line:

(defun my-ielm-return ()
  (interactive)
  (if (eolp)
      (ielm-return)
    (newline-and-indent)))

Maybe ielm-dynamic-return could accept some third option that implements
similar logic.

Thanks!

In GNU Emacs 29.2 (build 1, aarch64-apple-darwin21.6.0, NS
appkit-2113.60 Version 12.6.6 (Build 21G646)) of 2024-01-18 built on
armbob.lan
Windowing system distributor 'Apple'
System Description:  macOS 14

Configured using:
'configure --with-ns '--enable-locallisppath=/Library/Application
Support/Emacs/${version}/site-lisp:/Library/Application
Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
-DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: IELM

Minor modes in effect:
  electric-pair-mode: t
  comint-fontify-input-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
None found.

Features:
(help-mode shadow sort mail-extr emacsbug message mailcap yank-media
puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived
epg rfc6068 epg-config gnus-util text-property-search mm-decode
mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
elec-pair time-date subr-x tabify cus-edit cus-start cus-load icons
wid-edit cl-print byte-opt gv bytecomp byte-compile ielm pp cl-loaddefs
cl-lib comint ansi-osc ansi-color ring rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/ns-win ns-win ucs-normalize mule-util
term/common-win 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 oclosure
cl-preloaded button loaddefs theme-loaddefs 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 kqueue cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 74075 12853)
(symbols 48 7865 3)
(strings 32 21108 1243)
(string-bytes 1 631584)
(vectors 16 14461)
(vector-slots 8 201600 14743)
(floats 8 34 30)
(intervals 56 461 6)
(buffers 984 17))




This bug report was last modified 84 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.