From 95f80f9c447998330fe17f1ed56be7711ea31382 Mon Sep 17 00:00:00 2001 From: Daneel Date: Mon, 23 Feb 2026 13:40:39 +0100 Subject: [PATCH] ement: proper auto-restore and open-panel flow my/ement-open now handles 3 cases: 1. Already connected -> ement-list-rooms immediately 2. Sessions file exists -> ement-connect (no credentials), then open rooms via ement-after-initial-sync-hook 3. No saved session -> call-interactively ement-connect, then rooms my/ement-open-after-sync: self-removing hook that opens room list after initial sync completes (regardless of how connect was triggered). Startup auto-connect unchanged (doom-after-init-hook). --- config.el | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) 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)