Actually I just did some tidying while I was looking at this so here's a diff against latest git:
diff --git a/input-keys.c b/input-keys.c index 0953ce7..1d75809 100644 --- a/input-keys.c +++ b/input-keys.c @@ -130,6 +130,9 @@ const struct input_key_ent input_keys[] = { { KEYC_KP_ENTER, "\n", 0 }, { KEYC_KP_ZERO, "0", 0 }, { KEYC_KP_PERIOD, ".", 0 }, + + /* xterm modifyOtherKeys keys. */ + { '\r'|KEYC_CTRL, "\033[27;5;13~", 0 }, }; /* Translate a key code into an output key sequence. */ diff --git a/key-string.c b/key-string.c index df17739..d646136 100644 --- a/key-string.c +++ b/key-string.c @@ -170,7 +170,7 @@ key_string_lookup_string(const char *string) } /* Convert the standard control keys. */ - if (key < KEYC_BASE && (modifiers & KEYC_CTRL)) { + if (key < KEYC_BASE && key != '\r' && (modifiers & KEYC_CTRL)) { if (key >= 97 && key <= 122) key -= 96; else if (key >= 64 && key <= 95) diff --git a/tty-keys.c b/tty-keys.c index bd7fdb1..3c0427f 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -174,6 +174,9 @@ const struct tty_default_key_raw tty_default_raw_keys[] = { { "\033[8@", KEYC_END|KEYC_CTRL|KEYC_SHIFT }, { "\033[6@", KEYC_NPAGE|KEYC_CTRL|KEYC_SHIFT }, { "\033[5@", KEYC_PPAGE|KEYC_CTRL|KEYC_SHIFT }, + + /* xterm modifyOtherKeys keys. */ + { "\033[27;5;13~", '\r'|KEYC_CTRL }, }; /* Default terminfo(5) keys. */ diff --git a/tty.c b/tty.c index 868032d..500757e 100644 --- a/tty.c +++ b/tty.c @@ -223,7 +223,7 @@ tty_start_tty(struct tty *tty) tty_puts(tty, "\033[?1000l"); if (tty_term_has(tty->term, TTYC_XT)) - tty_puts(tty, "\033[c"); + tty_puts(tty, "\033[c\033[>4;1m"); tty->cx = UINT_MAX; tty->cy = UINT_MAX; @@ -287,6 +287,9 @@ tty_stop_tty(struct tty *tty) if (tty_term_has(tty->term, TTYC_KMOUS)) tty_raw(tty, "\033[?1000l"); + if (tty_term_has(tty->term, TTYC_XT)) + tty_puts(tty, "\033[>4m"); + tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP)); } On Fri, Feb 15, 2013 at 01:48:27AM +0000, Nicholas Marriott wrote: > You can't bind arbitrary key strings at the moment and it wouldn't work > anyway because: > > - The program must tell xterm to send these and tmux doesn't do this. > > - emacs only accepts the keys when TERM=xterm, not when TERM=screen. > > There has been some talk of supporting xterm modifyOtherKeys but so far > nobody has done it. > > This diff will send the sequence to turn on modifyOtherKeys and pass > C-Enter through which should be enough for you if you can persuade emacs > to accept it inside tmux. > > However I'm not going to commit it as it is, because I think we need to > a) support all the keys modifyOtherKeys affects, not just Enter b) only > send them through to the terminal inside if the application has > requested them with CSI 4;1m or CSI 4;2m and the xterm-keys option is > enabled. If you feel like picking it up that would be great otherwise > it'll have to wait til I get the time and inclination to finish it :-). > > > diff --git a/input-keys.c b/input-keys.c > index 0953ce7..1d75809 100644 > --- a/input-keys.c > +++ b/input-keys.c > @@ -130,6 +130,9 @@ const struct input_key_ent input_keys[] = { > { KEYC_KP_ENTER, "\n", 0 }, > { KEYC_KP_ZERO, "0", 0 }, > { KEYC_KP_PERIOD, ".", 0 }, > + > + /* xterm modifyOtherKeys keys. */ > + { '\r'|KEYC_CTRL, "\033[27;5;13~", 0 }, > }; > > /* Translate a key code into an output key sequence. */ > diff --git a/key-string.c b/key-string.c > index df17739..d646136 100644 > --- a/key-string.c > +++ b/key-string.c > @@ -170,7 +170,7 @@ key_string_lookup_string(const char *string) > } > > /* Convert the standard control keys. */ > - if (key < KEYC_BASE && (modifiers & KEYC_CTRL)) { > + if (key < KEYC_BASE && key != '\r' && (modifiers & KEYC_CTRL)) { > if (key >= 97 && key <= 122) > key -= 96; > else if (key >= 64 && key <= 95) > diff --git a/tty-keys.c b/tty-keys.c > index 681f31b..08d846d 100644 > --- a/tty-keys.c > +++ b/tty-keys.c > @@ -186,6 +186,9 @@ const struct tty_key_ent tty_keys[] = { > { 0, "\033[6@", KEYC_NPAGE|KEYC_CTRL|KEYC_SHIFT,TTYKEY_RAW }, > { 0, "\033[5@", KEYC_PPAGE|KEYC_CTRL|KEYC_SHIFT,TTYKEY_RAW }, > > + /* xterm modifyOtherKeys keys. */ > + { 0, "\033[27;5;13~", '\r'|KEYC_CTRL, TTYKEY_RAW }, > + > /* terminfo lookups below this line so they can override raw keys. */ > > /* Function keys. */ > diff --git a/tty.c b/tty.c > index e810f36..49a469c 100644 > --- a/tty.c > +++ b/tty.c > @@ -223,7 +223,7 @@ tty_start_tty(struct tty *tty) > tty_puts(tty, "\033[?1000l"); > > if (tty_term_has(tty->term, TTYC_XT)) > - tty_puts(tty, "\033[c"); > + tty_puts(tty, "\033[c\033[>4;1m"); > > tty->cx = UINT_MAX; > tty->cy = UINT_MAX; > @@ -287,6 +287,9 @@ tty_stop_tty(struct tty *tty) > if (tty_term_has(tty->term, TTYC_KMOUS)) > tty_raw(tty, "\033[?1000l"); > > + if (tty_term_has(tty->term, TTYC_XT)) > + tty_puts(tty, "\033[>4m"); > + > tty_raw(tty, tty_term_string(tty->term, TTYC_RMCUP)); > } > > > > > > > > On Thu, Feb 14, 2013 at 10:50:11PM +0100, Csaba Andras wrote: > > I use xterm. Without tmux emacs is able to tell the difference between > > Enter and C-Enter. > > > > I couldn't use "cat" as you described to find out the code because cat > > interpreted it as a line end. > > > > However I could figure out what is given to emacs by xterm with > > "strace -v -e trace=read" > > > > Enter sends: read(3, "\r", 1) = 1 > > C-Enter sends: read(3, "\33[27;5;13~", 10) = 10 > > > > This is not the only key combination which gets eaten by tmux. > > I would prefer if tmux would send every sequence through if it was not > > meant for tmux control. > > If that's not possible do I have a chance to whitelist the sequences I > > want to allow? > > > > Thx, > > Csaba > > > > On Thu, Feb 14, 2013 at 11:47 AM, Nicholas Marriott > > <nicholas.marri...@gmail.com> wrote: > > > > > > C-Enter doesn't send anything unique in most terminals, what does it > > > send in yours outside tmux? Run "cat" then press C-Enter and tell me > > > what you see. > > > > > > Also tell me what terminal you are using. > > > > > > > > > On Tue, Feb 12, 2013 at 01:34:55AM +0100, Csaba Andras wrote: > > > > Hi > > > > Tmux doesn't forward a few keyboard combinations that I need for > > > > org-mode > > > > in emacs. > > > > The first one is C-Enter (org-insert-heading-respect-content). > > > > I've tried Bindkey :send-keys C-Enter but that doesn't work. > > > > It seems to me that it is intentionally stopped. See this change > > > > by*Micah > > > > Cowan: > > > > [1]http://sourceforge.net/mailarchive/message.php?msg_id=25446931 > > > > Is there a workaround for me to get C-Enter working? > > > > Cheers, > > > > Csaba > > > > > > > > References > > > > > > > > Visible links > > > > 1. http://sourceforge.net/mailarchive/message.php?msg_id=25446931 > > > > > > > ------------------------------------------------------------------------------ > > > > Free Next-Gen Firewall Hardware Offer > > > > Buy your Sophos next-gen firewall before the end March 2013 > > > > and get the hardware for free! Learn more. > > > > http://p.sf.net/sfu/sophos-d2d-feb > > > > > > > _______________________________________________ > > > > tmux-users mailing list > > > > tmux-users@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/tmux-users > > > ------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users