The conversion of certain keystrokes into a signal is performed at a very low level: it's done by the generic terminal driver in the kernel, when it relays between the terminal emulator process or physical terminal hardware and the program running in the terminal. This driver only understands characters (and by characters, I mean bytes — back when these interfaces were designed, multibyte character sets weren't a thing).
Most keystrokes involving modifiers other than Shift or involving function keys have no corresponding character, so the terminal must send a multi-character escape sequence (beginning with the ASCII escape character). See bash - wrong key sequence bindings with control+alt+space and How do keyboard input and text output work? for more background on this topic.
There are characters corresponding to Ctrl+letter (the ASCII control characters), but not to Super+letter. Meta+C sends the two-character sequence ESC
C
, and Super+C sends just C
by default in most terminals. So you can rebind the signals on Ctrl+letter (and a few punctuation symbols), to a single-byte printable character, and that's about it (also to a non-ASCII byte but that would wreak havoc with UTF-8).
The only solution is to configure your terminal emulator to send Ctrl+C for whatever keystroke you want to cause to trigger SIGINT. For Rxvt, you're on the right track, but ^C
inserts the two characters ^
and C
, you need the control-c character instead, which you can specify with an octal escape. Furthermore M-c
is Meta+C, not Super+C; for Super+C, run xmodmap -pm
, note which of mod1
through mod5
is Super, and use the corresponding digit as the modifier character, e.g.
URxvt.keysym.5-c: \003
Meta-C
(physical Ctrl-C) instead.URxvt.keysym.M-c: ^C
not do what you want?^C
needs to be\003
, andM-c
is of course Meta-C and not Super-C. I've edited my answer.