33 lines
1.7 KiB
Org Mode
33 lines
1.7 KiB
Org Mode
#+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.
|
||
|