blob: 5d8b6bdd59a354d0b3224cab57134771ac5f140e (
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
|
;;; keybindings --- General Keyboard Shortcuts -*- lexical-binding: t; -*-
;; author: Craig Jennings <c@cjennings.net>
;;; Commentary:
;; TLDR: "C-c ?" Should bring up a helpful menu from wherever you are.
;; I've created a general menu that contains commonly used applications and
;; utilities.
;; There are also helpful menus that describe common functionality from within
;; another package, e.g., ledger. You access these with the same "C-c ? keyboard
;; shortcut"
;; Also, commonly used files should be easy to jump to. The "jump-to" keymap
;; refers to 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 an error '<key>
;; is undefined' message. Finally, I'm providing messages to train me to use
;; faster keybindings and provide feedback when evaluating buffers.
;;; Code:
;; ----------------------------------- Hydra -----------------------------------
;; provides ability to create menus
(use-package hydra
:demand t) ;; used in init, so load it now
;; --------------------------------- Main Hydra --------------------------------
;; convenience menu for commonly used apps
(defhydra hydra-general (:color blue :hint nil)
"
Main Menu
^Applications^ ^Communication^ ^Utilities^ ^Entertainment
^^^^^^^^--------------------------------------------------------------------------------
_f_: Feed Reader _m_: Mu4e Email _p_: Open Project _r_: Play Radio
_b_: Ebook Manager _t_: Telegram _c_: Calculator _g_: Games Menu
_F_: File Manager _i_: IRC _W_: World Clock
_l_: Ledger Accounting ^^ _z_: Diff Directories
_d_: Flashcard Drill ^^ ^^
^^ ^^ ^^ _q_: quit
\n\n
"
("q" nil)
;; Applications
("f" elfeed-dashboard)
("b" calibredb)
("F" (dirvish user-home-dir))
("l" (find-file ledger-file))
("d" cj/drill-start)
;; Communication
("m" mu4e)
("t" telega)
("i" cj/erc-start-or-switch)
;; Utilities
("p" projectile-switch-project)
("c" calc)
("W" world-clock)
("z" ztree-diff)
;; Entertainment
("r" eradio-play)
("g" hydra-games/body))
(global-set-key (kbd "C-c ?") 'hydra-general/body)
;; ---------------------------- 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 u") 'capitalize-region)
(global-set-key (kbd "C-c f") 'link-hint-open-link-at-point)
(global-set-key (kbd "M-*") 'calculator)
;; 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.
(if (display-graphic-p)
(progn
(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."))))))
;; evaluating a buffer should give confirmation or error.
(defun cj/eval-buffer-with-confirmation-or-error-message ()
"Evaluate the buffer and display a message."
(interactive)
(let ((result (eval-buffer)))
(if (not (eq result 'error))
(message "Buffer evaluated.")
(message "error occurred during evaluation: %s" result))))
(global-set-key (kbd "C-c b") 'cj/eval-buffer-with-confirmation-or-error-message)
(provide 'keybindings)
;;; keybindings.el ends here
|