aboutsummaryrefslogtreecommitdiff
path: root/.config/emacs/lisp/evil-collection/modes/ielm
diff options
context:
space:
mode:
Diffstat (limited to '.config/emacs/lisp/evil-collection/modes/ielm')
-rw-r--r--.config/emacs/lisp/evil-collection/modes/ielm/README.org22
-rw-r--r--.config/emacs/lisp/evil-collection/modes/ielm/evil-collection-ielm.el60
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