new-ryuslash.org/posts/20230412-0702-paredit-and-ielm.org

34 lines
1.7 KiB
Org Mode
Raw Normal View History

#+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.