-
Notifications
You must be signed in to change notification settings - Fork 1
/
про-графическую-среду.el
171 lines (140 loc) · 5.88 KB
/
про-графическую-среду.el
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
;;; про-графическую-среду.el --- Оконный менеджер ExWM -*- lexical-binding: t -*-
;;; Commentary:
;; EXWM - Emacs X Window Manager, тайловый оконный менеджер
;;; Code:
(require 'установить-из)
;;;; Xelb
(use-package xelb
:ensure t
:if window-system)
;;;; ExWM
(setq-default exwm-debug t)
(defvar сочетания-для-эмуляции
'(([?\C-b] . left)
([?\M-b] . C-left)
([?\C-f] . right)
([?\M-f] . C-right)
([?\C-p] . up)
([?\C-n] . down)
([?\C-a] . home)
([?\C-e] . end)
([?\M-v] . prior)
([?\C-v] . next)
([?\C-d] . ?\C-x)
([?\M-d] . (C-S-right delete))
;; cut/paste.
([?\M-y] . ?\C-c)
([?\M-w] . ?\C-c)
([?\C-y] . ?\C-v)
;; search
([?\C-s] . ?\C-f)))
(defun скриншот-области ()
"Получить скриншот области и скопировать полученое изоббражение в буфер обмена."
(interactive)
(async-shell-command
"scrot -s '/home/az/Скриншоты/%Y-%m-%d_%H.%M.%S.png' -e 'copyq write image/png - < $f && copyq select 0'" nil nil))
(defun скриншот ()
"Получить скриншот."
(interactive)
(sit-for 1)
(async-shell-command "scrot '/home/az/Скриншоты/%Y-%m-%d-%H-%M_$wx$h.png' -e 'copyq write image/png - < $f && copyq select 0'" nil nil))
(defmacro exwm-input-set-keys (&rest key-bindings)
"Макрос для установки клавиш, работающих поверх приложений Xorg.
KEY-BINDINGS - список пар (клавиша функция)"
`(dolist (kb ',key-bindings)
(cl-destructuring-bind (key cmd) kb
(exwm-input-set-key (kbd key) cmd))))
(use-package exwm
:ensure t
;;:init (установить-из :repo "emacs-exwm/exwm")
:functions (exwm-input-set-key
exwm-workspace-rename-buffer
exwm-enable
exwm-init
exwm-systemtray-mode)
:defines (exwm-class-name
exwm-manage-configurations
exwm-title
exwm-input-prefix-keys)
:if window-system
;;:hook ((exwm-init . exim-start))
:custom ((exwm-workspace-number 2)
(exwm-workspace-show-all-buffers t)
(exwm-layout-show-all-buffers t)
(exwm-manage-force-tiling nil)
(exwm-systemtray-height 16)
(exwm-input-simulation-keys сочетания-для-эмуляции))
:config
;; Смена имени окна
(add-hook 'exwm-update-class-hook
(lambda ()
(exwm-workspace-rename-buffer (concat exwm-class-name exwm-title))))
;; Смена заголовка окна
(defun exwm-update-title-hook ()
(exwm-workspace-rename-buffer (concat exwm-class-name ":" exwm-title)))
(add-hook 'exwm-update-title-hook 'exwm-update-title-hook)
;; Глобальные клавиши над всеми приложениями
(dotimes (i 9)
;;(if (> i 0)
;;(exwm-input-set-key (kbd (format "s-M-%d" i)) `(lambda () (interactive) (exwm-workspace-switch-create ,i))))
;; (exwm-input-set-key (kbd (format "C-s-%d" i)) `(lambda () (interactive) (exwm-workspace-switch-create ,i)))
(exwm-input-set-key (kbd (format "s-<f%d>" i)) `(lambda () (interactive) (exwm-workspace-switch-create ,i)))
(exwm-input-set-key (kbd (format "s-%d" i)) `(lambda () (interactive) (tab-bar-select-tab ,i)))
)
(exwm-input-set-key (kbd "s-<f10>") `(lambda () (interactive) (exwm-workspace-switch-create 0)))
;; (exwm-input-set-keys
;; ("s-M-!" (lambda () (interactive) (exwm-workspace-move-window 1)))
;; ("s-M-@" (lambda () (interactive) (exwm-workspace-move-window 2)))
;; ("s-M-#" (lambda () (interactive) (exwm-workspace-move-window 3)))
;; ("s-M-$" (lambda () (interactive) (exwm-workspace-move-window 4)))
;; ("s-M-%" (lambda () (interactive) (exwm-workspace-move-window 5)))
;; ("s-M-^" (lambda () (interactive) (exwm-workspace-move-window 6)))
;; ("s-M-&" (lambda () (interactive) (exwm-workspace-move-window 7)))
;; ("s-M-)" (lambda () (interactive) (exwm-workspace-move-window 0))))
(setq exwm-manage-configurations '(((equal exwm-title "posframe") floating t floating-mode-line nil)
((equal exwm-class-name "chromebug") floating t floating-mode-line nil width 280
height 175 x 30 y 30 managed t)))
:init
;; Запуск EXWM
(exwm-enable)
(require 'exwm-systemtray)
(exwm-systemtray-mode))
;;;; Режимы ввода EMACS в приложениях
;; В EMACS по-умолчанию раскладка переключается сочетанием C-\
;; exim позволяет использовать стандартные режимы ввода EMACS во всех приложениях Xorg
(use-package exim
:init (установить-из :repo "ch11ng/exim")
:after exwm
:if window-system
:hook ((exwm-init . exim-start))
:config
(push (kbd "C-\\") exwm-input-prefix-keys)
(push (kbd "s-a") exwm-input-prefix-keys)
(push (kbd "s-SPC") exwm-input-prefix-keys))
(provide 'про-графическую-среду)
;;; про-графическую-среду.el ends here
;;;; Редактирование любых полей ввода через EMACS
(use-package exwm-edit
:after exwm
:if window-system
:ensure t
:config)
;;;; Курсор мыши следует за окном в фокусе
(use-package exwm-mff
:after exwm
:if window-system
:functions (exwm-mff-mode)
:ensure t
:init
(exwm-mff-mode t))
;; (use-package exwm-firefox
;; :if window-system
;; :ensure t)
;; (use-package exwm-background
;; :init
;; (установить-из :repo "pestctrl/exwm-background")
;; :config
;; ;;(start-process-shell-command "xcompmgr" nil "xcompmgr -c")
;; )
(provide 'про-графическую-среду)
;;; про-графическую-среду.el ends here