Hello, urxvt/rxvt-unicode has a strange method of handling function keys.
It defines kf1=\E[11~ to kf20=\E[34~ in its terminfo, but only has a concept of 10 function keys (kf1 to kf10), and then uses kf11 to kf20 for the shifted variants. For F11/F12 it sends the same code as for Shift-F1/F2. I've used to use a hack, which makes URXvt behave like xterm, by defining all the special keybindings (http://www.netswarm.net/misc/urxvt-xtermcompat.txt), but that then also requires to set TERM to xterm-*, which has other drawbacks and felt too much of a hack. I've tried to address this in tty-keys.c, without being sure what should get done about the conflicts (Shift-F1 vs. F11), but then it did not work properly with the "xterm-keys" option anyway, which probably uses the common concept of 12 function keys, too?! I think it would be nice if F11/F12 could be ignored with rxvt-unicode by default. diff --git i/tty-keys.c w/tty-keys.c index a987c44..60344d1 100644 --- i/tty-keys.c +++ w/tty-keys.c @@ -120,16 +120,19 @@ const struct tty_default_key_raw tty_default_raw_keys[] = { { "\033[6^", KEYC_NPAGE|KEYC_CTRL }, { "\033[5^", KEYC_PPAGE|KEYC_CTRL }, - { "\033[11$", KEYC_F1|KEYC_SHIFT }, - { "\033[12$", KEYC_F2|KEYC_SHIFT }, - { "\033[13$", KEYC_F3|KEYC_SHIFT }, - { "\033[14$", KEYC_F4|KEYC_SHIFT }, - { "\033[15$", KEYC_F5|KEYC_SHIFT }, - { "\033[17$", KEYC_F6|KEYC_SHIFT }, - { "\033[18$", KEYC_F7|KEYC_SHIFT }, - { "\033[19$", KEYC_F8|KEYC_SHIFT }, - { "\033[20$", KEYC_F9|KEYC_SHIFT }, - { "\033[21$", KEYC_F10|KEYC_SHIFT }, + /* rxvt-unicode only has 10 function keys. + * Shift-f1 to shift-f10 are kf11 to kf20 from terminfo. + * F11/F12 send the same code as Shift-F1/Shift-F12. */ + { "\033[23~", KEYC_F1|KEYC_SHIFT }, + { "\033[24~", KEYC_F2|KEYC_SHIFT }, + { "\033[25~", KEYC_F3|KEYC_SHIFT }, + { "\033[26~", KEYC_F4|KEYC_SHIFT }, + { "\033[28~", KEYC_F5|KEYC_SHIFT }, + { "\033[29~", KEYC_F6|KEYC_SHIFT }, + { "\033[31~", KEYC_F7|KEYC_SHIFT }, + { "\033[32~", KEYC_F8|KEYC_SHIFT }, + { "\033[33~", KEYC_F9|KEYC_SHIFT }, + { "\033[34~", KEYC_F10|KEYC_SHIFT }, { "\033[23$", KEYC_F11|KEYC_SHIFT }, { "\033[24$", KEYC_F12|KEYC_SHIFT }, { "\033[2$", KEYC_IC|KEYC_SHIFT }, @@ -139,16 +142,16 @@ const struct tty_default_key_raw tty_default_raw_keys[] = { { "\033[6$", KEYC_NPAGE|KEYC_SHIFT }, { "\033[5$", KEYC_PPAGE|KEYC_SHIFT }, - { "\033[11@", KEYC_F1|KEYC_CTRL|KEYC_SHIFT }, - { "\033[12@", KEYC_F2|KEYC_CTRL|KEYC_SHIFT }, - { "\033[13@", KEYC_F3|KEYC_CTRL|KEYC_SHIFT }, - { "\033[14@", KEYC_F4|KEYC_CTRL|KEYC_SHIFT }, - { "\033[15@", KEYC_F5|KEYC_CTRL|KEYC_SHIFT }, - { "\033[17@", KEYC_F6|KEYC_CTRL|KEYC_SHIFT }, - { "\033[18@", KEYC_F7|KEYC_CTRL|KEYC_SHIFT }, - { "\033[19@", KEYC_F8|KEYC_CTRL|KEYC_SHIFT }, - { "\033[20@", KEYC_F9|KEYC_CTRL|KEYC_SHIFT }, - { "\033[21@", KEYC_F10|KEYC_CTRL|KEYC_SHIFT }, + { "\033[23^", KEYC_F1|KEYC_CTRL|KEYC_SHIFT }, + { "\033[24^", KEYC_F2|KEYC_CTRL|KEYC_SHIFT }, + { "\033[25^", KEYC_F3|KEYC_CTRL|KEYC_SHIFT }, + { "\033[26^", KEYC_F4|KEYC_CTRL|KEYC_SHIFT }, + { "\033[28^", KEYC_F5|KEYC_CTRL|KEYC_SHIFT }, + { "\033[29^", KEYC_F6|KEYC_CTRL|KEYC_SHIFT }, + { "\033[31^", KEYC_F7|KEYC_CTRL|KEYC_SHIFT }, + { "\033[32^", KEYC_F8|KEYC_CTRL|KEYC_SHIFT }, + { "\033[33^", KEYC_F9|KEYC_CTRL|KEYC_SHIFT }, + { "\033[34^", KEYC_F10|KEYC_CTRL|KEYC_SHIFT }, { "\033[23@", KEYC_F11|KEYC_CTRL|KEYC_SHIFT }, { "\033[24@", KEYC_F12|KEYC_CTRL|KEYC_SHIFT }, { "\033[2@", KEYC_IC|KEYC_CTRL|KEYC_SHIFT }, This can probably also get addressed using terminal-overrides probably, and instead of changing the code, it could have a default for rxvt(-unicode) then. btw: the last commit changing code in this area was the following. I've not managed to trigger the `KEYC_F<X>|KEYC_SHIFT` cases therein. Is the code correct? Shouldn't it at least define all the shifted variants? commit 2056a9ef9e91996c294b5db0a3d01ed415e95e56 Author: nicm <nicm> Date: Mon Jul 21 10:25:48 2014 +0000 Drop explicit support for F13-F20 and change to match the xterm terminfo entry: F13-F24 are S-F1 to S-F12 F25-F36 are C-F1 to C-F12 F37-F48 are C-S-F1 to C-S-F12 F49-F60 are M-F1 to M-F12 and F61-F63 are M-S-F1 to M-S-F3 This should be no difference for applications inside tmux, but means that any key binding for F13 will need to be replaced by S-F1 and so on. diff --git a/input-keys.c b/input-keys.c index 24566df..c75e28d 100644 --- a/input-keys.c +++ b/input-keys.c @@ -57,14 +57,14 @@ const struct input_key_ent input_keys[] = { { KEYC_F10, "\033[21~", 0 }, { KEYC_F11, "\033[23~", 0 }, { KEYC_F12, "\033[24~", 0 }, - { KEYC_F13, "\033[25~", 0 }, - { KEYC_F14, "\033[26~", 0 }, - { KEYC_F15, "\033[28~", 0 }, - { KEYC_F16, "\033[29~", 0 }, - { KEYC_F17, "\033[31~", 0 }, - { KEYC_F18, "\033[32~", 0 }, - { KEYC_F19, "\033[33~", 0 }, - { KEYC_F20, "\033[34~", 0 }, + { KEYC_F1|KEYC_SHIFT, "\033[25~", 0 }, + { KEYC_F2|KEYC_SHIFT, "\033[26~", 0 }, + { KEYC_F3|KEYC_SHIFT, "\033[28~", 0 }, + { KEYC_F4|KEYC_SHIFT, "\033[29~", 0 }, + { KEYC_F5|KEYC_SHIFT, "\033[31~", 0 }, + { KEYC_F6|KEYC_SHIFT, "\033[32~", 0 }, + { KEYC_F7|KEYC_SHIFT, "\033[33~", 0 }, + { KEYC_F8|KEYC_SHIFT, "\033[34~", 0 }, { KEYC_IC, "\033[2~", 0 }, { KEYC_DC, "\033[3~", 0 }, Thanks, Daniel. -- http://daniel.hahler.de/
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
_______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users