-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathпро-запуск-программ.el
52 lines (44 loc) · 3.07 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
;; Показывать команду в имени буфера
(defun my-async-shell-command-advice (orig-fun command &rest args)
"Create a custom buffer name for async-shell-command using COMMAND."
(let ((buffer-name (format "*Async: %s*" command)))
(with-current-buffer (get-buffer-create buffer-name)
(apply orig-fun command args))))
(advice-add 'async-shell-command :around #'my-async-shell-command-advice)
(let ((программы '(("nm-applet" "Сетевой апплет") ("blueman-applet" "Блутус апплет") ("copyq" "Буфер обмена") ("udiskie -t" "Управление дисками") ("dunst -conf ~/pro/etc/dunstrc" "Нотификации") ("pasystray" "Микшер в трее") ("xset s noblank" "Предотвращаем затемнение экрана") ("xset s off" "Отключаем заставку экрана") ("xset -dpms" "Отключаем функции энергосбережения DPMS"))))
(require 'cl-lib)
;; Список для хранения активных процессов
(defvar async-shell-processes '() "Список активных асинхронных процессов.")
(defun запустить-программу (command)
"Run COMMAND asynchronously and log output to the *Messages* buffer."
(let ((process (start-process-shell-command "async-shell-command" "*Async Shell Command*" command)))
(set-process-filter process
(lambda (proc output)
(message "%s" output)))
;; Сохраняем процесс в список
(push process async-shell-processes)))
(defun выключить-все-запущенные-программы ()
"Terminate all programs from keys-table asynchronously."
(interactive)
(dolist (proc async-shell-processes)
(when (process-live-p proc)
(kill-process proc))) ;; Завершаем каждый процесс
(setq async-shell-processes '()) ;; Очищаем список после завершения
(message "Все программы остановлены."))
(add-hook 'kill-emacs-hook 'выключить-все-запущенные-программы)
(defun запустить-программы-из-таблицы ()
"Запускает все программы из таблицы"
(interactive)
(let ((commands (mapcar 'car программы)) ;; Извлечение команд
(имена (mapcar 'cadr программы)) ;; Извлечение примечаний
(delay 12)) ;; Начальная задержка
(cl-loop for (cmd program) in (cl-mapcar 'list commands имена)
do
(run-at-time delay nil
(lambda (command prog)
(message "Запуск: %s [%s]" prog command) ;; Печать сообщения с именем программы
(запустить-программу (concat "dbus-launch " command)))
cmd program)
(setq delay (+ delay 0.3)))))
(запустить-программы-из-таблицы)
)