blob: d7af0bb20aefacf13eac1be801090037b92318c3 (
plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
;;; keybindings --- General Keyboard Shortcuts -*- lexical-binding: t; coding: utf-8; -*-
;; author: Craig Jennings <c@cjennings.net>
;;; Commentary:
;; Commonly used files should be easy to jump to. The "jump-to" keymap has the
;; "C-c j" prefix and immediately opens files defined in user-constants.el.
;; "Hostile Keybindings" are those that are close to keybindings I use commonly
;; so they're easy to hit by accident, but they have painful results. I'd
;; rather avoid the pain by unsetting they keybindings and view the error '<key>
;; is undefined' message. Finally, I'm providing messages to train me to use
;; faster keybindings and provide feedback when evaluating buffers.
;;; Code:
(require 'user-constants)
;; make org-store-link binding global
(global-set-key (kbd "C-c l") 'org-store-link)
;; remap Shift Backspace to Delete
(global-set-key (kbd "S-<backspace>") 'delete-forward-char)
;; ------------------------------- Custom Keymap -------------------------------
(defvar cj/custom-keymap
(let ((map (make-sparse-keymap)))
map)
"The base key map for custom elisp functions holding miscellaneous functions.
Other key maps extend from this key map to hold categorized functions.")
;; Set the global binding
(global-set-key (kbd "C-;") cj/custom-keymap)
;; Override flyspell's binding when it loads
(with-eval-after-load 'flyspell
(define-key flyspell-mode-map (kbd "C-;") nil))
;; Unnecessary, but leaving here for reference.
;; Optional: Ensure it stays unbound even if flyspell redefines it
;; (add-hook 'flyspell-mode-hook
;; (lambda ()
;; (define-key flyspell-mode-map (kbd "C-;") nil)))
;; ------------------------------ Jump To Commands -----------------------------
;; quick access for commonly used files
(defvar jump-to-keymap (make-sparse-keymap)
"Jump-to commonly used files/directories/commands.")
(global-set-key (kbd "C-c j") jump-to-keymap)
(define-key jump-to-keymap (kbd "r")
#'(lambda () (interactive) (find-file reference-file)))
(define-key jump-to-keymap (kbd "s")
#'(lambda () (interactive) (find-file schedule-file)))
(define-key jump-to-keymap (kbd "i")
#'(lambda () (interactive) (find-file inbox-file)))
(define-key jump-to-keymap (kbd "c")
#'(lambda () (interactive) (find-file contacts-file)))
(define-key jump-to-keymap (kbd "m")
#'(lambda () (interactive) (find-file macros-file)))
(define-key jump-to-keymap (kbd "n")
#'(lambda () (interactive) (find-file reading-notes-file)))
(define-key jump-to-keymap (kbd "w")
#'(lambda () (interactive) (find-file webclipped-file)))
(define-key jump-to-keymap (kbd "g")
#'(lambda () (interactive) (find-file gcal-file)))
(define-key jump-to-keymap (kbd "I")
#'(lambda () (interactive) (find-file emacs-init-file)))
;; ---------------------------- Keybinding Discovery ---------------------------
(use-package free-keys
:defer 1
:bind ("C-h C-k" . free-keys))
(use-package which-key
:defer 1
:config
;; never show keybindings that have been 'cj/disabled'
(push '((nil . "cj/disabled") . t) which-key-replacement-alist)
(setq which-key-idle-delay 2.0
which-key-popup-type 'side-window)
(which-key-setup-side-window-bottom)
;; (which-key-setup-side-window-right-bottom)
(which-key-mode 1))
;; ---------------------------- General Keybindings ----------------------------
;; Avoid hostile bindings
(global-unset-key (kbd "C-x C-f")) ;; find-file-read-only
(global-unset-key (kbd "C-z")) ;; suspend-frame is accidentally hit often
(global-unset-key (kbd "M-o")) ;; facemenu-mode
;; Add commonly-used general keybindings
(global-set-key (kbd "C-x C-f") 'find-file)
(global-set-key (kbd "C-c f") 'link-hint-open-link-at-point)
(global-set-key (kbd "M-*") 'calculator)
(global-set-key (kbd "M-Y") 'yank-media)
;; Normally bound to ESC ESC ESC, hit ESC once to get out of unpleasant situations.
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
;; remap C-x \ to sort-lines (from remap activate-transient-input-method)
(global-unset-key (kbd "C-x \\"))
(global-set-key (kbd "C-x \\") 'sort-lines)
;; training myself to use C-/ for undo (bound internally) as it's faster.
(global-unset-key (kbd "C-x u"))
(define-key global-map (kbd "C-x u")
#'(lambda () (interactive)
(message (concat "Seriously, " user-name
"? Use 'C-/'. It's faster."))))
(provide 'keybindings)
;;; keybindings.el ends here
|