diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-14 08:07:33 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-14 08:07:33 -0500 |
| commit | c123250c3cf928864aab118e1b9bfbaf9e1102b3 (patch) | |
| tree | 4894ee322c441d8775f26883ff55b62b921ad63b /modules | |
| parent | 1e21c2c31a44d3a2a9e302de4712b482de597058 (diff) | |
| download | dotemacs-c123250c3cf928864aab118e1b9bfbaf9e1102b3.tar.gz dotemacs-c123250c3cf928864aab118e1b9bfbaf9e1102b3.zip | |
feat(telega-config): guard launcher with a helpful message when telega is missing
Without the guard, both `C-; G' and the dashboard Telegram icon
trigger telega's autoload stub directly. When the package isn't
installed yet the user sees `Cannot open load file: telega' in
`*Messages*' with no hint about what to do.
Wrap the launcher in `cj/telega' that checks `featurep' /
`locate-library' first. If telega is present, delegate to it.
Otherwise signal a `user-error' pointing at `scripts/setup-telega.sh'
and the manual `M-x package-install RET telega' fallback. Rebind
`C-; G' and the dashboard "g" key + Telegram icon callback to the
wrapper.
Two new tests in `test-telega-config.el' cover the wrapper paths
(absent -> user-error with the recovery hint; present -> delegates
to `telega') alongside the updated binding assertion.
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/dashboard-config.el | 4 | ||||
| -rw-r--r-- | modules/telega-config.el | 19 |
2 files changed, 20 insertions, 3 deletions
diff --git a/modules/dashboard-config.el b/modules/dashboard-config.el index 2fbed716..b61129ad 100644 --- a/modules/dashboard-config.el +++ b/modules/dashboard-config.el @@ -184,7 +184,7 @@ Adjust this if the title doesn't appear centered under the banner image.") ;; Row 3 ((,(nerd-icons-faicon "nf-fa-telegram") "Telegram" "Telega Telegram Client" - (lambda (&rest _) (telega)) + (lambda (&rest _) (cj/telega)) nil " " "")))) ;; == content @@ -208,7 +208,7 @@ Adjust this if the title doesn't appear centered under the banner image.") (define-key dashboard-mode-map (kbd "s") (lambda () (interactive) (cj/slack-start))) (define-key dashboard-mode-map (kbd "t") (lambda () (interactive) (vterm))) (define-key dashboard-mode-map (kbd "d") (lambda () (interactive) (dirvish user-home-dir))) - (define-key dashboard-mode-map (kbd "g") (lambda () (interactive) (telega)))) + (define-key dashboard-mode-map (kbd "g") (lambda () (interactive) (cj/telega)))) ;; Override banner title centering (must be after dashboard-widgets loads) (with-eval-after-load 'dashboard-widgets diff --git a/modules/telega-config.el b/modules/telega-config.el index 003fa15d..1691a95b 100644 --- a/modules/telega-config.el +++ b/modules/telega-config.el @@ -46,7 +46,24 @@ :custom (telega-use-docker t)) -(keymap-set cj/custom-keymap "G" #'telega) +(defun cj/telega () + "Launch telega.el with a helpful message when it isn't installed yet. + +The =telega= Emacs package uses =:ensure nil= in this config so a +stale MELPA archive index can't take startup down with a 404. The +trade-off: a fresh clone needs a one-time install before this +launcher works. Without this wrapper, the autoload stub fails with +the cryptic =Cannot open load file: telega=; with it, the user gets +pointed at =scripts/setup-telega.sh= and the manual fallback." + (interactive) + (if (or (featurep 'telega) + (locate-library "telega")) + (telega) + (user-error + (concat "telega not installed -- run scripts/setup-telega.sh, " + "or `M-x package-install RET telega'")))) + +(keymap-set cj/custom-keymap "G" #'cj/telega) (with-eval-after-load 'which-key (which-key-add-key-based-replacements |
