Skip to content

Commit 3ce3eb7

Browse files
committed
Gracefully handle a missing emacsclient
1 parent 5682d2f commit 3ce3eb7

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

CHANGELOG.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
# Unreleased
22

3-
## Added
4-
53
## Fixed
64

7-
## Changed
5+
- Make sure `--cider-nrepl` works, even when `emacsclient` is not available,
6+
e.g. for Calva
87

98
# 0.3.26-alpha (2022-09-20 / 79a8d9a)
109

@@ -31,4 +30,4 @@ Initial release
3130
- lambdaisland.classpath integration
3231
- Support for cider-nrepl, refactor-nrepl
3332
- Basic support for shadow-cljs cljs nREPL-base REPL
34-
- Auto-connect for Emacs
33+
- Auto-connect for Emacs

src/lambdaisland/launchpad.clj

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@
2222
[nil "--emacs" "Shorthand for --cider-nrepl --refactor-nrepl --cider-connect"]])
2323

2424
(def default-nrepl-version "1.0.0")
25-
(def default-cider-version "0.28.3")
26-
(def default-refactor-nrepl-version "3.5.2")
25+
26+
;; Unless we have a mechanism of automatically updating these I would use
27+
;; `RELEASE` here, so non-emacs user always default to the latest version. This
28+
;; is a good candidate for making this configurable, for explicitness.
29+
(def default-cider-version "RELEASE")
30+
(def default-refactor-nrepl-version "RELEASE")
2731

2832
(def classpath-coords {:mvn/version "0.4.44"})
2933
(def jnr-posix-coords {:mvn/version "3.1.15"})
@@ -88,26 +92,30 @@
8892
"Load/require an emacs package, will return `true` on success, `false` on failure.
8993
Throws if `emacsclient` is not found."
9094
[lib]
91-
(= (str lib) (str/trim (eval-emacs `(~'require '~lib)))))
95+
(try
96+
(= (str lib) (str/trim (eval-emacs `(~'require '~lib))))
97+
(catch java.io.IOException e
98+
;; We swallow this because if Emacs isn't installed we want to simply
99+
;; return `nil`. People might want the CIDER or refactor-nrepl middlewares
100+
;; even though they are not running Emacs.
101+
)))
92102

93103
(defn emacs-cider-version
94104
"Find the CIDER version that is currently in use by the running Emacs instance."
95105
[]
96-
(if (emacs-require 'cider)
106+
(when (emacs-require 'cider)
97107
(read-string
98108
(eval-emacs '(if (boundp 'cider-required-middleware-version)
99109
cider-required-middleware-version
100-
(upcase cider-version))))
101-
(warn "Failed to load `cider` in Emacs, is it installed?")))
110+
(upcase cider-version))))))
102111

103112
(defn emacs-refactor-nrepl-version
104113
"Find the refactor-nrepl version that is required by the `clj-refactor` version
105114
installed in Emacs."
106115
[]
107-
(if (emacs-require 'clj-refactor)
116+
(when (emacs-require 'clj-refactor)
108117
(read-string
109-
(eval-emacs 'cljr-injected-middleware-version))
110-
(warn "Failed to load `clj-refactor` in Emacs, is it installed?")))
118+
(eval-emacs 'cljr-injected-middleware-version))))
111119

112120
(defn compute-middleware
113121
"Figure out the nREPL middleware based on CLI flags"

0 commit comments

Comments
 (0)