The branch, master has been updated
       via  64da762c15ddf0930baa1f8e4fc2b41515a64e3a (commit)
       via  8903c1f167839569b7514508b38988aa6486575c (commit)
       via  a5521597b0e0771d5ad698bba92801ea88302c4f (commit)
       via  85531fd404ed68ffe7d724f58ef1f84c357f3cc8 (commit)
      from  fe00607816308953209cb85ab92a586c1f344cde (commit)

- Log -----------------------------------------------------------------
commit 64da762c15ddf0930baa1f8e4fc2b41515a64e3a
Merge: fe00607 8903c1f
Author: Thomas Adam <thomas.a...@smoothwall.net>
Commit: Thomas Adam <thomas.a...@smoothwall.net>

    Merge branch 'obsd-master'

 cmd-select-layout.c |    2 --
 format.c            |    7 +++++--
 grid.c              |   41 +++++++++++++++++++++++++++++++++++++++++
 screen.c            |   20 +++++++++++++++++++-
 server-client.c     |    2 +-
 tmux.h              |    4 +++-
 window-choose.c     |    2 +-
 window-clock.c      |    2 +-
 window-copy.c       |    4 ++--
 window.c            |    8 ++++----
 10 files changed, 77 insertions(+), 15 deletions(-)



commit 8903c1f167839569b7514508b38988aa6486575c
Author: Nicholas Marriott <n...@openbsd.org>
Commit: Nicholas Marriott <n...@openbsd.org>

    Automatically reflow wrapped lines when a pane is resized, requested by
    many over the years and finally implemented by Richard Woodbury.
---
 grid.c          |   41 +++++++++++++++++++++++++++++++++++++++++
 screen.c        |   20 +++++++++++++++++++-
 tmux.h          |    4 +++-
 window-choose.c |    2 +-
 window-clock.c  |    2 +-
 window-copy.c   |    4 ++--
 window.c        |    8 ++++----
 7 files changed, 71 insertions(+), 10 deletions(-)

diff --git a/grid.c b/grid.c
index da76912..a8d6d93 100644
--- a/grid.c
+++ b/grid.c
@@ -460,3 +460,44 @@ grid_duplicate_lines(
                dy++;
        }
 }
+
+/*
+ * Reflow lines from src grid into dst grid based on width sx. Returns number
+ * of lines fewer in the visible area, or zero.
+ */
+u_int
+grid_reflow(struct grid *dst, const struct grid *src, u_int sx)
+{
+       u_int                    px, py, line, cell;
+       int                      previous_wrapped;
+       struct grid_line        *gl;
+
+       px = py = 0;
+       previous_wrapped = 1;
+       for (line = 0; line < src->sy + src->hsize; line++) {
+               gl = src->linedata + line;
+               if (!previous_wrapped) {
+                       px = 0;
+                       py++;
+                       if (py >= dst->hsize + dst->sy)
+                               grid_scroll_history(dst);
+               }
+               for (cell = 0; cell < gl->cellsize; cell++) {
+                       if (px == sx) {
+                               dst->linedata[py].flags |= GRID_LINE_WRAPPED;
+                               px = 0;
+                               py++;
+                               if (py >= dst->hsize + dst->sy)
+                                       grid_scroll_history(dst);
+                       }
+                       grid_set_cell(dst, px, py, gl->celldata + cell);
+                       px++;
+               }
+               previous_wrapped = gl->flags & GRID_LINE_WRAPPED;
+       }
+       py++; /* account for final line, which never wraps */
+
+       if (py > src->sy)
+               return (0);
+       return (src->sy - py);
+}
diff --git a/screen.c b/screen.c
index 7ffe2a2..1c0c0d3 100644
--- a/screen.c
+++ b/screen.c
@@ -120,7 +120,7 @@ screen_set_title(struct screen *s, const char *title)
 
 /* Resize screen. */
 void
-screen_resize(struct screen *s, u_int sx, u_int sy)
+screen_resize(struct screen *s, u_int sx, u_int sy, int reflow)
 {
        if (sx < 1)
                sx = 1;
@@ -140,6 +140,9 @@ screen_resize(struct screen *s, u_int sx, u_int sy)
 
        if (sy != screen_size_y(s))
                screen_resize_y(s, sy);
+
+       if (reflow)
+               screen_reflow(s, sx);
 }
 
 void
