27 lines
1.5 KiB
Org Mode
27 lines
1.5 KiB
Org Mode
|
#+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.
|