summaryrefslogtreecommitdiff
path: root/cider-interaction.el
diff options
context:
space:
mode:
Diffstat (limited to 'cider-interaction.el')
-rw-r--r--cider-interaction.el32
1 files changed, 23 insertions, 9 deletions
diff --git a/cider-interaction.el b/cider-interaction.el
index de5dd374..494f77b0 100644
--- a/cider-interaction.el
+++ b/cider-interaction.el
@@ -574,15 +574,29 @@ path or an entry within a zip/jar archive."
(path (cider--file-path file))
(name (format "%s:%s" path entry)))
(or (get-file-buffer name)
- (with-current-buffer (generate-new-buffer
- (file-name-nondirectory entry))
- (archive-zip-extract path entry)
- (set-visited-file-name name)
- (setq-local default-directory (file-name-directory path))
- (setq-local buffer-read-only t)
- (set-buffer-modified-p nil)
- (set-auto-mode)
- (current-buffer)))))))
+ (if (tramp-tramp-file-p path)
+ (progn
+ ;; Use emacs built in archiving
+ (find-file path)
+ (goto-char (point-min))
+ ;; Make sure the file path is followed by a newline to
+ ;; prevent eg. clj matching cljs.
+ (search-forward (concat entry "\n"))
+ ;; moves up to matching line
+ (forward-line -1)
+ (let ((opened-buffer (current-buffer)))
+ (archive-extract)
+ (current-buffer)))
+ ;; Use external zip program to just extract the single file
+ (with-current-buffer (generate-new-buffer
+ (file-name-nondirectory entry))
+ (archive-zip-extract path entry)
+ (set-visited-file-name name)
+ (setq-local default-directory (file-name-directory path))
+ (setq-local buffer-read-only t)
+ (set-buffer-modified-p nil)
+ (set-auto-mode)
+ (current-buffer))))))))
(defun cider-find-var (var)
"Return a buffer visiting the definition for VAR, or nil if not found."