@@ -356,3 +359,18 @@ screen_check_selection(struct screen *s, u_int px, u_int 
py)
 
        return (1);
 }
+
+/* Reflow wrapped lines. */
+void
+screen_reflow(struct screen *s, u_int sx)
+{
+       struct grid     *old, *new;
+
+       old = s->grid;
+       new = grid_create(old->sx, old->sy, old->hlimit);
+
+       s->cy -= grid_reflow(new, old, sx);
+       s->grid = new;
+
+       grid_destroy(old);
+}
diff --git a/tmux.h b/tmux.h
index 9149f6b..f6382a7 100644
--- a/tmux.h
+++ b/tmux.h
@@ -1964,6 +1964,7 @@ void       grid_move_cells(struct grid *, u_int, u_int, 
u_int, u_int);
 char   *grid_string_cells(struct grid *, u_int, u_int, u_int);
 void    grid_duplicate_lines(
             struct grid *, u_int, struct grid *, u_int, u_int);
+u_int   grid_reflow(struct grid *, const struct grid *, u_int);
 
 /* grid-cell.c */
 u_int   grid_cell_width(const struct grid_cell *);
@@ -2057,11 +2058,12 @@ void     screen_reset_tabs(struct screen *);
 void    screen_set_cursor_style(struct screen *, u_int);
 void    screen_set_cursor_colour(struct screen *, const char *);
 void    screen_set_title(struct screen *, const char *);
-void    screen_resize(struct screen *, u_int, u_int);
+void    screen_resize(struct screen *, u_int, u_int, int);
 void    screen_set_selection(struct screen *,
             u_int, u_int, u_int, u_int, u_int, struct grid_cell *);
 void    screen_clear_selection(struct screen *);
 int     screen_check_selection(struct screen *, u_int, u_int);
+void    screen_reflow(struct screen *, u_int);
 
 /* window.c */
 extern struct windows windows;
diff --git a/window-choose.c b/window-choose.c
index 20482a6..dce026e 100644
--- a/window-choose.c
+++ b/window-choose.c
@@ -203,7 +203,7 @@ window_choose_resize(struct window_pane *wp, u_int sx, 
u_int sy)
        if (data->selected > sy - 1)
                data->top = data->selected - (sy - 1);
 
-       screen_resize(s, sx, sy);
+       screen_resize(s, sx, sy, 0);
        window_choose_redraw_screen(wp);
 }
 
diff --git a/window-clock.c b/window-clock.c
index b6dc87e..4cbe76a 100644
--- a/window-clock.c
+++ b/window-clock.c
@@ -79,7 +79,7 @@ window_clock_resize(struct window_pane *wp, u_int sx, u_int 
sy)
        struct window_clock_mode_data   *data = wp->modedata;
        struct screen                   *s = &data->screen;
 
-       screen_resize(s, sx, sy);
+       screen_resize(s, sx, sy, 0);
        window_clock_draw_screen(wp);
 }
 
diff --git a/window-copy.c b/window-copy.c
index 79d0c6e..1d6b8f6 100644
--- a/window-copy.c
+++ b/window-copy.c
@@ -335,9 +335,9 @@ window_copy_resize(struct window_pane *wp, u_int sx, u_int 
sy)
        struct screen                   *s = &data->screen;
        struct screen_write_ctx          ctx;
 
-       screen_resize(s, sx, sy);
+       screen_resize(s, sx, sy, 0);
        if (data->backing != &wp->base)
-               screen_resize(data->backing, sx, sy);
+               screen_resize(data->backing, sx, sy, 0);
 
        if (data->cy > sy - 1)
                data->cy = sy - 1;
diff --git a/window.c b/window.c
index 9716845..20cd9aa 100644
--- a/window.c
+++ b/window.c
@@ -853,7 +853,7 @@ window_pane_resize(struct window_pane *wp, u_int sx, u_int 
sy)
        ws.ws_col = sx;
        ws.ws_row = sy;
 
-       screen_resize(&wp->base, sx, sy);
+       screen_resize(&wp->base, sx, sy, wp->saved_grid == NULL);
        if (wp->mode != NULL)
                wp->mode->resize(wp, sx, sy);
 
