Index: cmd-split-window.c
===================================================================
--- cmd-split-window.c	(revision 2710)
+++ cmd-split-window.c	(working copy)
@@ -32,9 +32,9 @@
 
 const struct cmd_entry cmd_split_window_entry = {
 	"split-window", "splitw",
-	"c:dl:hp:Pt:v", 0, 1,
+	"c:dl:hp:Pt:vF:", 0, 1,
 	"[-dhvP] [-c start-directory] [-p percentage|-l size] [-t target-pane] "
-	"[command]",
+	"[-F format] [command]",
 	0,
 	cmd_split_window_key_binding,
 	NULL,
@@ -58,12 +58,15 @@
 	struct window		*w;
 	struct window_pane	*wp, *new_wp = NULL;
 	struct environ		 env;
-	const char	       	*cmd, *cwd, *shell;
+	const char		*cmd, *cwd, *shell;
 	char			*cause, *new_cause;
-	u_int			 hlimit, paneidx;
+	u_int			 hlimit;
 	int			 size, percentage;
 	enum layout_type	 type;
 	struct layout_cell	*lc;
+	const char		*template;
+	struct client		*c;
+	struct format_tree	*ft;
 
 	if ((wl = cmd_find_pane(ctx, args_get(args, 't'), &s, &wp)) == NULL)
 		return (-1);
@@ -134,9 +137,18 @@
 	environ_free(&env);
 
 	if (args_has(args, 'P')) {
-		if (window_pane_index(new_wp, &paneidx) != 0)
-			fatalx("index not found");
-		ctx->print(ctx, "%s:%u.%u", s->name, wl->idx, paneidx);
+		if (args_has(args, 'F'))
+			template = args_get(args, 'F');
+		else
+		    	template = "#{session_name}:#{window_index}.#{pane_index}";
+		c = cmd_find_client(ctx, NULL);
+		ft = format_create();
+		if (c != NULL)
+		    format_client(ft, c);
+		format_session(ft, s);
+		format_winlink(ft, s, wl);
+		format_window_pane(ft, new_wp);
+		ctx->print(ctx, "%s", format_expand(ft, template));
 	}
 	return (0);
 
Index: cmd-new-window.c
===================================================================
--- cmd-new-window.c	(revision 2710)
+++ cmd-new-window.c	(working copy)
@@ -30,9 +30,9 @@
 
 const struct cmd_entry cmd_new_window_entry = {
 	"new-window", "neww",
-	"ac:dkn:Pt:", 0, 1,
-	"[-adk] [-c start-directory] [-n window-name] [-t target-window] "
-	"[command]",
+	"ac:dkn:Pt:F:", 0, 1,
+	"[-adkP] [-c start-directory] [-n window-name] [-t target-window] "
+	"[-F format] [command]",
 	0,
 	NULL,
 	NULL,
@@ -42,12 +42,15 @@
 int
 cmd_new_window_exec(struct cmd *self, struct cmd_ctx *ctx)
 {
-	struct args	*args = self->args;
-	struct session	*s;
-	struct winlink	*wl;
-	const char     	*cmd, *cwd;
-	char		*cause;
-	int		 idx, last, detached;
+	struct args		*args = self->args;
+	struct session		*s;
+	struct winlink		*wl;
+	struct client		*c;
+	const char		*cmd, *cwd;
+	const char		*template;
+	char			*cause;
+	int			 idx, last, detached;
+	struct format_tree	*ft;
 
 	if (args_has(args, 'a')) {
 		wl = cmd_find_window(ctx, args_get(args, 't'), &s);
@@ -116,7 +119,19 @@
 	} else
 		server_status_session_group(s);
 
-	if (args_has(args, 'P'))
-		ctx->print(ctx, "%s:%u", s->name, wl->idx);
+	if (args_has(args, 'P')) {
+		if (args_has(args, 'F'))
+			template = args_get(args, 'F');
+		else
+		    template = "#{session_name}:#{window_index}";
+		c = cmd_find_client(ctx, NULL);
+		ft = format_create();
+		if (c != NULL)
+		    format_client(ft, c);
+		format_session(ft, s);
+		format_winlink(ft, s, wl);
+		ctx->print(ctx, "%s", format_expand(ft, template));
+	}
+
 	return (0);
 }
Index: tmux.1
===================================================================
--- tmux.1	(revision 2710)
+++ tmux.1	(working copy)
@@ -1253,6 +1253,7 @@
 .Op Fl c Ar start-directory
 .Op Fl n Ar window-name
 .Op Fl t Ar target-window
+.Op Fl F Ar format
 .Op Ar shell-command
 .Xc
 .D1 (alias: Ic neww )
@@ -1310,7 +1311,14 @@
 .Pp
 The
 .Fl P
-option prints the location of the new window after it has been created.
+option prints information about the new window after it has been created.
+By default, it uses the format
+.Ql #{session_name}:#{window_index} ,
+but a different format may be specified with the
+.Fl F
+flag with a
+.Ar format
+argument.
 .It Ic next-layout Op Fl t Ar target-window
 .D1 (alias: Ic nextl )
 Move a window to the next layout and rearrange the panes to fit.
@@ -1495,6 +1503,7 @@
 .Fl p Ar percentage Oc
 .Op Fl t Ar target-pane
 .Op Ar shell-command
+.Op Fl F Ar format
 .Xc
 .D1 (alias: Ic splitw )
 Create a new pane by splitting
