summaryrefslogtreecommitdiff
path: root/modules/keybindings.el
blob: 3d817013bbe961466ed1422c5faf1d3e5e04b0ff (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
;;; 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)

;; ------------------------------ 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