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
> > <[email protected]> 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
> > > > [email protected]
> > > > 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users