Ctrl-C in shell (for interrupt) broken with ios external keyboards


Why is ctrl-c getting remapped to ctrl-m (enter) in the shell when using my ipad external keyboards?

Repl link/Link to where the bug appears:

Any repl. Here is an example: https://replit.com/@miketest3k/EvenPlaintiveApache

Screenshots, links, or other helpful context:

This is an elixir repl. Using an ipad, either in the mobile app or the regular desktop web site, (in safari on the ipad), open the repl. Start a shell. Run iex. The normal way to get out of iex is to type ctrl-c twice. However this does not work. What is going on? To debug — I Install pkgs.kbd, run on the shell command line:

showkey -a

Here I see that, while other keys like ctrl-a and ctrl-b send the correct keycodes, ctrl-c sends decimal 13 — which is actually the value for ctrl-m (or return). So I have no way of sending ctrl-c. I tested 3 external keyboards, all different brands, so it’s not the keyboard itself.

When I use the exact same repl on a mac desktop, the problem does not appear. Ctrl-c sends 03 as expected and works fine.


Interestingly I was able to find a reference to the same problem (undesired remapping of ctrl-c to ctrl-m) in the VSCode code-server project. Control-C not recognized from iPadOS · Issue #1343 · coder/code-server · GitHub They have a workaround by configuring code-server. Is there a way to do something similar in repl-it web or repl-it mobile?