From c003360f22a562fdaa0bbf37f6a1e5f955e1d1f9 Mon Sep 17 00:00:00 2001 From: Eshel Yaron Date: Mon, 26 Aug 2024 16:28:26 +0200 Subject: [PATCH] el.el: WIP --- lisp/progmodes/el.el | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/lisp/progmodes/el.el b/lisp/progmodes/el.el index 520d06b926a..7d5c8f981a7 100644 --- a/lisp/progmodes/el.el +++ b/lisp/progmodes/el.el @@ -25,8 +25,8 @@ ;;; Code: (eval-when-compile (require 'cl-lib)) - (require 'subr-x) +(require 'avy) (defface el-free-variable '((t :inherit underline)) "Face for highlighting free variables in Emacs Lisp code.") @@ -201,8 +201,29 @@ This is the `font-lock-fontify-region-function' for `emacs-lisp-mode'." (replace-region-contents beg end (lambda () str)) (user-error "No expression at point"))) +(defun el-code-pos-p (&optional pos) (null (nth 8 (syntax-ppss pos)))) + +(defun el-jump () + (interactive) + (avy-jump "[([]" + :window-flip t + :beg (save-excursion (beginning-of-defun) (point)) + :end (save-excursion (end-of-defun) (point)) + :action #'avy-action-goto + :pred #'el-code-pos-p)) + +(defun el-last () + (interactive "" el-mode) + (up-list 1 t t) (backward-char)) + +(defun el-backward-down () + (interactive) + (backward-sexp) + (down-list) + (el-last)) + (defvar-keymap el-mode-map - :doc "Keymap for `el-mode'." + :suppress t "r" #'raise-sexp "t" #'transpose-sexps "u" #'backward-up-list @@ -216,11 +237,17 @@ This is the `font-lock-fontify-region-function' for `emacs-lisp-mode'." "\"" #'insert-pair "/" #'undo "c" #'el-insert-function-call - "s" #'el-edit-sexp + "e" #'end-of-defun "x" #'eval-defun "a" #'beginning-of-defun - "e" #'end-of-defun - "m" #'mark-sexp) + "s" #'el-edit-sexp + "i" #'el-insert-sexp + "l" #'el-last + "p" #'el-backward-down + "j" #'el-jump + "m" #'mark-sexp + "." #'xref-find-definitions + "," #'xref-go-back) ;;;###autoload (define-derived-mode el-mode prog-mode "EL" -- 2.39.5