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