diff options
Diffstat (limited to '.config/emacs/lisp/evil-collection/modes/beginend')
| -rw-r--r-- | .config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el b/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el new file mode 100644 index 0000000..715a471 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/beginend/evil-collection-beginend.el @@ -0,0 +1,125 @@ +;;; evil-collection-beginend.el --- Evil bindings for beginend -*- lexical-binding: t -*- + +;; Copyright (C) 2021 Balaji Sivaraman + +;; Author: Balaji Sivaraman <balaji@balajisivaraman.com> +;; Maintainer: Balaji Sivaraman <balaji@balajisivaraman.com> +;; Pierre Neidhardt <mail@ambrevar.xyz> +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, 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: +;; Evil bindings for beginend. + +;;; Code: + +(require 'evil-collection) +(require 'beginend nil t) + +(eval-and-compile + (defconst evil-collection-beginend-modes '(bs-mode + rg-mode + org-mode + deft-mode + prog-mode + LaTeX-mode + dired-mode + latex-mode + nroam-mode + occur-mode + vc-dir-mode + ibuffer-mode + message-mode + outline-mode + prodigy-mode + org-agenda-mode + compilation-mode + epa-key-list-mode + magit-status-mode + elfeed-search-mode + elfeed-show-mode + magit-revision-mode + notmuch-search-mode + recentf-dialog-mode))) + + +(defmacro evil-beginend--define-goto-beginning-motion (ec-mode-name) + "Macro to define new Evil motion that will use the corresponding +beginend-goto-beginning function for EC-MODE-NAME when count is not +provided for the motion; otherwise behave like `evil-goto-first-line' +if count is provided. + +This will also associate the regular Evil `gg' keybinding with the +newly defined motion." + (let ((motion-name (intern (format "evil-beginend-%s-goto-beginning" ec-mode-name))) + (beginend-beginning-fn-name (intern (format "beginend-%s-goto-beginning" ec-mode-name))) + (beginend-map-name (intern (format "beginend-%s-map" ec-mode-name)))) + `(progn + (declare-function ,motion-name "evil-collection") + (declare-function ,beginend-beginning-fn-name "ext:beginend") + (evil-define-motion ,motion-name (count) + :jump t + :type line + (if count + (evil-goto-first-line count) + (,beginend-beginning-fn-name))) + (evil-collection-define-key 'normal ',beginend-map-name + "gg" ',motion-name)))) + +(defmacro evil-beginend--define-goto-end-motion (ec-mode-name) + "Macro to define new Evil motion that will use the corresponding +beginend-goto-end function for EC-MODE-NAME when count is not +provided for the motion; otherwise behave like `evil-goto-line' +if count is provided. + +This will also associate the regular Evil `G' keybinding with the +newly defined motion." + (let ((motion-name (intern (format "evil-beginend-%s-goto-end" ec-mode-name))) + (beginend-end-fn-name (intern (format "beginend-%s-goto-end" ec-mode-name))) + (beginend-map-name (intern (format "beginend-%s-map" ec-mode-name)))) + `(progn + (declare-function ,motion-name "evil-collection") + (declare-function ,beginend-end-fn-name "ext:beginend") + (evil-define-motion ,motion-name (count) + :jump t + :type line + (if count + (evil-goto-line count) + (,beginend-end-fn-name))) + (evil-collection-define-key 'normal ',beginend-map-name + "G" ',motion-name)))) + +(defmacro evil-beginend--define-mode-motions () + "Define the goto-beginning and goto-end motions for all modes in +`evil-collection-beginend-modes'." + `(progn + ,@(mapcar + (lambda (mode-symbol) + (let ((mode-string (symbol-name mode-symbol))) + `(progn + (evil-beginend--define-goto-beginning-motion ,mode-string) + (evil-beginend--define-goto-end-motion ,mode-string)))) + evil-collection-beginend-modes))) + +;;;###autoload +(defun evil-collection-beginend-setup () + "Set up `evil' bindings for `beginend'." + (evil-beginend--define-mode-motions)) + +(provide 'evil-collection-beginend) +;;; evil-collection-beginend.el ends here |
