Embark, ace-window, smooth scroll, global magit keybindings

This commit is contained in:
Joseph Ferano 2022-09-02 10:32:13 +07:00
parent 770eb65611
commit bcd3b394a2

View File

@ -87,7 +87,6 @@ Prioritize old byte-compiled source files over newer sources. It saves us a litt
(prefer-coding-system 'utf-8) (prefer-coding-system 'utf-8)
;;; early-init.el ends here ;;; early-init.el ends here
#+end_src #+end_src
** Straight.el ** Straight.el
For now, use [[https://github.com/radian-software/straight.el][straight.el]] until [[https://github.com/progfolio/elpaca For now, use [[https://github.com/radian-software/straight.el][straight.el]] until [[https://github.com/progfolio/elpaca
@ -109,7 +108,6 @@ Then bootstrap
(eval-print-last-sexp))) (eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage)) (load bootstrap-file nil 'nomessage))
#+END_SRC #+END_SRC
** Benchmarking ** Benchmarking
This is commented out since it adds ever so slightly to init time, but keep it around in case we This is commented out since it adds ever so slightly to init time, but keep it around in case we
@ -120,7 +118,6 @@ need to benchmark slow init times later.
(require 'benchmark-init) (require 'benchmark-init)
(add-hook 'after-init-hook 'benchmark-init/deactivate) (add-hook 'after-init-hook 'benchmark-init/deactivate)
#+end_src #+end_src
** Misc Stuff ** Misc Stuff
#+begin_SRC emacs-lisp #+begin_SRC emacs-lisp
@ -168,7 +165,6 @@ I don't even know how you resume from GUI mode, we'll find a use for this keybin
(when (display-graphic-p) (when (display-graphic-p)
(global-unset-key (kbd "C-z"))) (global-unset-key (kbd "C-z")))
#+end_src #+end_src
** Visuals ** Visuals
*** Dashboard *** Dashboard
@ -189,7 +185,6 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(setq dashboard-set-heading-icons t) (setq dashboard-set-heading-icons t)
(add-hook 'dashboard-mode-hook (lambda () (setq-local line-spacing 12))) (add-hook 'dashboard-mode-hook (lambda () (setq-local line-spacing 12)))
#+end_src #+end_src
*** Olivetti *** Olivetti
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -198,7 +193,6 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(setq olivetti-minimum-body-width 100) (setq olivetti-minimum-body-width 100)
(global-set-key (kbd "C-x x o") 'olivetti-mode) (global-set-key (kbd "C-x x o") 'olivetti-mode)
#+end_src #+end_src
*** Themes *** Themes
sanityinc-tomorrow-light is really good sanityinc-tomorrow-light is really good
@ -219,8 +213,6 @@ Save the last used theme when exiting emacs and then reload it.
(customize-save-variable 'custom-enabled-themes custom-enabled-themes)) (customize-save-variable 'custom-enabled-themes custom-enabled-themes))
(add-hook 'kill-emacs-hook #'joe/save-current-theme) (add-hook 'kill-emacs-hook #'joe/save-current-theme)
#+end_src #+end_src
*** Other *** Other
Setup other stuff Setup other stuff
@ -262,10 +254,11 @@ Setup other stuff
(straight-use-package 'nano-modeline) (straight-use-package 'nano-modeline)
(nano-modeline-mode) (nano-modeline-mode)
#+end_src #+end_src
** Text ** Text
#+begin_src emacs-lisp #+begin_src emacs-lisp
(set-face-attribute 'default nil :font "Fira Code Nerd Font" :height 105) (set-face-attribute 'default nil :family "Fira Code Nerd Font Mono" :height 120)
;; (set-face-attribute 'variable-pitch nil :family "Source Code Pro" :height 120)
(setq-default c-basic-offset 4) ;; This is annoying (setq-default c-basic-offset 4) ;; This is annoying
(setq-default indent-tabs-mode nil) (setq-default indent-tabs-mode nil)
@ -277,7 +270,6 @@ Setup other stuff
(add-hook 'before-save-hook 'whitespace-cleanup) (add-hook 'before-save-hook 'whitespace-cleanup)
#+end_src #+end_src
** Buffers ** Buffers
#+begin_src emacs-lisp #+begin_src emacs-lisp
(defun joe/kill-this-buffer-or-popup () (defun joe/kill-this-buffer-or-popup ()
@ -321,10 +313,8 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(global-set-key (kbd "C-x C-0") 'kill-buffer-and-window) (global-set-key (kbd "C-x C-0") 'kill-buffer-and-window)
#+end_src #+end_src
** Windows ** Windows
*** Window Management
*** Popper
#+begin_src emacs-lisp #+begin_src emacs-lisp
(add-hook 'after-init-hook (lambda () (winner-mode t))) (add-hook 'after-init-hook (lambda () (winner-mode t)))
@ -338,6 +328,14 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(define-key ctl-x-4-map (kbd "|") #'joe/window-split-vertical) (define-key ctl-x-4-map (kbd "|") #'joe/window-split-vertical)
(define-key ctl-x-4-map (kbd "-") #'joe/window-split-horizontal) (define-key ctl-x-4-map (kbd "-") #'joe/window-split-horizontal)
(define-key ctl-x-4-map (kbd "t") #'rotate-window)
(global-set-key (kbd "C-x o") #'ace-window)
(global-set-key (kbd "C-x C-o") #'ace-swap-window)
#+end_src>
*** Popper
#+begin_src emacs-lisp
(straight-use-package 'popper) (straight-use-package 'popper)
(require 'popper) (require 'popper)
(setq popper-reference-buffers (setq popper-reference-buffers
@ -374,45 +372,54 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(popper-mode t) (popper-mode t)
#+end_src #+end_src
*** Scrolling *** Scrolling
#+begin_src emacs-lisp #+begin_src emacs-lisp
(require 'pixel-scroll) (require 'pixel-scroll)
(setq pixel-scroll-precision-large-scroll-height 10.0) (setq pixel-scroll-precision-large-scroll-height 10.0)
(setq pixel-scroll-precision-interpolation-factor 30) (setq pixel-scroll-precision-interpolation-factor 30)
(defun joe/pixel-scroll-lerp (amount direction)
(let ((half-height (* direction (/ (window-height) amount)))
(point-min-or-max (if (> direction 0) (point-min) (point-max))))
(when (or (and (pos-visible-in-window-p (point-min))
(< direction 0)))
(pixel-scroll-precision-interpolate (* 5 half-height)))
(pixel-scroll-precision-interpolate (* 5 half-height))))
(defun joe/smooth-scroll-half-page-down () (defun joe/smooth-scroll-half-page-down ()
"Smooth scroll down" "Smooth scroll down"
(interactive) (interactive)
(let ((half-height (/ (window-height) 2))) (joe/pixel-scroll-lerp 2 -1))
(pixel-scroll-precision-interpolate (* 5 (- half-height))))) ;; (pixel-scroll-kbd-up))
(defun joe/smooth-scroll-half-page-up () (defun joe/smooth-scroll-half-page-up ()
"Smooth scroll down" "Smooth scroll up"
(interactive) (interactive)
(let ((half-height (/ (window-height) 2))) (joe/pixel-scroll-lerp 2 1))
(pixel-scroll-precision-interpolate (* 5 half-height))))
(defun joe/smooth-scroll-short-down () (defun joe/smooth-scroll-short-down ()
"Smooth scroll down" "Smooth scroll down"
(interactive) (interactive)
(let ((half-height (/ (window-height) 6))) (joe/pixel-scroll-lerp 6 -1))
(pixel-scroll-precision-interpolate (* 5 (- half-height)))))
(defun joe/smooth-scroll-short-up () (defun joe/smooth-scroll-short-up ()
"Smooth scroll down" "Smooth scroll down"
(interactive) (interactive)
(let ((half-height (/ (window-height) 6))) (joe/pixel-scroll-lerp 6 1))
(pixel-scroll-precision-interpolate (* 5 half-height))))
;; scroll-up-command ;; scroll-up-command
(global-set-key (kbd "C-v") #'joe/smooth-scroll-half-page-down) (global-set-key (kbd "C-v") #'joe/smooth-scroll-half-page-down)
(global-set-key (kbd "M-v") #'joe/smooth-scroll-half-page-up) (global-set-key (kbd "M-v") #'joe/smooth-scroll-half-page-up)
#+end_src (global-set-key (kbd "C-S-v") #'joe/smooth-scroll-short-down)
(global-set-key (kbd "M-S-v") #'joe/smooth-scroll-short-up)
#+end_src
** Org Mode ** Org Mode
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'org-bullets) (straight-use-package 'org-bullets)
(defun joe/org-init () (defun joe/org-init ()
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG"))) (setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG")))
(setq org-agenda-files '("~/todo.org")) (setq org-agenda-files '("~/todo.org"))
@ -422,28 +429,38 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
(setq org-edit-src-content-indentation 0)) (setq org-edit-src-content-indentation 0))
(with-eval-after-load 'org (joe/org-init)) (with-eval-after-load 'org (joe/org-init))
(setq org-blank-before-new-entry
'((heading . nil)
(plain-list-item . nil)))
(setq org-cycle-separator-lines 1)
(setq org-hide-emphasis-markers t)
(setq org-src-window-setup 'current-window)
(defun joe/org-hook () (defun joe/org-hook ()
(local-set-key (kbd "C-. C-i") 'consult-org-heading) (local-set-key (kbd "C-. C-i") 'consult-org-heading)
(org-bullets-mode) (org-bullets-mode)
(org-indent-mode)) (org-indent-mode))
(add-hook 'org-mode-hook 'joe/org-hook) (add-hook 'org-mode-hook 'joe/org-hook)
#+end_src #+end_src
** VEMCO ** VEMCO
Vertico Embark Marginalia Consult Orderless Vertico Embark Marginalia Consult Orderless
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'all-the-icons-completion) (straight-use-package 'all-the-icons-completion)
(straight-use-package '(vertico :files (:defaults "extensions/*") :includes (vertico-directory vertico-reverse))) (straight-use-package '(vertico :files (:defaults "extensions/*")
;; :bind (:map vertico-map :includes (vertico-indexed
;; ("\M-G" . vertico-multiform-mode) vertico-repeat
;; ("\M-e" . embark-act))) vertico-directory)))
(vertico-mode) (vertico-mode)
(straight-use-package 'vertico-posframe) (straight-use-package 'vertico-posframe)
(define-key vertico-map (kbd "C-w") #'vertico-directory-delete-word)
(define-key vertico-map (kbd "C-r") #'vertico-repeat-)
(vertico-posframe-mode t) (vertico-posframe-mode t)
(vertico-indexed-mode)
(setq vertico-posframe-parameters (setq vertico-posframe-parameters
'((left-fringe . 100) '((left-fringe . 100)
(right-fringe . 100))) (right-fringe . 100)))
@ -461,8 +478,14 @@ Vertico Embark Marginalia Consult Orderless
vertico-resize nil vertico-resize nil
vertico-cycle t) vertico-cycle t)
(define-key vertico-map (kbd "C-M-n") #'vertico-next-group)
;; #' "C-M-p" #'vertico-previous-group)
(require 'savehist) (require 'savehist)
(savehist-mode) (savehist-mode)
(add-hook 'minibuffer-setup-hook #'vertico-repeat-save)
(add-to-list 'savehist-additional-variables 'vertico-repeat-history)
(straight-use-package 'vertico-directory) (straight-use-package 'vertico-directory)
;; :bind (:map vertico-map ;; :bind (:map vertico-map
;; ("RET" . vertico-directory-enter) ;; ("RET" . vertico-directory-enter)
@ -471,11 +494,69 @@ Vertico Embark Marginalia Consult Orderless
;; :hook (rfn-eshadow-update-overlay . vertico-directory-tidy)) ;; :hook (rfn-eshadow-update-overlay . vertico-directory-tidy))
(straight-use-package 'embark) (straight-use-package 'embark)
(defvar joe-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-'") #'embark-act)
(define-key map (kbd "M-'") #'embark-dwim)
map)
"my-keys-minor-mode keymap.")
(define-minor-mode joe-mode
"A minor mode so that my key settings override annoying major modes."
:init-value t
:lighter " joe-keys")
(joe-mode t)
(defun embark-which-key-indicator ()
"An embark indicator that displays keymaps using which-key.
The which-key help message will show the type and value of the
current target followed by an ellipsis if there are further
targets."
(lambda (&optional keymap targets prefix)
(if (null keymap)
(which-key--hide-popup-ignore-command)
(which-key--show-keymap
(if (eq (plist-get (car targets) :type) 'embark-become)
"Become"
(format "Act on %s '%s'%s"
(plist-get (car targets) :type)
(embark--truncate-target (plist-get (car targets) :target))
(if (cdr targets) "…" "")))
(if prefix
(pcase (lookup-key keymap prefix 'accept-default)
((and (pred keymapp) km) km)
(_ (key-binding prefix 'accept-default)))
keymap)
nil nil t (lambda (binding)
(not (string-suffix-p "-argument" (cdr binding))))))))
(setq embark-indicators
'(embark-which-key-indicator
embark-highlight-indicator
embark-isearch-highlight-indicator))
(defun embark-hide-which-key-indicator (fn &rest args)
"Hide the which-key indicator immediately when using the completing-read prompter."
(which-key--hide-popup-ignore-command)
(let ((embark-indicators
(remq #'embark-which-key-indicator embark-indicators)))
(apply fn args)))
(advice-add #'embark-completing-read-prompter
:around #'embark-hide-which-key-indicator)
(global-set-key (kbd "C-'") #'embark-act)
(straight-use-package 'embark-consult) (straight-use-package 'embark-consult)
(straight-use-package 'marginalia) (straight-use-package 'marginalia)
(setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil)) (setq marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))
(setq marginalia-align 'right)
(setq marginalia-max-relative-age most-positive-fixnum)
(marginalia-mode) (marginalia-mode)
(define-key minibuffer-local-map (kbd "M-A") #'marginalia-cycle)
(require 'all-the-icons-completion) (require 'all-the-icons-completion)
(all-the-icons-completion-mode) (all-the-icons-completion-mode)
(all-the-icons-completion-marginalia-setup) (all-the-icons-completion-marginalia-setup)
@ -496,7 +577,6 @@ Vertico Embark Marginalia Consult Orderless
(global-set-key (kbd "C-. C-r") 'consult-recent-file) (global-set-key (kbd "C-. C-r") 'consult-recent-file)
(global-set-key (kbd "C-. C-y") 'consult-yank-from-kill-ring) (global-set-key (kbd "C-. C-y") 'consult-yank-from-kill-ring)
#+end_src #+end_src
** Avy ** Avy
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -510,7 +590,6 @@ Vertico Embark Marginalia Consult Orderless
(define-key global-map (kbd "M-g w") 'avy-goto-word-1) ;; first character of the word (define-key global-map (kbd "M-g w") 'avy-goto-word-1) ;; first character of the word
(define-key global-map (kbd "M-g P") 'avy-pop-mark) (define-key global-map (kbd "M-g P") 'avy-pop-mark)
#+end_src #+end_src
** Helpful ** Helpful
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'helpful) (straight-use-package 'helpful)
@ -521,7 +600,6 @@ Vertico Embark Marginalia Consult Orderless
(global-set-key (kbd "C-h F") #'helpful-function) (global-set-key (kbd "C-h F") #'helpful-function)
(global-set-key (kbd "C-h C") #'helpful-command) (global-set-key (kbd "C-h C") #'helpful-command)
#+end_src #+end_src
** Dirvish/Dired ** Dirvish/Dired
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'dirvish) (straight-use-package 'dirvish)
@ -556,6 +634,7 @@ Vertico Embark Marginalia Consult Orderless
(define-key dirvish-mode-map (kbd "C-c f") #'dirvish-fd) (define-key dirvish-mode-map (kbd "C-c f") #'dirvish-fd)
(define-key dirvish-mode-map (kbd "a" ) #'dirvish-quick-access) (define-key dirvish-mode-map (kbd "a" ) #'dirvish-quick-access)
(define-key dirvish-mode-map (kbd "." ) #'dired-create-empty-file)
(define-key dirvish-mode-map (kbd "f" ) #'dirvish-file-info-menu) (define-key dirvish-mode-map (kbd "f" ) #'dirvish-file-info-menu)
(define-key dirvish-mode-map (kbd "y" ) #'dirvish-yank-menu) (define-key dirvish-mode-map (kbd "y" ) #'dirvish-yank-menu)
(define-key dirvish-mode-map (kbd "N" ) #'dirvish-narrow) (define-key dirvish-mode-map (kbd "N" ) #'dirvish-narrow)
@ -577,7 +656,6 @@ Vertico Embark Marginalia Consult Orderless
(global-set-key (kbd "C-x C-d") #'joe/dirvish-find-directory) (global-set-key (kbd "C-x C-d") #'joe/dirvish-find-directory)
#+end_src #+end_src
** Terminals/Shells ** Terminals/Shells
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'vterm) (straight-use-package 'vterm)
@ -603,6 +681,9 @@ Vertico Embark Marginalia Consult Orderless
(global-set-key (kbd "C-c t") #'vterm) (global-set-key (kbd "C-c t") #'vterm)
(global-set-key (kbd "C-c T") #'joe/vterm-here) (global-set-key (kbd "C-c T") #'joe/vterm-here)
;; (setq explicit-shell-file-name "~/Development/fell/fell")
(add-hook 'shell-mode (lambda () (setq-local global-hl-line-mode nil)))
(setq shell-kill-buffer-on-exit t)
(add-hook 'vterm-mode-hook (lambda () (setq-local global-hl-line-mode nil))) (add-hook 'vterm-mode-hook (lambda () (setq-local global-hl-line-mode nil)))
#+end_src #+end_src
@ -613,7 +694,6 @@ down init time because vterm is loading TRAMP which is slow.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(add-hook 'emacs-startup-hook (lambda () (require 'vterm))) (add-hook 'emacs-startup-hook (lambda () (require 'vterm)))
#+end_src #+end_src
** Undo Tree ** Undo Tree
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'undo-tree) (straight-use-package 'undo-tree)
@ -623,7 +703,6 @@ down init time because vterm is loading TRAMP which is slow.
(setq undo-tree-visualizer-diff t) (setq undo-tree-visualizer-diff t)
(setq undo-tree-history-directory-alist `(("." . ,(expand-file-name "undo" user-emacs-directory)))))) (setq undo-tree-history-directory-alist `(("." . ,(expand-file-name "undo" user-emacs-directory))))))
#+end_src #+end_src
** Which Key ** Which Key
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -631,7 +710,6 @@ down init time because vterm is loading TRAMP which is slow.
(setq which-key-idle-delay 0.3) (setq which-key-idle-delay 0.3)
(add-hook 'after-init-hook (lambda () (which-key-mode))) (add-hook 'after-init-hook (lambda () (which-key-mode)))
#+end_src #+end_src
** Text Editor ** Text Editor
Emacs is an great operating system, if only it had a good text editor... Emacs is an great operating system, if only it had a good text editor...
@ -640,7 +718,6 @@ Emacs is an great operating system, if only it had a good text editor...
#+begin_src emacs-lisp #+begin_src emacs-lisp
(global-set-key (kbd "M-z") #'zap-up-to-char) (global-set-key (kbd "M-z") #'zap-up-to-char)
(global-set-key (kbd "M-Z") #'zap-to-char) (global-set-key (kbd "M-Z") #'zap-to-char)
;; (setq explicit-shell-file-name "~/Development/fell/fell")
(defun joe/duplicate-line-comment () (defun joe/duplicate-line-comment ()
(interactive) (interactive)
@ -660,6 +737,7 @@ Emacs is an great operating system, if only it had a good text editor...
(defhydra hydra-navigate (global-map "<f2>") (defhydra hydra-navigate (global-map "<f2>")
"Window Navigation" "Window Navigation"
("q" nil "quit")
("d" joe/smooth-scroll-half-page-down "half page down") ("d" joe/smooth-scroll-half-page-down "half page down")
("u" joe/smooth-scroll-half-page-up "half page up") ("u" joe/smooth-scroll-half-page-up "half page up")
("e" joe/smooth-scroll-short-down "line down") ("e" joe/smooth-scroll-short-down "line down")
@ -812,7 +890,6 @@ Emacs is an great operating system, if only it had a good text editor...
(add-hook 'after-init-hook 'my/kakoune-setup) (add-hook 'after-init-hook 'my/kakoune-setup)
#+end_src #+end_src
** IDE Features ** IDE Features
*** LSP/Company *** LSP/Company
@ -845,6 +922,7 @@ Emacs is an great operating system, if only it had a good text editor...
(define-key company-active-map (kbd "C-n") nil) (define-key company-active-map (kbd "C-n") nil)
(define-key company-active-map (kbd "C-p") nil) (define-key company-active-map (kbd "C-p") nil)
(define-key company-active-map (kbd "<return>") nil) (define-key company-active-map (kbd "<return>") nil)
(define-key company-active-map (kbd "RET") nil)
(define-key company-active-map (kbd "C-f") #'company-complete-selection) (define-key company-active-map (kbd "C-f") #'company-complete-selection)
(define-key company-active-map [tab] #'company-complete-common-or-cycle) (define-key company-active-map [tab] #'company-complete-common-or-cycle)
(define-key company-active-map (kbd "<backtab>") (lambda () (interactive) (company-complete-common-or-cycle -1))) (define-key company-active-map (kbd "<backtab>") (lambda () (interactive) (company-complete-common-or-cycle -1)))
@ -895,7 +973,6 @@ Emacs is an great operating system, if only it had a good text editor...
;; (require 'yasnippet) ;; (require 'yasnippet)
;; (yas-global-mode 1) ;; (yas-global-mode 1)
#+end_src #+end_src
*** C *** C
Design some basic functions for compiling. There's also a hook to close the popper window if there Design some basic functions for compiling. There's also a hook to close the popper window if there
@ -924,7 +1001,6 @@ it doesn't close it.
(popper-close-latest)))))) (popper-close-latest))))))
(add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err) (add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err)
#+end_src #+end_src
** Magit ** Magit
The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]] The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]]
@ -939,9 +1015,23 @@ The best git porcelain/client I've ever used. Also kill stray magit buffers left
(mapc #'kill-buffer buffers))) (mapc #'kill-buffer buffers)))
(setq magit-bury-buffer-function #'joe/magit-kill-buffers) (setq magit-bury-buffer-function #'joe/magit-kill-buffers)
(setq magit-clone-set-remote.pushDefault t)
(setq magit-clone-default-directory "~/Development/")
(defvar joe/magit-keys-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-x g g") #'magit-status)
(define-key map (kbd "C-x g c") #'magit-clone)
(define-key map (kbd "C-x g i") #'magit-init)
map)
"Personal magit map")
(define-minor-mode joe/magit-keys-mode
"A minor mode to enable some magit keys"
:init-value t)
(joe/magit-keys t)
#+end_src #+end_src
** Restclient ** Restclient
#+begin_src emacs-lisp #+begin_src emacs-lisp