summaryrefslogtreecommitdiff
path: root/.config/emacs/modules/bd--windows.el
blob: d14e3258f80516c149ef095d96b1d83a4e9bd286 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
;; -*- lexical-binding: t; -*-


;;;; defaults
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)

;; no fringe
(fringe-mode '(0 . 0))

;; movement
(defvar-keymap bd/windmove
  :repeat t
  "b" #'windmove-left
  "n" #'windmove-down
  "f" #'windmove-right
  "p" #'windmove-up
  "B" #'windmove-swap-states-left
  "N" #'windmove-swap-states-down
  "F" #'windmove-swap-states-right
  "P" #'windmove-swap-states-up)

(keymap-global-set "H-o" bd/windmove)
(repeat-mode 1)


;; dedication
(defun toggle-current-window-dedication ()
  "Adds or revokes dedicated window status from a buffer. A
dedicated buffer will never be automatically orphaned."
  (interactive)
  (let* ((window    (selected-window))
         (dedicated (window-dedicated-p window)))
    (set-window-dedicated-p window (not dedicated))
    (message "Window %sdedicated to %s"
             (if dedicated "no longer " "")
             (buffer-name))))

;; reading mode
(defun split-and-follow ()
  (interactive)
  (delete-other-windows)
  (split-window-horizontally)
  (split-window-horizontally)
  (balance-windows)
  (other-window -1)
  (follow-mode 1))

;; alpha
(defun bd/clamp (lower-bound upper-bound value)
  (max lower-bound (min value upper-bound)))

(defun set-frame-alpha (value)
  "Sets the transparency of the frame background. 0=transparent/100=opaque
Due to a bug with guix-packaged emacs, only uses true-transparency on wayland."
  (interactive "nTransparency Value (30 - 100 opaque): ")
  (setq value (bd/clamp 30 100 value))
  (if (equal display "wayland")
      (set-frame-parameter (selected-frame) 'alpha-background value)
    (set-frame-parameter (selected-frame) 'alpha `(,value . ,value)))
  (message "Alpha set to %d" value))
(if (equal display "wayland")
    (add-to-list 'default-frame-alist '(alpha-background . 66))
  (add-to-list 'default-frame-alist '(alpha . (82 . 82))))


(require 'project)
;;;; popper
(use-package popper
  :demand t
  :bind (("C-`" . 'popper-toggle-latest)
         ("M-`" . 'popper-cycle)
         ("C-M-`" . popper-toggle-type))
  :config
  (popper-mode)
  (popper-echo-mode)
  :custom
  (popper-reference-buffers
   '(
     ;; native
     ("\\*Async Shell Command\\*.*" . hide)
     compilation-mode
     completion-list-mode
     messages-buffer-mode
     occur-mode
     ("Output\\*$" . hide)
     ;; info
     help-mode
     Info-mode
     "^\\*slime-description.*\\*$"
     ;; repls
     geiser-repl-mode
     slime-repl-mode
     ;; shells
     "^\\*eshell.*\\*$" eshell-mode
     "^\\*shell.*\\*$" shell-mode
     "^\\*term.*\\*$" term-mode
     ;; magit
     magit-diff-mode
     magit-status-mode
     ;; emms
     emms-playlist-mode
     ))
  (popper-display-control 'nil)
  (popper-mode-line '(:eval (propertize " P" 'face 'mode-line-emphasis)))
  (popper-group-function #'popper-group-by-project))


;;;; shackle
(use-package shackle
  :demand t
  :config
  (shackle-mode)
  :custom
  (shackle-rules '(
                   ;; native
                   (compilation-mode :select nil :align bottom :size 0.2)
                   (completion-list-mode :select nil :align bottom :size 0.1)
                   ;; info
                   (help-mode :noselect t :align left :size 0.3)
                   (Info-mode :select t :align left :size 0.4)
                   ("^\\*slime-description.*\\*$" :regexp t :select t :align left)
                   ;; repls
                   (geiser-repl-mode :select t :align right)
                   (slime-repl-mode :select t :align right)
                   ;; shells
                   (".*eshell.*\\*$" :regexp t :select t :align above :size 0.3)
                   (".*shell.*\\*$" :regexp t :select t :align above :size 0.3)
                   ("^\\*term.*\\*$" :regexp t :select t :align above :size 0.3)
                   ;; magit
                   (magit-status-mode :select t :align bottom :size 0.3)
                   (magit-diff-mode :select nil :align right :size 0.3)
                   ;; emms
                   (emms-playlist-mode :select t :align left :size 0.2)
                   ))
  (shackle-default-rule '(:select t)))


(provide 'bd--windows)