From bdf9a71ab7baa2b1de9abcfd5df1a9107a55d141 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Sun, 5 Jul 2026 01:19:30 -0400 Subject: add a bunch of emacs packages HELP --- .../lisp/evil-collection/modes/company/README.org | 51 ++++++++ .../modes/company/evil-collection-company.el | 138 +++++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 .config/emacs/lisp/evil-collection/modes/company/README.org create mode 100644 .config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el (limited to '.config/emacs/lisp/evil-collection/modes/company') diff --git a/.config/emacs/lisp/evil-collection/modes/company/README.org b/.config/emacs/lisp/evil-collection/modes/company/README.org new file mode 100644 index 0000000..22c1d84 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/company/README.org @@ -0,0 +1,51 @@ +* company + + Evil bindings for [[https://github.com/company-mode/company-mode][company-mode]]. + Bindings are installed without an explicit state so they apply whenever the + company overlay is active. + +** company-active-map + + | Command | Original | Evil | + |------------------------------------+----------+-------------------------------------| + | =company-select-next-or-abort= | =C-n= | =C-n=, =C-j= | + | =company-select-previous-or-abort= | =C-p= | =C-p=, =C-k= | + | =company-select-next= | n/a | =M-j= | + | =company-select-previous= | n/a | =M-k= | + | =company-previous-page= | =M-<= | =C-u= (when =evil-want-C-u-scroll=) | + | =company-next-page= | =M->= | =C-d= (when =evil-want-C-d-scroll=) | + + With =evil-collection-want-company-extended-keybindings= (vim's =C-x ...= + completion family): + + | Command | Evil | + |---------------------------------------+-------| + | =evil-collection-company-whole-lines= | =C-l= | + | =company-etags= | =C-]= | + | =company-files= | =C-f= | + | =company-capf= | =C-o= | + | =company-ispell= | =C-s= | + +** company-search-map + + | Command | Original | Evil | + |------------------------------------+----------+------------| + | =company-select-next-or-abort= | =C-n= | =C-j= | + | =company-select-previous-or-abort= | =C-p= | =C-k= | + | =company-select-next= | n/a | =M-j= | + | =company-select-previous= | n/a | =M-k= | + | =company-search-abort= | =C-g= | == | + +** New commands + + | Command | Purpose | + |---------------------------------------+------------------------------------------------| + | =evil-collection-company-whole-lines= | Whole-line completion backend (vim =C-x C-l=). | + +** Customization + + | Variable | Default | Purpose | + |-----------------------------------------------------+--------------------------+--------------------------------------------------------------------------------------------------| + | =evil-collection-company-supported-states= | =(insert replace emacs)= | Evil states in which company is allowed to pop up. | + | =evil-collection-want-company-extended-keybindings= | =nil= | Enable the vim-style =C-x= completion bindings above. | + | =evil-collection-company-enable-keymap-protection= | =t= | Re-install =company-active-map= after =company-doc-buffer= et al. so evil does not eat the keys. | diff --git a/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el b/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el new file mode 100644 index 0000000..7042221 --- /dev/null +++ b/.config/emacs/lisp/evil-collection/modes/company/evil-collection-company.el @@ -0,0 +1,138 @@ +;;; evil-collection-company.el --- Bindings for `company-mode' -*- lexical-binding: t -*- + +;; Copyright (C) 2017 James Nguyen + +;; Author: James Nguyen +;; Maintainer: James Nguyen +;; Pierre Neidhardt +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, company, abbrev, convenience, matching + +;; 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 . + +;;; Commentary: +;;; Bindings for `company-mode'. + +;;; Code: +(require 'company nil t) +(require 'evil-collection) + +(declare-function company-tng-mode "company-tng") +(declare-function company-grab-line "company") +(declare-function company-begin-backend "company") +(declare-function company-ensure-emulation-alist "company") + +(defgroup evil-collection-company nil + "Evil bindings for `company-mode'." + :group 'evil-collection) + +(defcustom evil-collection-company-supported-states '(insert replace emacs) + "The `evil-state's which `company' function can be requested." + :type '(repeat symbol)) +(defcustom evil-collection-want-company-extended-keybindings nil + "The \='evil-company-extended' keybindings should be requested" + :type 'boolean) + +(defcustom evil-collection-company-enable-keymap-protection t + "Prevent evil from breaking company completion keymap. +When non-nil, prevents evil from overriding `company-active-map' +after calling `company-doc-buffer'. If disabled, the completion +keymap will be in a broken state." + :type 'boolean) + +(defvar company-active-map) +(defvar company-search-map) + +(defconst evil-collection-company-maps '(company-active-map company-search-map)) + +(defun evil-collection-company-supported-p (command &rest _) + "Return non-nil if `evil-state' is in supported states." + (cond + ((not (bound-and-true-p evil-mode)) t) + ((eq command 'prefix) + (memq evil-state evil-collection-company-supported-states)) + (t t))) + +(defun evil-collection-company-protect-keymap () + "Prevent evil from overriding `company-mode' completion keymap." + (when (and evil-collection-company-enable-keymap-protection + (memq 'company-emulation-alist emulation-mode-map-alists)) + (company-ensure-emulation-alist))) + +;;;###autoload +(defun evil-collection-company-whole-lines (command &optional arg &rest _ignored) + "`company-mode' completion backend that completes whole-lines, akin to vim's +C-x C-l." + (interactive (list 'interactive)) + (require 'company) + (pcase command + (`interactive (company-begin-backend 'evil-collection-company-whole-lines)) + (`prefix (company-grab-line "^[\t\s]*\\(.+\\)" 1)) + (`candidates + (all-completions + arg + (delete-dups + (split-string + (replace-regexp-in-string + "^[\t\s]+" "" + (concat (buffer-substring-no-properties (point-min) (line-beginning-position)) + (buffer-substring-no-properties (line-end-position) (point-max)))) + "\\(\r\n\\|[\n\r]\\)" t)))))) + +;;;###autoload +(defun evil-collection-company-setup () + "Set up `evil' bindings for `company'." + (evil-collection-define-key nil 'company-active-map + (kbd "C-n") 'company-select-next-or-abort + (kbd "C-p") 'company-select-previous-or-abort + (kbd "C-j") 'company-select-next-or-abort + (kbd "C-k") 'company-select-previous-or-abort + (kbd "M-j") 'company-select-next + (kbd "M-k") 'company-select-previous) + + (when evil-collection-want-company-extended-keybindings + (evil-collection-define-key nil 'company-active-map + (kbd "C-l") 'evil-collection-company-whole-lines + (kbd "C-]") 'company-etags + (kbd "C-f") 'company-files + (kbd "C-o") 'company-capf + (kbd "C-s") 'company-ispell)) + + (when evil-want-C-u-scroll + (evil-collection-define-key nil 'company-active-map + (kbd "C-u") 'company-previous-page)) + + (when evil-want-C-d-scroll + (evil-collection-define-key nil 'company-active-map + (kbd "C-d") 'company-next-page)) + + (evil-collection-define-key nil 'company-search-map + (kbd "C-j") 'company-select-next-or-abort + (kbd "C-k") 'company-select-previous-or-abort + (kbd "M-j") 'company-select-next + (kbd "M-k") 'company-select-previous + (kbd "") 'company-search-abort) + + ;; https://github.com/emacs-evil/evil-collection/issues/664 + (add-hook 'evil-local-mode-hook #'evil-collection-company-protect-keymap) + + ;; Make `company-mode' not show popup when not in supported state + (advice-add 'company-call-backend + :before-while 'evil-collection-company-supported-p)) + + +(provide 'evil-collection-company) +;;; evil-collection-company.el ends here -- cgit v1.2.3