Probably it ballses up the scroll region. Can you try this and then see if send-keys -R fixes it:
Index: cmd-send-keys.c =================================================================== RCS file: /cvs/src/usr.bin/tmux/cmd-send-keys.c,v retrieving revision 1.8 diff -u -p -r1.8 cmd-send-keys.c --- cmd-send-keys.c 23 May 2010 19:42:19 -0000 1.8 +++ cmd-send-keys.c 23 Dec 2010 20:35:55 -0000 @@ -19,6 +19,7 @@ #include <sys/types.h> #include <stdlib.h> +#include <string.h> #include "tmux.h" @@ -35,11 +36,12 @@ struct cmd_send_keys_data { char *target; u_int nkeys; int *keys; + int flag_reset; }; const struct cmd_entry cmd_send_keys_entry = { "send-keys", "send", - "[-t target-pane] key ...", + "[-R] [-t target-pane] key ...", 0, "", NULL, cmd_send_keys_parse, @@ -59,9 +61,13 @@ cmd_send_keys_parse(struct cmd *self, in data->target = NULL; data->nkeys = 0; data->keys = NULL; + data->flag_reset = 0; - while ((opt = getopt(argc, argv, "t:")) != -1) { + while ((opt = getopt(argc, argv, "Rt:")) != -1) { switch (opt) { + case 'R': + data->flag_reset = 1; + break; case 't': if (data->target == NULL) data->target = xstrdup(optarg); @@ -72,8 +78,6 @@ cmd_send_keys_parse(struct cmd *self, in } argc -= optind; argv += optind; - if (argc == 0) - goto usage; while (argc-- != 0) { if ((key = key_string_lookup_string(*argv)) != KEYC_NONE) { @@ -106,6 +110,7 @@ cmd_send_keys_exec(struct cmd *self, str struct cmd_send_keys_data *data = self->data; struct window_pane *wp; struct session *s; + struct input_ctx *ictx; u_int i; if (data == NULL) @@ -113,6 +118,22 @@ cmd_send_keys_exec(struct cmd *self, str if (cmd_find_pane(ctx, data->target, &s, &wp) == NULL) return (-1); + + if (data->flag_reset) { + ictx = &wp->ictx; + + memcpy(&ictx->cell, &grid_default_cell, sizeof ictx->cell); + memcpy(&ictx->old_cell, &ictx->cell, sizeof ictx->old_cell); + ictx->old_cx = 0; + ictx->old_cy = 0; + + if (wp->mode == NULL) + screen_write_start(&ictx->ctx, wp, &wp->base); + else + screen_write_start(&ictx->ctx, NULL, &wp->base); + screen_write_reset(&ictx->ctx); + screen_write_stop(&ictx->ctx); + } for (i = 0; i < data->nkeys; i++) window_pane_key(wp, s, data->keys[i]); Index: input.c =================================================================== RCS file: /cvs/src/usr.bin/tmux/input.c,v retrieving revision 1.31 diff -u -p -r1.31 input.c --- input.c 23 Dec 2010 20:18:39 -0000 1.31 +++ input.c 23 Dec 2010 20:35:56 -0000 @@ -946,17 +946,7 @@ input_esc_dispatch(struct input_ctx *ict ictx->old_cx = 0; ictx->old_cy = 0; - screen_reset_tabs(sctx->s); - - screen_write_scrollregion(sctx, 0, screen_size_y(sctx->s) - 1); - - screen_write_insertmode(sctx, 0); - screen_write_kcursormode(sctx, 0); - screen_write_kkeypadmode(sctx, 0); - screen_write_mousemode(sctx, 0); - - screen_write_clearscreen(sctx); - screen_write_cursormove(sctx, 0, 0); + screen_write_reset(sctx); break; case INPUT_ESC_IND: screen_write_linefeed(sctx, 0); Index: screen-write.c =================================================================== RCS file: /cvs/src/usr.bin/tmux/screen-write.c,v retrieving revision 1.43 diff -u -p -r1.43 screen-write.c --- screen-write.c 21 Jun 2010 00:11:12 -0000 1.43 +++ screen-write.c 23 Dec 2010 20:35:56 -0000 @@ -46,6 +46,24 @@ screen_write_stop(unused struct screen_w { } + +/* Reset screen state. */ +void +screen_write_reset(struct screen_write_ctx *ctx) +{ + screen_reset_tabs(ctx->s); + + screen_write_scrollregion(ctx, 0, screen_size_y(ctx->s) - 1); + + screen_write_insertmode(ctx, 0); + screen_write_kcursormode(ctx, 0); + screen_write_kkeypadmode(ctx, 0); + screen_write_mousemode(ctx, 0); + + screen_write_clearscreen(ctx); + screen_write_cursormove(ctx, 0, 0); +} + /* Write character. */ void screen_write_putc( Index: tmux.1 =================================================================== RCS file: /cvs/src/usr.bin/tmux/tmux.1,v retrieving revision 1.195 diff -u -p -r1.195 tmux.1 --- tmux.1 19 Dec 2010 18:35:08 -0000 1.195 +++ tmux.1 23 Dec 2010 20:35:58 -0000 @@ -1465,6 +1465,7 @@ are listed; this may be one of: or .Em emacs-copy . .It Xo Ic send-keys +.Fl R .Op Fl t Ar target-pane .Ar key Ar ... .Xc @@ -1479,6 +1480,9 @@ or ) to send; if the string is not recognised as a key, it is sent as a series of characters. All arguments are sent sequentially from first to last. +The +.Fl R +flag causes the terminal state to be reset. .It Ic send-prefix Op Fl t Ar target-pane Send the prefix key to a window as if it was pressed. If multiple prefix keys are configured, only the first is sent. Index: tmux.h =================================================================== RCS file: /cvs/src/usr.bin/tmux/tmux.h,v retrieving revision 1.254 diff -u -p -r1.254 tmux.h --- tmux.h 21 Dec 2010 22:37:59 -0000 1.254 +++ tmux.h 23 Dec 2010 20:35:59 -0000 @@ -1774,6 +1774,7 @@ char *grid_view_string_cells(struct grid void screen_write_start( struct screen_write_ctx *, struct window_pane *, struct screen *); void screen_write_stop(struct screen_write_ctx *); +void screen_write_reset(struct screen_write_ctx *); size_t printflike2 screen_write_cstrlen(int, const char *, ...); void printflike5 screen_write_cnputs(struct screen_write_ctx *, ssize_t, struct grid_cell *, int, const char *, ...); On Thu, Dec 23, 2010 at 04:37:06PM -0500, Dan Tulovsky wrote: > I can reproduce this every time. We use Cyclades serial console > appliances (http://www.avocent.com/). If I connect to one, and then > do a reboot of the Linux server I am controlling, the terminal gets > into the weird state I described above. It happens with plain > Terminal on the Mac, as well as iTerm. It happened with screen (C-a Z > fixed the terminal in screen). In the Mac Terminal program, <cmd>+R > fixes the terminal. > > So I don't think it's a bug.. I think the Dell servers send some odd > output to the serial port which puts the terminal into this state. > But also, catting a binary file will occasionally require a reset. > (Not that I do that very often...) > > dan > > On Thu, Dec 23, 2010 at 3:25 PM, Nicholas Marriott > <nicholas.marri...@gmail.com> wrote: > > How are you getting the terminal into a state that needs a reset? > > > > If tmux's internal state is bad it is probably a bug. > > > > > > On Thu, Dec 23, 2010 at 01:49:42PM -0500, Dan Tulovsky wrote: > >> I mean the terminal inside tmux. And yes, what I am looking for is > >> the tmux equivalent of screen's C-a Z. > >> > >> thanks > >> dan > >> > >> On Tue, Dec 21, 2010 at 3:56 PM, Nicholas Marriott > >> <nicholas.marri...@gmail.com> wrote: > >> > Do you mean the terminal inside or outside tmux? > >> > > >> > If you mean outside: detach tmux, run reset(1)/stty sane and reattach. > >> > > >> > There is no reason we couldn't have a command (or an argument to > >> > refresh-client) to output rs0 etc but frankly reset(1) generally does a > >> > better job of it. > >> > > >> > > >> > On Tue, Dec 21, 2010 at 03:26:02PM -0500, Dan Tulovsky wrote: > >> >> Hmm.. so I mapped it back to the default, but it doesn't actually > >> >> work. As far as I can tell, nothing happens. The currently broken > >> >> terminal (after a reboot via serial console of the remote server) is > >> >> not scrolling. All output is on the very last line and stays there. > >> >> > >> >> C-b ? shows > >> >> > >> >> r: refresh-client > >> >> > >> >> I've also tried typing it in as a command: > >> >> > >> >> C-b : > >> >> > >> >> : refresh-client > >> >> > >> >> same story. > >> >> > >> >> any ideas? > >> >> > >> >> dan > >> >> > >> >> On Tue, Dec 21, 2010 at 3:07 PM, Dan Tulovsky <d...@wetsnow.com> wrote: > >> >> > Well I'll be.. having this: > >> >> > > >> >> > bind r source-file ~/.tmux.conf > >> >> > > >> >> > sorta breaks that. :) > >> >> > > >> >> > thanks much > >> >> > dan > >> >> > > >> >> > On Tue, Dec 21, 2010 at 3:00 PM, Micah Cowan <mi...@cowan.name> wrote: > >> >> >> (12/21/2010 11:27 AM), Dan Tulovsky wrote: > >> >> >>> Is there a way to send a Reset in tmux? Sometimes (for example, > >> >> >>> when > >> >> >>> using serial consoles) the terminal gets screwed up and the only way > >> >> >>> to fix it is to reset it. > >> >> >>> > >> >> >>> This is <cmd>+R in Terminal on the Mac. I think it's just C-a r in > >> >> >>> screen. > >> >> >> > >> >> >> Default binding is <prefix> r in tmux as well (see the manpage for > >> >> >> "refresh-client"). > >> >> >> > >> >> >> -- > >> >> >> Micah J. Cowan > >> >> >> http://micah.cowan.name/ > >> >> >> > >> >> > > >> >> > >> >> ------------------------------------------------------------------------------ > >> >> Forrester recently released a report on the Return on Investment (ROI) > >> >> of > >> >> Google Apps. They found a 300% ROI, 38%-56% cost savings, and break-even > >> >> within 7 months. Over 3 million businesses have gone Google with > >> >> Google Apps: > >> >> an online email calendar, and document program that's accessible from > >> >> your > >> >> browser. Read the Forrester report: http://p.sf.net/sfu/googleapps-sfnew > >> >> _______________________________________________ > >> >> tmux-users mailing list > >> >> tmux-users@lists.sourceforge.net > >> >> https://lists.sourceforge.net/lists/listinfo/tmux-users > >> > > > ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ tmux-users mailing list tmux-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tmux-users