@@ -914,7 +914,7 @@ window_pane_alternate_off(struct window_pane *wp, struct 
grid_cell *gc,
         * before copying back.
         */
        if (sy > wp->saved_grid->sy)
-               screen_resize(s, sx, wp->saved_grid->sy);
+               screen_resize(s, sx, wp->saved_grid->sy, 1);
 
        /* Restore the grid, cursor position and cell. */
        grid_duplicate_lines(s->grid, screen_hsize(s), wp->saved_grid, 0, sy);
@@ -933,8 +933,8 @@ window_pane_alternate_off(struct window_pane *wp, struct 
grid_cell *gc,
         * the current size.
         */
        wp->base.grid->flags |= GRID_HISTORY;
-       if (sy > wp->saved_grid->sy)
-               screen_resize(s, sx, sy);
+       if (sy > wp->saved_grid->sy || sx != wp->saved_grid->sx)
+               screen_resize(s, sx, sy, 1);
 
        grid_destroy(wp->saved_grid);
        wp->saved_grid = NULL;


commit a5521597b0e0771d5ad698bba92801ea88302c4f
Author: Nicholas Marriott <n...@openbsd.org>
Commit: Nicholas Marriott <n...@openbsd.org>

    Don't set some string formats if the string is NULL.
---
 format.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/format.c b/format.c
index 72c65c2..e950df5 100644
--- a/format.c
+++ b/format.c
@@ -365,6 +365,7 @@ format_window_pane(struct format_tree *ft, struct 
window_pane *wp)
        unsigned long long       size;
        u_int                    i;
        u_int                    idx;
+       const char              *cwd;
 
        size = 0;
        for (i = 0; i < gd->hsize; i++) {
@@ -390,9 +391,11 @@ format_window_pane(struct format_tree *ft, struct 
window_pane *wp)
                format_add(ft, "pane_start_command", "%s", wp->cmd);
        if (wp->cwd != NULL)
                format_add(ft, "pane_start_path", "%s", wp->cwd);
-       format_add(ft, "pane_current_path", "%s", get_proc_cwd(wp->fd));
+       if ((cwd = get_proc_cwd(wp->fd)) != NULL)
+               format_add(ft, "pane_current_path", "%s", cwd);
        format_add(ft, "pane_pid", "%ld", (long) wp->pid);
-       format_add(ft, "pane_tty", "%s", wp->tty);
+       if (wp->tty != NULL)
+               format_add(ft, "pane_tty", "%s", wp->tty);
 }
 
 void


commit 85531fd404ed68ffe7d724f58ef1f84c357f3cc8
Author: Nicholas Marriott <n...@openbsd.org>
Commit: Nicholas Marriott <n...@openbsd.org>

    Unused variable/type nit from Thomas Adam.
---
 cmd-select-layout.c |    2 --
 server-client.c     |    2 +-
 2 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/cmd-select-layout.c b/cmd-select-layout.c
index 3ca8766..c5f64a0 100644
--- a/cmd-select-layout.c
+++ b/cmd-select-layout.c
@@ -87,13 +87,11 @@ cmd_select_layout_exec(struct cmd *self, struct cmd_ctx 
*ctx)
 {
        struct args     *args = self->args;
        struct winlink  *wl;
-       struct window   *w;
        const char      *layoutname;
        int              next, previous, layout;
 
        if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL)
                return (CMD_RETURN_ERROR);
-       w = wl->window;
 
        next = self->entry == &cmd_next_layout_entry;
        if (args_has(self->args, 'n'))
diff --git a/server-client.c b/server-client.c
index b24b68e..82189a5 100644
--- a/server-client.c
+++ b/server-client.c
@@ -331,7 +331,7 @@ int
 server_client_assume_paste(struct session *s)
 {
        struct timeval  tv;
-       u_int           t;
+       int             t;
 
        if ((t = options_get_number(&s->options, "assume-paste-time")) == 0)
                return (0);


-----------------------------------------------------------------------

Summary of changes:
 cmd-select-layout.c |    2 --
 format.c            |    7 +++++--
 grid.c              |   41 +++++++++++++++++++++++++++++++++++++++++
 screen.c            |   20 +++++++++++++++++++-
 server-client.c     |    2 +-
 tmux.h              |    4 +++-
 window-choose.c     |    2 +-
 window-clock.c      |    2 +-
 window-copy.c       |    4 ++--
 window.c            |    8 ++++----
 10 files changed, 77 insertions(+), 15 deletions(-)


hooks/post-receive
-- 
tmux

------------------------------------------------------------------------------
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-cvs mailing list
tmux-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to