This commit is contained in:
Martin Sukany
2026-02-12 19:33:13 +01:00
6 changed files with 205 additions and 0 deletions

141
config.el
View File

@@ -69,6 +69,7 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
;; --------------------------------------------------
;; Org
;; --------------------------------------------------
(setq org-directory "~/org/")
(after! org
@@ -402,3 +403,143 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))."
(when (executable-find "fd")
(setq projectile-generic-command
"fd . -0 --type f --hidden --follow --exclude .git --color=never")))
;; mu4e
(add-to-list 'load-path (expand-file-name "/opt/homebrew/opt/mu/share/emacs/site-lisp/mu/mu4e"))
(after! mu4e
(setq mu4e-maildir "~/.mail"
mu4e-get-mail-command "mbsync personal"
mu4e-update-interval 300
mu4e-change-filenames-when-moving t
mu4e-view-show-images t))
(after! mu4e
(setq mu4e-maildir (expand-file-name "~/.mail")
mu4e-get-mail-command "mbsync personal"
mu4e-update-interval 300
mu4e-change-filenames-when-moving t
mu4e-view-show-images t
;; TADY je to důležité:
mu4e-sent-folder "/personal/Sent"
mu4e-drafts-folder "/personal/Drafts"
mu4e-trash-folder "/personal/Trash"
mu4e-refile-folder "/personal/Archive"))
(after! mu4e
(setq sendmail-program "msmtp"
message-send-mail-function #'message-send-mail-with-sendmail
mail-specify-envelope-from t
message-sendmail-envelope-from 'header))
(setq user-mail-address "martin@sukany.cz"
user-full-name "Martin Sukany")
(map! :map mu4e-view-mode-map
:localleader
"l l" #'org-store-link
"l i" #'org-insert-link)
(map! :map mu4e-headers-mode-map
:localleader
"l l" #'org-store-link
"l i" #'org-insert-link)
;;; ================================
;;; Emacspeak robust ON/OFF for Doom
;;; Default: OFF (won't auto-restart)
;;; Keys:
;;; SPC t s -> Speech ON
;;; SPC t S -> Speech OFF
;;; ================================
(defconst my/emacspeak-dir (expand-file-name "~/.emacspeak"))
(defconst my/emacspeak-wrapper (expand-file-name "~/.local/bin/emacspeak-mac"))
;; Emacspeak uses this to start the speech server.
(setq dtk-program my/emacspeak-wrapper)
;; State flags
(defvar my/emacspeak-loaded nil)
(defvar my/emacspeak-enabled nil)
;; Hard inhibit: when non-nil, Emacspeak is NOT allowed to start/restart the server.
(defvar my/emacspeak-inhibit-server t)
(defun my/emacspeak--ensure-loaded ()
"Load Emacspeak once, safely, without breaking Doom startup."
(unless my/emacspeak-loaded
(setq my/emacspeak-loaded t)
(setq emacspeak-directory my/emacspeak-dir)
;; Load late-ish (but still inside the command that enables it)
(load-file (expand-file-name "lisp/emacspeak-setup.el" emacspeak-directory))
;; After Emacspeak is present, install inhibition advices.
;; These prevent the common 'it restarts by itself' problem.
(with-eval-after-load 'dtk-speak
(dolist (fn '(dtk-initialize dtk-start-process dtk-speak))
(when (fboundp fn)
(advice-add
fn :around
(lambda (orig &rest args)
(if my/emacspeak-inhibit-server
;; OFF mode: do nothing (and crucially: don't restart speaker)
nil
(apply orig args)))))))))
(defun my/emacspeak-on ()
"Enable speech (and allow server start)."
(interactive)
(setq my/emacspeak-inhibit-server nil)
(my/emacspeak--ensure-loaded)
(setq my/emacspeak-enabled t)
(when (fboundp 'dtk-restart)
(ignore-errors (dtk-restart)))
(when (fboundp 'dtk-speak)
(ignore-errors (dtk-speak "Emacspeak on.")))
(message "Emacspeak ON"))
(defun my/emacspeak-off ()
"Disable speech robustly (stop + prevent auto-restart)."
(interactive)
;; First: inhibit any future attempts to start/restart.
(setq my/emacspeak-enabled nil)
(setq my/emacspeak-inhibit-server t)
;; Stop current speech if any.
(when (fboundp 'dtk-stop)
(ignore-errors (dtk-stop)))
;; Kill the server process hard (if it exists).
(when (boundp 'dtk-speaker-process)
(let ((p dtk-speaker-process))
(when (processp p)
(ignore-errors (set-process-sentinel p nil))
(ignore-errors (delete-process p))))
(setq dtk-speaker-process nil))
(message "Emacspeak OFF (server restart inhibited)"))
;; Doom leader keys
(map! :leader
(:prefix ("t" . "toggle")
:desc "Speech ON" "s" #'my/emacspeak-on
:desc "Speech OFF" "S" #'my/emacspeak-off))
(setq dtk-speech-rate 300)
;; emacspeak additional settings
;;(setq emacspeak-speak-messages nil)
;;(setq emacspeak-audio-indentation nil)
(setq emacspeak-speak-echo nil)
(setq emacspeak-character-echo nil)
;;(setq emacspeak-word-echo nil)
(setq emacspeak-line-echo t)
;;(setq emacspeak-speak-messages nil)
(global-set-key (kbd "C-c SPC") #'emacspeak-speak-buffer)
(add-hook 'transient-post-exit-hook #'ignore)
(advice-add 'transient--show :after
(lambda (&rest _)
(dtk-speak (buffer-string))))