Hi
Thanks for the diff,
It could be much smaller by doing:
if (!options_get_number(&wp->window->options, "app-private-window"))
break;
In both cases, instead of putting everything inside the if.
You also need to set a default value in tmux.c or tmux will die with a fatal
error the first time this code is hit, because the option isn't set.
I'm not sure about the option name, I think it should be something like
use-alternate-screen.
Can't you change your editor to use tabs instead of spaces or enter a literal
tab?
On Sun, Feb 07, 2010 at 10:15:12PM +0100, clemens fischer wrote:
> The patch adds a per-window option "app-private-window". Tmux'
> behaviour doesn't change if it is set "on". If set to "off", saving to
> tmux' alternate screen is disabled, no saving and restoring to a saved
> grid, and the history stays on.
>
> As far as I know, this latter mode is compatible to "screen". I did not
> find the spot where default values for options are defined. Propably
> due to my using spaces instead of tabs, the patch is much bulkier than
> it needs to be, sorry about that.
>
>
> clemens
>
>
> Index: cmd-set-option.c
> ===================================================================
> --- cmd-set-option.c.orig
> +++ cmd-set-option.c
> @@ -138,6 +138,7 @@ const struct set_option_entry set_sessio
>
> const struct set_option_entry set_window_option_table[] = {
> { "aggressive-resize", SET_OPTION_FLAG, 0, 0, NULL },
> + { "app-private-window", SET_OPTION_FLAG, 0, 0, NULL },
> { "automatic-rename", SET_OPTION_FLAG, 0, 0, NULL },
> { "clock-mode-colour", SET_OPTION_COLOUR, 0, 0, NULL },
> { "clock-mode-style",
> Index: input.c
> ===================================================================
> --- input.c.orig
> +++ input.c
> @@ -1178,27 +1178,29 @@ input_handle_sequence_sm(struct input_ct
> case 1049:
> if (wp->saved_grid != NULL)
> break;
> - sx = screen_size_x(s);
> - sy = screen_size_y(s);
>
> /*
> * Enter alternative screen mode. A copy of the visible
> * screen is saved and the history is not updated
> */
>
> - wp->saved_grid = grid_create(sx, sy, 0);
> - grid_duplicate_lines(
> + if (options_get_number(&wp->window->options,
> "app-private-window")) {
> + sx = screen_size_x(s);
> + sy = screen_size_y(s);
> + wp->saved_grid = grid_create(sx, sy, 0);
> + grid_duplicate_lines(
> wp->saved_grid, 0, s->grid, screen_hsize(s), sy);
> - wp->saved_cx = s->cx;
> - wp->saved_cy = s->cy;
> - memcpy(&wp->saved_cell,
> - &ictx->cell, sizeof wp->saved_cell);
> + wp->saved_cx = s->cx;
> + wp->saved_cy = s->cy;
> + memcpy(&wp->saved_cell,
> + &ictx->cell, sizeof wp->saved_cell);
>
> - grid_view_clear(s->grid, 0, 0, sx, sy);
> + grid_view_clear(s->grid, 0, 0, sx, sy);
>
> - wp->base.grid->flags &= ~GRID_HISTORY;
> + wp->base.grid->flags &= ~GRID_HISTORY;
>
> - wp->flags |= PANE_REDRAW;
> + wp->flags |= PANE_REDRAW;
> + }
> break;
> default:
> log_debug("unknown SM [%hhu]: %u", ictx->private, n);
> @@ -1254,44 +1256,46 @@ input_handle_sequence_rm(struct input_ct
> case 1049:
> if (wp->saved_grid == NULL)
> break;
> - sx = screen_size_x(s);
> - sy = screen_size_y(s);
>
> /*
> * Exit alternative screen mode and restore the copied
> * grid.
> */
>
> - /*
> - * If the current size is bigger, temporarily resize
> - * to the old size before copying back.
> - */
> - if (sy > wp->saved_grid->sy)
> - screen_resize(s, sx, wp->saved_grid->sy);
> -
> - /* Restore the grid, cursor position and cell. */
> - grid_duplicate_lines(
> - s->grid, screen_hsize(s), wp->saved_grid, 0, sy);
> - s->cx = wp->saved_cx;
> - if (s->cx > screen_size_x(s) - 1)
> - s->cx = screen_size_x(s) - 1;
> - s->cy = wp->saved_cy;
> - if (s->cy > screen_size_y(s) - 1)
> - s->cy = screen_size_y(s) - 1;
> - memcpy(&ictx->cell, &wp->saved_cell, sizeof ictx->cell);
> -
> - /*
> - * Turn history back on (so resize can use it) and then
> - * resize back to the current size.
> - */
> - wp->base.grid->flags |= GRID_HISTORY;
> - if (sy > wp->saved_grid->sy)
> - screen_resize(s, sx, sy);
> + if (options_get_number(&wp->window->options,
> "app-private-window")) {
> + sx = screen_size_x(s);
> + sy = screen_size_y(s);
> + /*
> + * If the current size is bigger, temporarily resize
> + * to the old size before copying back.
> + */
> + if (sy > wp->saved_grid->sy)
> + screen_resize(s, sx, wp->saved_grid->sy);
> +
> + /* Restore the grid, cursor position and cell. */
> + grid_duplicate_lines(
> + s->grid, screen_hsize(s), wp->saved_grid, 0, sy);
> + s->cx = wp->saved_cx;
> + if (s->cx > screen_size_x(s) - 1)
> + s->cx = screen_size_x(s) - 1;
> + s->cy = wp->saved_cy;
> + if (s->cy > screen_size_y(s) - 1)
> + s->cy = screen_size_y(s) - 1;
> + memcpy(&ictx->cell, &wp->saved_cell, sizeof ictx->cell);
> +
> + /*
> + * Turn history back on (so resize can use it) and then
> + * resize back to the current size.
> + */
> + wp->base.grid->flags |= GRID_HISTORY;
> + if (sy > wp->saved_grid->sy)
> + screen_resize(s, sx, sy);
>
> - grid_destroy(wp->saved_grid);
> - wp->saved_grid = NULL;
> + grid_destroy(wp->saved_grid);
> + wp->saved_grid = NULL;
>
> - wp->flags |= PANE_REDRAW;
> + wp->flags |= PANE_REDRAW;
> + }
> break;
> default:
> log_debug("unknown RM [%hhu]: %u", ictx->private, n);
> Index: tmux.1
> ===================================================================
> --- tmux.1.orig
> +++ tmux.1
> @@ -1795,6 +1795,16 @@ this option is good for full-screen prog
> .Dv SIGWINCH
> and poor for interactive programs such as shells.
> .Pp
> +.It Xo Ic app-private-window
> +.Op Ic on | off
> +.Xc
> +Every application initializing its window can have it all to itself.
> +.Nm
> +will save the previous window contents and restore it afterwards, the
> +applications contents will not be saved in the history. This makes
> +sense if full screen edit sessions are not supposed to clutter the
> +history.
> +.Pp
> .It Xo Ic automatic-rename
> .Op Ic on | off
> .Xc
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> tmux-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/tmux-users
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users