summaryrefslogtreecommitdiff
path: root/.emacs.d/snippets/exwm-holyK-firefox.el
blob: 8604990b5ab38a7b78e37d0d7d572c998ade4f1d (about) (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
;;; exwm-holyK-firefox --- Emacs keybinding implemention of exwm-firefox-core
;; Author: Thanos Apollo
;; URL: --
;; Version: 1.0
;; Package-Requires: ((emacs "24.4") (exwm "0.16") (exwm-firefox-core "1.0"))
;; Keywords: extensions

;;; Commentary:

;; This package implements exwm-firefox-core to allow navigation and editing in firefox
;; using default-like Emacs keybindings

;;; Code:

(require 'exwm-firefox-core)
(require 'exwm)

(defvar exwm-firefox-holyK-mode-map
  (let
      ((map (make-sparse-keymap)))
    (define-key map (kbd "C-n") 'exwm-firefox-core-down)
    (define-key map (kbd "C-p") 'exwm-firefox-core-up)
    (define-key map (kbd "C-f") 'exwm-firefox-core-right)
    (define-key map (kbd "C-b") 'exwm-firefox-core-left)
    (define-key map (kbd "C-y") 'exwm-firefox-core-paste)
    (define-key map (kbd "C-s") 'exwm-firefox-core-quick-find)
    (define-key map (kbd "M-f") 'exwm-firefox-core-tab-next)
    (define-key map (kbd "M-b") 'exwm-firefox-core-tab-previous)
    (define-key map (kbd "C-c C-c") 'exwm-firefox-core-copy)
    (define-key map (kbd "C-c n") 'exwm-firefox-core-tab-new)
    (define-key map (kbd "C-c d") 'exwm-firefox-core-tab-close)
    (define-key map (kbd "C-c b") 'exwm-firefox-core-history-back)
    (define-key map (kbd "C-c f") 'exwm-firefox-core-history-forward)
    (define-key map (kbd "C-c C-d") 'exwm-firefox-core-window-close)
    (define-key map (kbd "C-c C-n") 'exwm-firefox-core-window-new)
    (define-key map (kbd "C-c C-p") 'exwm-firefox-core-window-new-private)
    (define-key map (kbd "C-l") 'exwm-firefox-core-focus-search-bar)
    (define-key map (kbd "C-/") 'exwm-firefox-core-undo)
    (define-key map (kbd "M-<") 'exwm-firefox-core-top)
    (define-key map (kbd "M->") 'exwm-firefox-core-bottom)
    (define-key map (kbd "C-c C-b") 'exwm-firefox-core-bookmark-new)
    (define-key map (kbd "C-c r") 'exwm-firefox-core-reload)
    (define-key map (kbd "C-c C-r") 'exwm-firefox-core-reload-override-cache)
    (define-key map (kbd "C-c B") 'exwm-firefox-core-bookmark-menu)
    (define-key map (kbd "C-c C-b") 'exwm-firefox-core-bookmark-new)
    (define-key map (kbd "C-c C-t m") 'exwm-firefox-core-tab-mute)
    (define-key map (kbd "C-c C-t l") 'exwm-firefox-core-tab-last)    
    (define-key map (kbd "C-c C-t f") 'exwm-firefox-core-tab-first)
    (define-key map (kbd "C-d") 'exwm-firefox-core-cut)
    (define-key map (kbd "C-c C-o f") 'exwm-firefox-core-open-file)
    (define-key map (kbd "C-c C-q") 'exwm-firefox-core-quit)
    (define-key map (kbd "C-c C-m r") 'exwm-firefox-core-reader-mode)
    (define-key map (kbd "C-c C-s") 'exwm-firefox-core-save-page)
    map))

(defvar exwm-firefox-class-names
  '("firefox-default" "firefox" "Firefox"
    "Nightly" "Icecat" "icecat-default"
    "icecat" "Iceweasel")
  "The class name used for detecting if current buffer is a firefox browser.")

(defun holyK-activate-if-firefox ()
  "Activates firefox-holyK-mode mode when buffer is firefox.
Firefox variant can be assigned in 'exwm-firefox-class-names`"
  (interactive)
  (when (member exwm-class-name exwm-firefox-class-names)
    (exwm-firefox-holyK-mode 1)
    (setq-local exwm-input-line-mode-passthrough nil)
    ;; if exwm-input-line-mode-passthrough t
    ;; the mouse will stop working properly
    ))

(define-minor-mode exwm-firefox-holyK-mode
  "Get Emacs keybindings in Firefox with EXWM."
  :lighter " Firefox/EXWM"
  (if exwm-firefox-holyK-mode
      (add-hook 'window-configuration-change-hook 'holyK-activate-if-firefox)
    (remove-hook 'window-configuration-change-hook 'holyK-activate-if-firefox)))



(provide 'exwm-holyK-firefox)

;;; exwm-holyK-firefox.el ends here.