From 9ab47bef1d29dc765e577ea61ed0752e1e5262e7 Mon Sep 17 00:00:00 2001 From: Jason Dufair Date: Wed, 15 Feb 2012 22:49:49 -0500 Subject: [PATCH] cygwin support --- lein-swank/src/leiningen/jack_in.clj | 12 +++++++----- src/swank/util/sys.clj | 27 +++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/lein-swank/src/leiningen/jack_in.clj b/lein-swank/src/leiningen/jack_in.clj index df366b1..5d37ffd 100644 --- a/lein-swank/src/leiningen/jack_in.clj +++ b/lein-swank/src/leiningen/jack_in.clj @@ -1,7 +1,8 @@ (ns leiningen.jack-in (:require [clojure.java.io :as io] [clojure.string :as string] - [leiningen.swank :as swank]) + [leiningen.swank :as swank] + [swank.util.sys :as util]) (:import (java.security MessageDigest))) (def ^:private payloads-file-name "swank_elisp_payloads.clj") @@ -23,10 +24,11 @@ (let [feature (second (re-find #".*/(.*?).el$" resource)) checksum (subs (hex-digest resource) 0 8) filename (format "%s-%s" feature checksum) - basename (-> (System/getProperty "user.home") - (io/file ".emacs.d" "swank" filename) - (.getAbsolutePath) - (.replaceAll "\\\\" "/")) + basename (util/universal-path + (-> (util/preferred-user-home-path) + (io/file ".emacs.d" "swank" filename) + (.getAbsolutePath) + (.replaceAll "\\\\" "/"))) elisp (str basename ".el") bytecode (str basename ".elc") elisp-file (io/file elisp)] diff --git a/src/swank/util/sys.clj b/src/swank/util/sys.clj index f76c319..ea455c8 100644 --- a/src/swank/util/sys.clj +++ b/src/swank/util/sys.clj @@ -1,4 +1,5 @@ -(ns swank.util.sys) +(ns swank.util.sys + (:import (java.io BufferedReader InputStreamReader))) (defn get-pid "Returns the PID of the JVM. This is largely a hack and may or may @@ -9,5 +10,27 @@ (System/getProperty "pid"))) {:tag String}) +(defn cmd [p] + (.. Runtime getRuntime (exec (str p)))) + +(defn cmdout [o] + (let [r (BufferedReader. + (InputStreamReader. (.getInputStream o)))] + (line-seq r))) + +;; would prefer (= (System/getenv "OSTYPE") "cygwin") +;; but clojure's java not in cygwin env +(defn is-cygwin? [] + (not= nil (try (cmdout (cmd "cygpath c:\\")) (catch Exception e)))) + +(defn universal-path [path] + (if (is-cygwin?) + (first (cmdout (cmd (str "cygpath " path)))) + path)) + +(defn preferred-user-home-path [] + (or (System/getenv "HOME") + (System/getProperty "user.home"))) + (defn user-home-path [] - (System/getProperty "user.home")) + (universal-path (preferred-user-home-path)))