diff options
Diffstat (limited to '.config/emacs/lisp/evil-collection/modes/ielm')
| -rw-r--r-- | .config/emacs/lisp/evil-collection/modes/ielm/README.org | 22 | ||||
| -rw-r--r-- | .config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el | 60 |
2 files changed, 82 insertions, 0 deletions
diff --git a/.config/emacs/lisp/evil-collection/modes/ielm/README.org b/.config/emacs/lisp/evil-collection/modes/ielm/README.org new file mode 100644 index 0000000..f7ce241 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ielm/README.org @@ -0,0 +1,22 @@ +* ielm + + Evil bindings for [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Lisp-Interaction.html][IELM]] (Inferior Emacs Lisp Mode). + + Initial state is =insert=. =RET= sends input in the state named by + =evil-collection-repl-submit-state=. + +** Key bindings + + | Command | Original | Evil | + |---------------+----------+----------------------| + | =ielm-return= | =RET= | =RET= (submit state) | + +** Customization + + | Variable | Default | Purpose | + |-----------------------------------------+---------+--------------------------------------------------------| + | =evil-collection-ielm-move-cursor-back= | =nil= | Move cursor back one column when leaving insert state. | + +** Notes + + - On entering normal state, point stays put (no Vim-style backward step). diff --git a/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el b/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el new file mode 100644 index 0000000..0883bb6 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el @@ -0,0 +1,60 @@ +;;; evil-collection-ielm.el --- Bindings for `ielm' -*- lexical-binding: t -*- + +;; Copyright (C) 2026 Ian Pan <ianpan870102@gmail.com> + +;; Author: Ian Pan <ianpan870102@gmail.com> +;; Maintainer: Ian Pan <ianpan870102@gmail.com> +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, ielm, tools + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: +;;; Bindings for `ielm' (Inferior Emacs Lisp Mode). + +;;; Code: +(require 'evil-collection) +(require 'ielm nil t) + +(defvar inferior-emacs-lisp-mode-map) +(defconst evil-collection-ielm-maps '(inferior-emacs-lisp-mode-map)) + +(defcustom evil-collection-ielm-move-cursor-back nil + "Whether the cursor is moved backwards when exiting insert state." + :type 'boolean + :group 'ielm) + +(defun evil-collection-ielm-escape-stay () + "Go back to normal state but don't move cursor backwards. +Moving cursor backwards is the default vim behavior but +it is not intuitive for some cases like REPL buffers." + (setq-local evil-move-cursor-back + evil-collection-ielm-move-cursor-back)) + +;;;###autoload +(defun evil-collection-ielm-setup () + "Set up `evil' bindings for `ielm'." + (evil-set-initial-state 'inferior-emacs-lisp-mode 'insert) + + (add-hook 'ielm-mode-hook #'evil-collection-ielm-escape-stay) + + (let* ((submit evil-collection-repl-submit-state)) + (evil-collection-define-key submit 'inferior-emacs-lisp-mode-map + (kbd "RET") #'ielm-return + (kbd "<return>") #'ielm-return))) + +(provide 'evil-collection-ielm) +;;; evil-collection-ielm.el ends here |
