summaryrefslogtreecommitdiff
path: root/geiser-chez.el
diff options
context:
space:
mode:
authorFelipe Lema <felipelema@mortemale.org>2021-11-26 13:31:55 -0300
committerFelipe Lema <felipelema@mortemale.org>2021-12-14 09:26:45 -0300
commit73d1671d69aec54ce81bedac8c55976900e0b945 (patch)
treee69c7a25c3d124ae3ebddc78c02b086a980ac38e /geiser-chez.el
parentab2dde7a345c1c135ec0ed8fcd49eff1114951bd (diff)
downloadgeiser-chez-73d1671d69aec54ce81bedac8c55976900e0b945.tar.gz
geiser-chez-73d1671d69aec54ce81bedac8c55976900e0b945.tar.bz2
add support for Tramp remote files
- Treat files loaded at start as process-local files - `geiser-chez-init-file` won't be added to command-line arguments if it does not exist - if process is remote, copy "geiser.ss" to remote host and tell chez to load the remote copy
Diffstat (limited to 'geiser-chez.el')
-rw-r--r--geiser-chez.el44
1 files changed, 38 insertions, 6 deletions
diff --git a/geiser-chez.el b/geiser-chez.el
index 8c1c178..622acfe 100644
--- a/geiser-chez.el
+++ b/geiser-chez.el
@@ -46,7 +46,10 @@
:group 'geiser-chez)
(geiser-custom--defcustom geiser-chez-init-file "~/.chez-geiser"
- "Initialization file with user code for the Chez REPL."
+ "Initialization file with user code for the Chez REPL.
+
+Do mind that this file is local to running process, so remote process will use
+init file at this location in remote host."
:type 'string
:group 'geiser-chez)
@@ -81,11 +84,40 @@
(defun geiser-chez--parameters ()
"Return a list with all parameters needed to start Chez Scheme.
This function uses `geiser-chez-init-file' if it exists."
- (let ((init-file (and (stringp geiser-chez-init-file)
- (expand-file-name geiser-chez-init-file))))
- `(,@(and init-file (file-readable-p init-file) (list init-file))
- ,(expand-file-name "geiser/geiser.ss" geiser-chez-scheme-dir)
- ,@geiser-chez-extra-command-line-parameters)))
+ (append
+ (when-let ((init-file (and (stringp geiser-chez-init-file)
+ (expand-file-name geiser-chez-init-file))))
+ (if (file-exists-p
+ (concat
+ (file-remote-p default-directory)
+ init-file))
+ (list init-file)
+ (geiser-log--warn
+ "File %s does not exist, so it's not added to CLI args"
+ init-file)))
+ (let* ((local-geiser-module-file
+ (expand-file-name "geiser/geiser.ss" geiser-chez-scheme-dir))
+ (geiser-module-file
+ (if (file-remote-p default-directory)
+ ;; copy the content to remote file
+ (let* ((temporary-file-directory (temporary-file-directory))
+ (temp-dir
+ (make-temp-file "geiser" t))
+ (remote-geiser-module-file
+ (concat
+ (file-name-as-directory
+ temp-dir)
+ "geiser.ss")))
+ ;; write to file
+ (with-temp-buffer
+ (insert-file-contents local-geiser-module-file)
+ (write-file remote-geiser-module-file))
+ (file-local-name
+ remote-geiser-module-file))
+ ;; else, process and file are local
+ local-geiser-module-file)))
+ (list geiser-module-file))
+ geiser-chez-extra-command-line-parameters))
(defconst geiser-chez--prompt-regexp "> ")