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).
This commit is contained in:
29
config.el
29
config.el
@@ -883,19 +883,38 @@ Keeps the status bar and tab bar fully visible at any zoom level.")
|
|||||||
) ; end after! ement
|
) ; end after! ement
|
||||||
|
|
||||||
;; Defined outside after! so Doom registers them as proper interactive commands.
|
;; 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 ()
|
(defun my/ement-maybe-restore ()
|
||||||
"Restore saved ement session silently (no credentials prompt)."
|
"Restore saved ement session silently (no credentials prompt)."
|
||||||
(require 'ement)
|
(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")))
|
(ement-connect :user-id "@martin:sukany.cz")))
|
||||||
|
|
||||||
(defun my/ement-open ()
|
(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)
|
(interactive)
|
||||||
(require 'ement)
|
(require 'ement)
|
||||||
(if (and (boundp 'ement-sessions) ement-sessions)
|
(cond
|
||||||
(ement-list-rooms)
|
;; Already connected — open rooms immediately
|
||||||
(my/ement-maybe-restore)))
|
((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)
|
;; Auto-connect on Emacs startup (outside after! — ement may be deferred)
|
||||||
(add-hook 'doom-after-init-hook #'my/ement-maybe-restore)
|
(add-hook 'doom-after-init-hook #'my/ement-maybe-restore)
|
||||||
|
|||||||
Reference in New Issue
Block a user