From 2b0d798982d7c0cf6f2f7b00a6a3d98cd43e979e Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Tue, 17 Aug 2021 19:26:42 +0000
Subject: [PATCH 1/3] Do not block with incremental command prompt.

---
 cmd-command-prompt.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c
index 7e3d23c5..4943bc15 100644
--- a/cmd-command-prompt.c
+++ b/cmd-command-prompt.c
@@ -79,6 +79,8 @@ cmd_command_prompt_exec(struct cmd *self, struct cmdq_item *item)
 
 	if (tc->prompt_string != NULL)
 		return (CMD_RETURN_NORMAL);
+	if (args_has(args, 'i'))
+		wait = 0;
 
 	cdata = xcalloc(1, sizeof *cdata);
 	cdata->idx = 1;

From 66aaa9e48423c4699843e4a1dc52f1d27f73fe45 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Tue, 17 Aug 2021 19:37:55 +0000
Subject: [PATCH 2/3] Fix pipe-pane usage.

---
 cmd-pipe-pane.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c
index d9d9f436..0a518e1b 100644
--- a/cmd-pipe-pane.c
+++ b/cmd-pipe-pane.c
@@ -45,7 +45,7 @@ const struct cmd_entry cmd_pipe_pane_entry = {
 	.alias = "pipep",
 
 	.args = { "IOot:", 0, 1 },
-	.usage = "[-IOo] " CMD_TARGET_PANE_USAGE " [command]",
+	.usage = "[-IOo] " CMD_TARGET_PANE_USAGE " [shell-command]",
 
 	.target = { 't', CMD_FIND_PANE, 0 },
 

From 5fdea440cede1690db9a242a091df72f16e53d24 Mon Sep 17 00:00:00 2001
From: nicm <nicm>
Date: Tue, 17 Aug 2021 20:17:21 +0000
Subject: [PATCH 3/3] Treat a pane that has died the same as no pane when
 sending data to control mode clients, GitHub issue 2828.

---
 control.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/control.c b/control.c
index e86429cf..efcbc0ff 100644
--- a/control.c
+++ b/control.c
@@ -665,7 +665,7 @@ control_write_pending(struct client *c, struct control_pane *cp, size_t limit)
 	uint64_t		 age, t = get_timer();
 
 	wp = control_window_pane(c, cp->pane);
-	if (wp == NULL) {
+	if (wp == NULL || wp->fd == -1) {
 		TAILQ_FOREACH_SAFE(cb, &cp->blocks, entry, cb1) {
 			TAILQ_REMOVE(&cp->blocks, cb, entry);
 			control_free_block(cs, cb);
@@ -865,7 +865,7 @@ control_check_subs_pane(struct client *c, struct control_sub *csub)
 	struct control_sub_pane	*csp, find;
 
 	wp = window_pane_find_by_id(csub->id);
-	if (wp == NULL)
+	if (wp == NULL || wp->fd == -1)
 		return;
 	w = wp->window;