#+TITLE: IELM & Paredit
#+TAGS: emacs
#+COMMENT_STATUS: closed
#+STATUS: publish
# #+DATE: Wed, 12 Apr 2023 07:02:45 GMT
#+DATE: <2023-04-12 Wed 07:02>
#+UPDATE_URL: /admin/modify-post/2023%252f04%252f12%252fielm-paredit
#+exclude_tags: summary

For a while I've been bothered by being unable to use IELM to evaluate Emacs Lisp expressions. Then [[https://www.n16f.net/blog/making-ielm-more-comfortable/][Making IELM More Comfortable]] pointed out that using paredit in IELM causes the =RET= and =C-j= keybindings to be bound to the wrong functions and proposes to fix them. The given fix, however, appears to change the keybindings for all buffers using paredit. I don't want that, and Emacs can do better!

A quick search yielded [[https://stackoverflow.com/a/13102821][Buffer-locally overriding minor-mode key bindings in Emacs]] suggesting a fix. My adaptation of that solution:

#+begin_src emacs-lisp
  (defun oni-elisp-ielm-remove-paredit-newline-keys ()
    "Disable ‘C-j’ and ‘RET’ keybindings from ‘paredit-mode’."
    (let ((oldmap (map-elt minor-mode-map-alist 'paredit-mode))
          (newmap (make-sparse-keymap)))
      (set-keymap-parent newmap oldmap)
      (define-key newmap (kbd "RET") nil)
      (define-key newmap (kbd "C-j") nil)
      (make-local-variable 'minor-mode-overriding-map-alist)
      (push `(paredit-mode . ,newmap) minor-mode-overriding-map-alist)))

  (add-hook 'ielm-mode-hook #'oni-elisp-ielm-remove-paredit-newline-keys)
#+end_src

Defining =RET= and =C-j= as =nil= means that the keybinding defaults back to the major-mode keybinding.

* IELM & Paredit                                          :summary:

I couldn't use IELM for a while because of Paredit. So I fixed it.

[[file:20230412-0702-paredit-and-ielm.org][Read More]]