blob: 21a6e35f13d36737d38fec81778ec3f56573bd73 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
;;; zle.el --- Functions to mimmick my ZLE KBDs -*- lexical-binding: t -*-
;; Author: William Carroll <wpcarro@gmail.com>
;; Version: 0.0.1
;; Package-Requires: ((emacs "24"))
;;; Commentary:
;; This is primarily for personal use. The keybindings that I choose are those
;; that feel slightly mnemonic while also not shadowing important bindings.
;; It's quite possible that our tastes will differ here.
;;
;; All of these keybindings are intended to shave off milliseconds off your
;; typing. I don't expect these numbers to sum up to a meaningful amount. The
;; primary reason that I wrote this, is that it introduces a small amount of
;; structural editing to my workflow. I've been using these exact keybindings
;; on the command line, and I find them subtely delightful to use. So much so
;; that I decided to bring them to my Emacs configuration.
;;
;; ZLE is the Z-shell line editor. I have some KBDs and functions that I often
;; want in Emacs.
;;
;; Usage:
;; Consider running `(zle-minor-mode)' to run this globally. Depending on your
;; configuration, it could be non-disruptive, disruptive, or extremely
;; disruptive.
;;; Code:
;; subshell (C-j)
(defun zle-subshell ()
"Insert the characters necessary to create a subshell."
(interactive)
(insert-char ?$)
(insert-char ?\()
(save-excursion
(insert-char ?\))))
;; variable (C-v)
(defun zle-variable ()
"Insert the characters to reference a variable."
(interactive)
(insert-char ?$)
(insert-char ?{)
(save-excursion
(insert-char ?})))
;; 2x dash (C-M--)
(defun zle-dash-dash ()
"Insert the characters for flags with 2x dashes."
(interactive)
(insert-char ? )
(insert-char ?-)
(insert-char ?-))
;; 1x quotes (M-')
(defun zle-single-quote ()
"Insert the characters to quickly create single quotes."
(interactive)
(insert-char ? )
(insert-char ?')
(save-excursion
(insert-char ?')))
;; 2x quotes (M-")
(defun zle-double-quote ()
"Insert the characters to quickly create double quotes."
(interactive)
(insert-char ? )
(insert-char ?\")
(save-excursion
(insert-char ?\")))
(defvar zle-kbds
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-j") #'zle-subshell)
(define-key map (kbd "C-v") #'zle-variable)
(define-key map (kbd "C-M--") #'zle-dash-dash)
(define-key map (kbd "M-'") #'zle-single-quote)
(define-key map (kbd "M-\"") #'zle-double-quote)
map)
"Keybindings shaving milliseconds off of typing.")
(define-minor-mode zle-minor-mode
"A minor mode mirroring my ZLE keybindings."
:init-value nil
:lighter " zle"
:keymap zle-kbds)
(provide 'zle)
;;; zle.el ends here
|