commit c1b444990550c1ce61c28116a2972851e7c9f53d
Author: Cory Sharp <corysharp@localhost>
Date:   Thu May 2 23:42:39 2013 -0700

    select-pane learns -f for "fixed" ("do not wrap")

diff --git a/cmd-select-pane.c b/cmd-select-pane.c
index b8a1267..148b1a6 100644
--- a/cmd-select-pane.c
+++ b/cmd-select-pane.c
@@ -29,8 +29,8 @@ enum cmd_retval	 cmd_select_pane_exec(struct cmd *, struct cmd_q *);
 
 const struct cmd_entry cmd_select_pane_entry = {
 	"select-pane", "selectp",
-	"lDLRt:U", 0, 0,
-	"[-lDLRU] " CMD_TARGET_PANE_USAGE,
+	"lDLRt:Uf", 0, 0,
+	"[-lDLRUf] " CMD_TARGET_PANE_USAGE,
 	0,
 	cmd_select_pane_key_binding,
 	NULL,
@@ -69,6 +69,7 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 	struct args		*args = self->args;
 	struct winlink		*wl;
 	struct window_pane	*wp;
+	int 			arg_fixed = args_has(args, 'f');
 
 	if (self->entry == &cmd_last_pane_entry || args_has(args, 'l')) {
 		wl = cmd_find_window(cmdq, args_get(args, 't'), NULL);
@@ -98,13 +99,13 @@ cmd_select_pane_exec(struct cmd *self, struct cmd_q *cmdq)
 	}
 
 	if (args_has(self->args, 'L'))
-		wp = window_pane_find_left(wp);
+		wp = window_pane_find_left(wp, arg_fixed);
 	else if (args_has(self->args, 'R'))
-		wp = window_pane_find_right(wp);
+		wp = window_pane_find_right(wp, arg_fixed);
 	else if (args_has(self->args, 'U'))
-		wp = window_pane_find_up(wp);
+		wp = window_pane_find_up(wp, arg_fixed);
 	else if (args_has(self->args, 'D'))
-		wp = window_pane_find_down(wp);
+		wp = window_pane_find_down(wp, arg_fixed);
 	if (wp == NULL) {
 		cmdq_error(cmdq, "pane not found");
 		return (CMD_RETURN_ERROR);
diff --git a/tmux.h b/tmux.h
index e499417..a935904 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2168,10 +2168,10 @@ int		 window_pane_visible(struct window_pane *);
 char		*window_pane_search(
 		     struct window_pane *, const char *, u_int *);
 char		*window_printable_flags(struct session *, struct winlink *);
-struct window_pane *window_pane_find_up(struct window_pane *);
-struct window_pane *window_pane_find_down(struct window_pane *);
-struct window_pane *window_pane_find_left(struct window_pane *);
-struct window_pane *window_pane_find_right(struct window_pane *);
+struct window_pane *window_pane_find_up(struct window_pane *, int fixed);
+struct window_pane *window_pane_find_down(struct window_pane *, int fixed);
+struct window_pane *window_pane_find_left(struct window_pane *, int fixed);
+struct window_pane *window_pane_find_right(struct window_pane *, int fixed);
 void		 window_set_name(struct window *, const char *);
 void		 window_remove_ref(struct window *);
 void		 winlink_clear_flags(struct winlink *);
diff --git a/window.c b/window.c
index 7678adc..6c58977 100644
--- a/window.c
+++ b/window.c
@@ -1112,7 +1112,7 @@ window_pane_search(struct window_pane *wp, const char *searchstr, u_int *lineno)
 
 /* Find the pane directly above another. */
 struct window_pane *
-window_pane_find_up(struct window_pane *wp)
+window_pane_find_up(struct window_pane *wp, int fixed)
 {
 	struct window_pane     *wp2;
 	u_int			left, top;
@@ -1121,8 +1121,12 @@ window_pane_find_up(struct window_pane *wp)
 		return (NULL);
 
 	top = wp->yoff;
-	if (top == 0)
-		top = wp->window->sy + 1;
+	if (top == 0) {
+		if (fixed)
+			return wp;
+		else
+			top = wp->window->sy + 1;
+	}
 	left = wp->xoff;
 
 	TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
@@ -1138,7 +1142,7 @@ window_pane_find_up(struct window_pane *wp)
 
 /* Find the pane directly below another. */
 struct window_pane *
-window_pane_find_down(struct window_pane *wp)
+window_pane_find_down(struct window_pane *wp, int fixed)
 {
 	struct window_pane     *wp2;
 	u_int			left, bottom;
@@ -1147,8 +1151,12 @@ window_pane_find_down(struct window_pane *wp)
 		return (NULL);
 
 	bottom = wp->yoff + wp->sy + 1;
-	if (bottom >= wp->window->sy)
-		bottom = 0;
+	if (bottom >= wp->window->sy) {
+		if (fixed)
+			return wp;
+		else
+			bottom = 0;
+	}
 	left = wp->xoff;
 
 	TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
@@ -1167,7 +1175,7 @@ window_pane_find_down(struct window_pane *wp)
  * containing the top edge.
  */
 struct window_pane *
-window_pane_find_left(struct window_pane *wp)
+window_pane_find_left(struct window_pane *wp, int fixed)
 {
 	struct window_pane     *wp2;
 	u_int			left, top;
@@ -1176,8 +1184,12 @@ window_pane_find_left(struct window_pane *wp)
 		return (NULL);
 
 	left = wp->xoff;
-	if (left == 0)
-		left = wp->window->sx + 1;
+	if (left == 0) {
+		if (fixed)
+			return wp;
+		else
+			left = wp->window->sx + 1;
+	}
 	top = wp->yoff;
 
 	TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
@@ -1196,7 +1208,7 @@ window_pane_find_left(struct window_pane *wp)
  * right edge and including the top edge.
  */
 struct window_pane *
-window_pane_find_right(struct window_pane *wp)
+window_pane_find_right(struct window_pane *wp, int fixed)
 {
 	struct window_pane     *wp2;
 	u_int			right, top;
@@ -1205,8 +1217,12 @@ window_pane_find_right(struct window_pane *wp)
 		return (NULL);
 
 	right = wp->xoff + wp->sx + 1;
-	if (right >= wp->window->sx)
-		right = 0;
+	if (right >= wp->window->sx) {
+		if (fixed)
+			return wp;
+		else
+			right = 0;
+	}
 	top = wp->yoff;
 
 	TAILQ_FOREACH(wp2, &wp->window->panes, entry) {
