rux616/karabiner-windows-mode

Ctrl + C shortcut isn't working inside a build-in terminal in Visual Studio Code

jedrzejchalubek opened this issue ยท 10 comments

A standard Ctrl + c shortcut which terminates the current process is not working in the build-in VSC terminal. The same shortcut works perfectly in standard and iTerm terminals. I have all 'Complex modifications' enabled.

I suppose it's a problem that we want keys to be remapped when using VSC, but disabled when focusing it's inside the terminal. There is any "way around" for this problem?

I personally got around this problem by excluding VSC from all remappings and then do the mapping inside VSC itself. Then I use ctrl-c to break in Terminal and mac-c to copy.

It's not up-to-date, but my fork is here for comparison. https://github.com/samuelneff/karabiner-windows-mode/tree/sam-additions

I am also struggling with this very same issue. Have you come to any conclusion?

@MNorgren Nope, I didn't find any reasonable or comfortable solution. For now, just closing and creating a new terminal in VSC whenever I need it to terminate it ๐Ÿ˜ž

I've also having this problem, but in PyCharm.

Would it be possible to only map the left Ctrl key for Ctrl + c to copy, and leave the right Ctrl alone, so that it would still work for sending a normal Ctrl + c interrupt at the terminal?

I just made a change (#58) to use the suggestion of only using left control for the bind. @jedrzejchalubek @MNorgren @WhiteHotLoveTiger, please try the new binding and see if that at least serves as a decent workaround.

There's also the alternative of leaving the IDE's off the CTRL+C binding altogether, meaning CMD+C would have to be used to copy, but that might be a worthy tradeoff? Let me know and we'll work at creating a worthwhile solution.

It doesn't work well with the PC-Style Copy/Paste/Cut

Any working solution for this?

You can set a custom shortcut and target the terminal in vscode.

{
      "key": "cmd+c",
      "command": "workbench.action.terminal.sendSequence",
      "args": {
        "text": "\u0003"
      },
      "when": "terminalFocus"
  }

Note that I have already swapped cmd with ctl

Jaimi5 commented

I did a rule that when clicking Ctrl+Shift+C it will execute the Ctrl+C, even if it is remapped with the karabiner-elements.

{
    "description": "Quit application from terminal with Control+shift+c",
    "manipulators": [
        {
            "type": "basic",
            "from": {
                "key_code": "c",
                "modifiers": {
                    "mandatory": [
                        "left_control",
                        "left_shift"
                    ],
                    "optional": [
                        "caps_lock"
                    ]
                }
            },
            "to": [
                {
                    "shell_command": "osascript -e 'tell application \"System Events\" to keystroke \"c\" using control down' end tell"
                }
            ]
        }
    ]
}

Hope this helps someone!