diff --git a/config.el b/config.el index cff6ed1..518f25b 100644 --- a/config.el +++ b/config.el @@ -883,19 +883,38 @@ Keeps the status bar and tab bar fully visible at any zoom level.") ) ; end after! ement ;; Defined outside after! so Doom registers them as proper interactive commands. + +(defun my/ement-open-after-sync (&rest _) + "Open room list after ement finishes initial sync. Self-removing." + (remove-hook 'ement-after-initial-sync-hook #'my/ement-open-after-sync) + (when (fboundp 'ement-list-rooms) + (ement-list-rooms))) + (defun my/ement-maybe-restore () "Restore saved ement session silently (no credentials prompt)." (require 'ement) - (when (file-exists-p (expand-file-name ement-sessions-file)) + (when (file-readable-p (expand-file-name ement-sessions-file)) (ement-connect :user-id "@martin:sukany.cz"))) (defun my/ement-open () - "Switch to Matrix: reconnect if needed, then open room list." + "Open Matrix panel: show room list (connect/restore if needed). +If already connected: opens room list immediately. +If sessions file exists: auto-restores without credentials, opens rooms after sync. +Otherwise: runs interactive ement-connect, then opens rooms after sync." (interactive) (require 'ement) - (if (and (boundp 'ement-sessions) ement-sessions) - (ement-list-rooms) - (my/ement-maybe-restore))) + (cond + ;; Already connected — open rooms immediately + ((and (boundp 'ement-sessions) ement-sessions) + (ement-list-rooms)) + ;; Saved session exists — restore without credentials, open rooms after sync + ((file-readable-p (expand-file-name ement-sessions-file)) + (add-hook 'ement-after-initial-sync-hook #'my/ement-open-after-sync) + (ement-connect :user-id "@martin:sukany.cz")) + ;; No saved session — interactive connect, open rooms after sync + (t + (add-hook 'ement-after-initial-sync-hook #'my/ement-open-after-sync) + (call-interactively #'ement-connect)))) ;; Auto-connect on Emacs startup (outside after! — ement may be deferred) (add-hook 'doom-after-init-hook #'my/ement-maybe-restore)