Subject: bug#79163: 30.1; [PATCH] Handle remote file names in cmuscheme.el

From: Vinícius Moraes <[email-masked]>
Date: Sun, 03 Aug 2025 00:48:59 +0000

Hello,

I came across a minor problem while using `scheme-load-file' from
`cmuscheme.el' via TRAMP.[tldr-recipe]

As I understand it, currently, `scheme-load-file' sends the file-name
directly to the Scheme interpreter (through `comint-send-string')
without removing TRAMP's remote file name syntax. This seems to make the
interpreter on a remote system (or, in this case, a container) attempt
to load an incorrect file name.

For example:
#;1>
Error: (load) cannot open file: "/podman:demo:/home/t/example.scm"
[...]
<eval> (load "/podman:demo:/home/t/example.scm") <--

(See [tldr-recipe] for the non-simplified/real values and recipe. I was
able to reproduce it with a VM and the `ssh' method as well).

Expected outcome: (load "/home/t/example.scm")

Since `file-local-name' returns the string/argument unaltered for
non-remote file names[1], I _think_ this change should not affect the
current/correct behavior for non-remote scenarios. (`shell' seems to use
a similar approach with `file-local-name' and `expand-file-name' on
remote hosts; I decided to not include `expand-file-name' here because,
in my understanding, `comint-get-source' is already handling the
expansion[2]).

For consistency, I applied the same fix to the `scheme-compile-file'
function as well---since the logic is almost the same.

I have been using this patch downstream without problems, but tackling
it upstream (for multiple Scheme implementations and workflows) could be
a different story. In any case, I hope this report helps. Let me know if
you have any questions or suggestions.

P.S.: This is my first time contributing back here. I consider myself a
Lisp apprentice and I'm still getting familiar with Emacs internals and
conventions.

[tldr-recipe]: Recipe used to reproduce the behavior. 1. \emacs -Q
2. (require 'cmuscheme) 3. (setq scheme-program-name "csi")
4. (find-file "/podman:mkdev-test:/home/ttybitnik/workspace/
test.scm"). 5. (scheme-load-file)
Outcome: '#;1> [...] Error: (load) cannot open file [...]
<eval> (load "/podman:mkdev-test:/home/ttybitnik/workspace/test.scm")
Expected: (load "/home/ttybitnik/workspace/test.scm")

[1]: "[...] (or (file-remote-p file 'localname) file)"

[2]: "[...] (list (expand-file-name (substitute-in-file-name ans)))"

Thanks for all the work on GNU Emacs.

Kind regards,
Vinícius Moraes

From 6b53acd9b35b78c3f8a4024980f80c136796dd6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vin=C3=ADcius=20Moraes?= <[email-masked]>
Date: Sat, 2 Aug 2025 20:52:27 -0300
Subject: [PATCH] Handle remote file names in cmuscheme.el

* lisp/cmuscheme.el (scheme-load-file, scheme-compile-file): Add
'file-local-name' to handle file names on remote systems.

Copyright-paperwork-exempt: yes
---
 lisp/cmuscheme.el | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 51b183de347..0d591791d73 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -416,7 +416,7 @@ in the next one.")
   (setq scheme-prev-l/c-dir/file (cons (file-name-directory    file-name)
 				       (file-name-nondirectory file-name)))
   (comint-send-string (scheme-proc) (concat "(load \""
-					    file-name
+					    (file-local-name file-name)
 					    "\")\n")))
 
 (defun scheme-compile-file (file-name)
@@ -430,7 +430,7 @@ in the next one.")
   (setq scheme-prev-l/c-dir/file (cons (file-name-directory    file-name)
 				       (file-name-nondirectory file-name)))
   (comint-send-string (scheme-proc) (concat "(compile-file \""
-					    file-name
+					    (file-local-name file-name)
 					    "\")\n")))
 
 
-- 
2.50.1