Commit ffb55fe8ecb9

Vincent Demeester <vincent@sbr.pm>
2020-01-31 14:49:23
emacs.org: add setup-vde-mode.el
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent ac51d81
Changed files (2)
lisp/setup-vde-mode.el
@@ -1,11 +1,4 @@
-;;; setup-vde-mode.el --- define a personal minor mode
-;;; Commentary:
-;;;
-;;; Main use is to have my key bindings have the highest priority
-;;;
-;;; Code
 ;;; -*- lexical-binding: t; -*-
-
 (defvar vde-special-keymap-prefix (kbd "C-x m")
   "`vde-mode' keymap prefix.
 Overrides the default binding for `compose-mail'.")
@@ -16,8 +9,8 @@ Overrides the default binding for `compose-mail'.")
 (fset 'vde-mode-special-map vde-mode-special-map)
 
 (defvar vde-mode-map (let ((map (make-sparse-keymap)))
-                        (define-key map vde-special-keymap-prefix 'vde-mode-special-map)
-                        map)
+                       (define-key map vde-special-keymap-prefix 'vde-mode-special-map)
+                       map)
   "Keymap for `vde-mode'.")
 
 ;;;###autoload
@@ -63,5 +56,4 @@ USAGE: (unbind-from-vde-map \"C-x m f\")
                                     'face 'font-lock-function-name-face))))
 
 (provide 'setup-vde-mode)
-
 ;; Minor mode tutorial: http://nullprogram.com/blog/2013/02/06/
emacs.org
@@ -2672,6 +2672,73 @@
   (provide 'setup-vcs)
 #+end_src
 
+*** ~setup-vde-mode.el~
+:PROPERTIES:
+:CUSTOM_ID: h:d61614e2-7b13-43f3-aec8-a854bcaaeb0c
+:END:
+
+#+begin_src emacs-lisp :tangle lisp/setup-vde-mode.el
+  ;;; -*- lexical-binding: t; -*-
+  (defvar vde-special-keymap-prefix (kbd "C-x m")
+    "`vde-mode' keymap prefix.
+  Overrides the default binding for `compose-mail'.")
+
+  (defvar vde-mode-special-map (make-sparse-keymap)
+    "Special keymap for `vde-mode' whose bindings begin with
+  `vde-special-keymap-prefix'.")
+  (fset 'vde-mode-special-map vde-mode-special-map)
+
+  (defvar vde-mode-map (let ((map (make-sparse-keymap)))
+                         (define-key map vde-special-keymap-prefix 'vde-mode-special-map)
+                         map)
+    "Keymap for `vde-mode'.")
+
+  ;;;###autoload
+  (define-minor-mode vde-mode
+    "A minor mode so that my key settings override annoying major modes."
+    ;; If init-value is not set to t, this mode does not get enabled in
+    ;; `fundamental-mode' buffers even after doing \"(global-vde-mode 1)\".
+    ;; More info: http://emacs.stackexchange.com/q/16693/115
+    :init-value t
+    :lighter    " μ"
+    :keymap     vde-mode-map)
+
+  ;;;###autoload
+  (define-globalized-minor-mode global-vde-mode vde-mode vde-mode)
+
+  ;; https://github.com/jwiegley/use-package/blob/master/bind-key.el
+  ;; The keymaps in `emulation-mode-map-alists' take precedence over
+  ;; `minor-mode-map-alist'
+  (add-to-list 'emulation-mode-map-alists `((vde-mode . ,vde-mode-map)))
+
+  ;; Turn off the minor mode in the minibuffer
+  (defun turn-off-vde-mode ()
+    "Turn off vde-mode."
+    (vde-mode -1))
+  (add-hook 'minibuffer-setup-hook #'turn-off-vde-mode)
+
+  (defmacro bind-to-vde-map (key fn)
+    "Bind a function to the `vde-mode-special-map'.
+  USAGE: (bind-to-vde-map \"f\" #'full-screen-center)."
+    `(define-key vde-mode-special-map (kbd ,key) ,fn))
+
+  ;; http://emacs.stackexchange.com/a/12906/115
+  (defun unbind-from-vde-map (key)
+    "Unbind a function from the `vde-mode-map'
+  USAGE: (unbind-from-vde-map \"C-x m f\")
+  "
+    (interactive "Unset key from vde-mode-map: ")
+    (define-key vde-mode-map (kbd (key-description key)) nil)
+    (message "%s" (format "Unbound %s key from the %s."
+                          (propertize (key-description key)
+                                      'face 'font-lock-function-name-face)
+                          (propertize "vde-mode-map"
+                                      'face 'font-lock-function-name-face))))
+
+  (provide 'setup-vde-mode)
+  ;; Minor mode tutorial: http://nullprogram.com/blog/2013/02/06/
+#+end_src
+
 *** ~setup-web.el~
 :PROPERTIES:
 :CUSTOM_ID: h:7b53ca52-4212-4b40-bb15-d320ecfcf2d5