Files
sydnix/modules/home/users/msyds/emacs/lisp/syd/leader.el
2025-11-23 04:06:39 -07:00

66 lines
2.0 KiB
EmacsLisp
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;; -*- lexical-binding: t; -*-
(require 'syd/straight)
(require 'syd/general)
;;; Options
(defvar syd-leader-key "SPC"
"A prefix key akin to Vim's <Leader>.")
(defvar syd-localleader-key "SPC m"
"A prefix key akin to Vim's <LocalLeader>.")
(defvar syd-alt-leader-key "M-SPC"
"`syd-leader', but for the states specified in `syd-alt-leader-key-states'.
Often, your \"usual\" leader key will be something unavailable in the Insert
state. This key exists as a fallback for when you need your Leader, but must
remain in the Insert state. Substitute \"Insert state\" for your states of
choice with `syd-alt-leader-key-states'.")
(defvar syd-alt-localleader-key "M-SPC m"
"`syd-localleader', but for the states specified in `syd-alt-leader-key-states'.
See `syd-alt-leader-key' for rationale.")
(defvar syd-leader-key-states '(normal visual motion)
"States for which the Leader keys (`syd-leader-key', `syd-localleader-key')
are active.")
(defvar syd-alt-leader-key-states '(emacs insert)
"States for which the alternative Leader keys are active. See
`syd-alt-leader-key' and `syd-alt-localleader-key'.")
(defvar-keymap syd-leader-map
:doc "Leader-prefixed commands")
;;; Define the leader key
;; Define `syd-leader' as a command corresponding to the prefix map
;; `syd-leader-map'.
(define-prefix-command 'syd-leader 'syd-leader-map)
;; This should help make the Leader key close to universally available.
;; Ideally, *nothing* takes precedence over Leader — it's an incredibly
;; important key!
;; https://github.com/noctuid/evil-guide?tab=readme-ov-file#undoprevent-overridingintercept-maps
;; See `evil-make-overriding-map'.
(define-key syd-leader-map [override-state] 'all)
(with-eval-after-load 'evil
;; Finally, we shall bind the damned keys. }:)
(let ((map general-override-mode-map))
(evil-define-key* syd-leader-key-states
map (kbd syd-leader-key) 'syd-leader)
(evil-define-key* syd-alt-leader-key-states
map (kbd syd-alt-leader-key) 'syd-leader)))
(general-override-mode 1)
(provide 'syd/leader)