Revision: 2527
          http://tmux.svn.sourceforge.net/tmux/?rev=2527&view=rev
Author:   nicm
Date:     2011-06-23 19:21:26 +0000 (Thu, 23 Jun 2011)

Log Message:
-----------
PatchSet 923
Date: 2011/06/05 11:53:05
Author: nicm
Branch: HEAD
Tag: (none)
Log:
Get rid of the layout string code which tries to walk through the layout
hierarchy and instead just look at what panes are actually in the window.

Modified Paths:
--------------
    trunk/cmd.c
    trunk/layout-custom.c
    trunk/tmux.h
    trunk/window.c

Removed Paths:
-------------
    trunk/layout-string.c

Modified: trunk/cmd.c
===================================================================
--- trunk/cmd.c 2011-06-23 19:19:08 UTC (rev 2526)
+++ trunk/cmd.c 2011-06-23 19:21:26 UTC (rev 2527)
@@ -1,4 +1,4 @@
-/* $Id: cmd.c,v 1.153 2011-05-18 20:30:36 tcunha Exp $ */
+/* $Id$ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <[email protected]>
@@ -1057,12 +1057,11 @@
 cmd_find_pane(struct cmd_ctx *ctx,
     const char *arg, struct session **sp, struct window_pane **wpp)
 {
-       struct session          *s;
-       struct winlink          *wl;
-       struct layout_cell      *lc;
-       const char              *period, *errstr;
-       char                    *winptr, *paneptr;
-       u_int                    idx;
+       struct session  *s;
+       struct winlink  *wl;
+       const char      *period, *errstr;
+       char            *winptr, *paneptr;
+       u_int            idx;
 
        /* Get the current session. */
        if ((s = cmd_current_session(ctx, 0)) == NULL) {
@@ -1118,11 +1117,10 @@
 
 lookup_string:
        /* Try pane string description. */
-       if ((lc = layout_find_string(wl->window, paneptr)) == NULL) {
+       if ((*wpp = window_find_string(wl->window, paneptr)) == NULL) {
                ctx->error(ctx, "can't find pane: %s", paneptr);
                goto error;
        }
-       *wpp = lc->wp;
 
        xfree(winptr);
        return (wl);
@@ -1141,10 +1139,8 @@
 
 lookup_window:
        /* Try pane string description. */
-       if ((lc = layout_find_string(s->curw->window, arg)) != NULL) {
-               *wpp = lc->wp;
+       if ((*wpp = window_find_string(s->curw->window, arg)) != NULL)
                return (s->curw);
-       }
 
        /* Try as a window and use the active pane. */
        if ((wl = cmd_find_window(ctx, arg, sp)) != NULL)

Modified: trunk/layout-custom.c
===================================================================
--- trunk/layout-custom.c       2011-06-23 19:19:08 UTC (rev 2526)
+++ trunk/layout-custom.c       2011-06-23 19:21:26 UTC (rev 2527)
@@ -1,4 +1,4 @@
-/* $Id: layout-custom.c,v 1.1 2010-07-02 02:54:52 tcunha Exp $ */
+/* $Id$ */
 
 /*
  * Copyright (c) 2010 Nicholas Marriott <[email protected]>
@@ -23,11 +23,22 @@
 
 #include "tmux.h"
 
+struct layout_cell     *layout_find_bottomright(struct layout_cell *);
 u_short                        layout_checksum(const char *);
 int                    layout_append(struct layout_cell *, char *, size_t);
 struct layout_cell     *layout_construct(struct layout_cell *, const char **);
 void                   layout_assign(struct window_pane **, struct layout_cell 
*);
 
+/* Find the bottom-right cell. */
+struct layout_cell *
+layout_find_bottomright(struct layout_cell *lc)
+{
+       if (lc->type == LAYOUT_WINDOWPANE)
+               return (lc);
+       lc = TAILQ_LAST(&lc->cells, layout_cells);
+       return (layout_find_bottomright(lc));
+}
+
 /* Calculate layout checksum. */
 u_short
 layout_checksum(const char *layout)

Deleted: trunk/layout-string.c
===================================================================
--- trunk/layout-string.c       2011-06-23 19:19:08 UTC (rev 2526)
+++ trunk/layout-string.c       2011-06-23 19:21:26 UTC (rev 2527)
@@ -1,168 +0,0 @@
-/* $Id: layout-string.c,v 1.4 2010-07-02 02:54:52 tcunha Exp $ */
-
-/*
- * Copyright (c) 2009 Nicholas Marriott <[email protected]>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "tmux.h"
-
-/*
- * Figure out the pane position based on a description. Fairly simple right
- * now, just understands a set of strings: left, right, top, bottom, top-left
- * top-right, bottom-left, bottom-right.
- */
-
-struct layout_cell *layout_find_top(struct layout_cell *);
-struct layout_cell *layout_find_bottom(struct layout_cell *);
-struct layout_cell *layout_find_left(struct layout_cell *);
-struct layout_cell *layout_find_right(struct layout_cell *);
-struct layout_cell *layout_find_topleft(struct layout_cell *);
-struct layout_cell *layout_find_topright(struct layout_cell *);
-struct layout_cell *layout_find_bottomleft(struct layout_cell *);
-
-/* Find the cell; returns NULL if string not understood. */
-struct layout_cell *
-layout_find_string(struct window *w, const char *s)
-{
-       struct layout_cell      *lc;
-
-       lc = NULL;
-
-       if (strcasecmp(s, "top") == 0)
-               lc = layout_find_top(w->layout_root);
-       else if (strcasecmp(s, "bottom") == 0)
-               lc = layout_find_bottom(w->layout_root);
-       else if (strcasecmp(s, "left") == 0)
-               lc = layout_find_left(w->layout_root);
-       else if (strcasecmp(s, "right") == 0)
-               lc = layout_find_right(w->layout_root);
-       else if (strcasecmp(s, "top-left") == 0)
-               lc = layout_find_topleft(w->layout_root);
-       else if (strcasecmp(s, "top-right") == 0)
-               lc = layout_find_topright(w->layout_root);
-       else if (strcasecmp(s, "bottom-left") == 0)
-               lc = layout_find_bottomleft(w->layout_root);
-       else if (strcasecmp(s, "bottom-right") == 0)
-               lc = layout_find_bottomright(w->layout_root);
-
-       if (lc == NULL || lc->type != LAYOUT_WINDOWPANE)
-               return (NULL);
-       return (lc);
-}
-
-/*
- * Find the top cell. Because splits in the same direction are stored as a
- * list, this is just the first in the list. Return NULL if no topmost cell.
- * For an unnested cell (not split), the top cell is always itself.
- */
-struct layout_cell *
-layout_find_top(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       else if (lc->type == LAYOUT_TOPBOTTOM)
-               return (TAILQ_FIRST(&lc->cells));
-       return (NULL);
-}
-
-/*
- * Find the bottom cell. Similarly to the top cell, this is just the last in
- * the list.
- */
-struct layout_cell *
-layout_find_bottom(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       else if (lc->type == LAYOUT_TOPBOTTOM)
-               return (TAILQ_LAST(&lc->cells, layout_cells));
-       return (NULL);
-}
-
-/* Find the left cell. */
-struct layout_cell *
-layout_find_left(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       else if (lc->type == LAYOUT_LEFTRIGHT)
-               return (TAILQ_FIRST(&lc->cells));
-       return (NULL);
-}
-
-/* Find the right cell. */
-struct layout_cell *
-layout_find_right(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       else if (lc->type == LAYOUT_LEFTRIGHT)
-               return (TAILQ_LAST(&lc->cells, layout_cells));
-       return (NULL);
-}
-
-/*
- * Find the top-left cell. This means recursing until there are no more moves
- * to be made.
- */
-struct layout_cell *
-layout_find_topleft(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       lc = TAILQ_FIRST(&lc->cells);
-       return (layout_find_topleft(lc));
-}
-
-/* Find the top-right cell. */
-struct layout_cell *
-layout_find_topright(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       if (lc->type == LAYOUT_LEFTRIGHT)
-               lc = TAILQ_LAST(&lc->cells, layout_cells);
-       else
-               lc = TAILQ_FIRST(&lc->cells);
-       return (layout_find_topright(lc));
-}
-
-/* Find the bottom-left cell. */
-struct layout_cell *
-layout_find_bottomleft(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       if (lc->type == LAYOUT_LEFTRIGHT)
-               lc = TAILQ_FIRST(&lc->cells);
-       else
-               lc = TAILQ_LAST(&lc->cells, layout_cells);
-       return (layout_find_bottomleft(lc));
-}
-
-/* Find the bottom-right cell. */
-struct layout_cell *
-layout_find_bottomright(struct layout_cell *lc)
-{
-       if (lc->type == LAYOUT_WINDOWPANE)
-               return (lc);
-       lc = TAILQ_LAST(&lc->cells, layout_cells);
-       return (layout_find_bottomright(lc));
-}

Modified: trunk/tmux.h
===================================================================
--- trunk/tmux.h        2011-06-23 19:19:08 UTC (rev 2526)
+++ trunk/tmux.h        2011-06-23 19:21:26 UTC (rev 2527)
@@ -1,4 +1,4 @@
-/* $Id: tmux.h,v 1.627 2011-05-22 16:26:09 tcunha Exp $ */
+/* $Id$ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <[email protected]>
@@ -1887,7 +1887,9 @@
                     const char *, struct environ *, struct termios *,
                     u_int, u_int, u_int, char **);
 void            window_destroy(struct window *);
+struct window_pane *window_get_active_at(struct window *, u_int, u_int);
 void            window_set_active_at(struct window *, u_int, u_int);
+struct window_pane *window_find_string(struct window *, const char *);
 void            window_set_active_pane(struct window *, struct window_pane *);
 struct window_pane *window_add_pane(struct window *, u_int);
 void            window_resize(struct window *, u_int, u_int);
@@ -1967,10 +1969,6 @@
 u_int           layout_set_previous(struct window *);
 void            layout_set_active_changed(struct window *);
 
-/* layout-string.c */
-struct layout_cell *layout_find_string(struct window *, const char *);
-struct layout_cell *layout_find_bottomright(struct layout_cell *);
-
 /* window-clock.c */
 extern const struct window_mode window_clock_mode;
 

Modified: trunk/window.c
===================================================================
--- trunk/window.c      2011-06-23 19:19:08 UTC (rev 2526)
+++ trunk/window.c      2011-06-23 19:21:26 UTC (rev 2527)
@@ -1,4 +1,4 @@
-/* $Id: window.c,v 1.147 2011-04-18 22:03:55 nicm Exp $ */
+/* $Id$ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <[email protected]>
@@ -353,24 +353,68 @@
        }
 }
 
-void
-window_set_active_at(struct window *w, u_int x, u_int y)
+struct window_pane *
+window_get_active_at(struct window *w, u_int x, u_int y)
 {
        struct window_pane      *wp;
 
        TAILQ_FOREACH(wp, &w->panes, entry) {
-               if (wp == w->active || !window_pane_visible(wp))
+               if (!window_pane_visible(wp))
                        continue;
-               if (x < wp->xoff || x >= wp->xoff + wp->sx)
+               if (x < wp->xoff || x > wp->xoff + wp->sx)
                        continue;
-               if (y < wp->yoff || y >= wp->yoff + wp->sy)
+               if (y < wp->yoff || y > wp->yoff + wp->sy)
                        continue;
-               window_set_active_pane(w, wp);
-               break;
+               return (wp);
        }
+       return (NULL);
 }
 
+void
+window_set_active_at(struct window *w, u_int x, u_int y)
+{
+       struct window_pane      *wp;
+
+       wp = window_get_active_at(w, x, y);
+       if (wp != NULL && wp != w->active)
+               window_set_active_pane(w, wp);
+}
+
 struct window_pane *
+window_find_string(struct window *w, const char *s)
+{
+       u_int   x, y;
+
+       x = w->sx / 2;
+       y = w->sy / 2;
+
+       if (strcasecmp(s, "top") == 0)
+               y = 0;
+       else if (strcasecmp(s, "bottom") == 0)
+               y = w->sy - 1;
+       else if (strcasecmp(s, "left") == 0)
+               x = 0;
+       else if (strcasecmp(s, "right") == 0)
+               x = w->sx - 1;
+       else if (strcasecmp(s, "top-left") == 0) {
+               x = 0;
+               y = 0;
+       } else if (strcasecmp(s, "top-right") == 0) {
+               x = w->sx - 1;
+               y = 0;
+       } else if (strcasecmp(s, "bottom-left") == 0) {
+               x = 0;
+               y = w->sy - 1;
+       } else if (strcasecmp(s, "bottom-right") == 0) {
+               x = w->sx - 1;
+               y = w->sy - 1;
+       } else
+               return (NULL);
+
+       return (window_get_active_at(w, x, y));
+}
+
+struct window_pane *
 window_add_pane(struct window *w, u_int hlimit)
 {
        struct window_pane      *wp;


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Simplify data backup and recovery for your virtual environment with vRanger.
Installation's a snap, and flexible recovery options mean your data is safe,
secure and there when you need it. Data protection magic?
Nope - It's vRanger. Get your free trial download today.
http://p.sf.net/sfu/quest-sfdev2dev
_______________________________________________
tmux-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-cvs

Reply via email to