aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd-display-menu.c6
-rw-r--r--format.c6
-rw-r--r--popup.c20
-rw-r--r--tmux.12
-rw-r--r--tmux.h1
5 files changed, 30 insertions, 5 deletions
diff --git a/cmd-display-menu.c b/cmd-display-menu.c
index aafe2447..e12a24ab 100644
--- a/cmd-display-menu.c
+++ b/cmd-display-menu.c
@@ -237,7 +237,7 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item)
}
if (nlines != 0)
- h = nlines + 2;
+ h = popup_height(nlines, lines) + 2;
else
h = c->tty.sy / 2;
if (args_has(args, 'h')) {
@@ -262,6 +262,10 @@ cmd_display_popup_exec(struct cmd *self, struct cmdq_item *item)
}
}
+ if (w > c->tty.sx - 1)
+ w = c->tty.sx - 1;
+ if (h > c->tty.sy - 1)
+ h = c->tty.sy - 1;
cmd_display_menu_get_position(c, item, args, &px, &py, w, h);
value = args_get(args, 'd');
diff --git a/format.c b/format.c
index b102d9eb..c3fc3cad 100644
--- a/format.c
+++ b/format.c
@@ -2436,6 +2436,8 @@ void
format_defaults(struct format_tree *ft, struct client *c, struct session *s,
struct winlink *wl, struct window_pane *wp)
{
+ struct paste_buffer *pb;
+
if (c != NULL && c->name != NULL)
log_debug("%s: c=%s", __func__, c->name);
else
@@ -2475,6 +2477,10 @@ format_defaults(struct format_tree *ft, struct client *c, struct session *s,
format_defaults_winlink(ft, wl);
if (wp != NULL)
format_defaults_pane(ft, wp);
+
+ pb = paste_get_top (NULL);
+ if (pb != NULL)
+ format_defaults_paste_buffer(ft, pb);
}
/* Set default format keys for a session. */
diff --git a/popup.c b/popup.c
index 16b7b260..f4afbd85 100644
--- a/popup.c
+++ b/popup.c
@@ -350,6 +350,22 @@ popup_job_complete_cb(struct job *job)
}
u_int
+popup_height(u_int nlines, const char **lines)
+{
+ char *copy, *next, *loop;
+ u_int i, height = 0;
+
+ for (i = 0; i < nlines; i++) {
+ copy = next = xstrdup(lines[i]);
+ while ((loop = strsep(&next, "\n")) != NULL)
+ height++;
+ free(copy);
+ }
+
+ return (height);
+}
+
+u_int
popup_width(struct cmdq_item *item, u_int nlines, const char **lines,
struct client *c, struct cmd_find_state *fs)
{
@@ -372,8 +388,8 @@ popup_width(struct cmdq_item *item, u_int nlines, const char **lines,
width = tmpwidth;
free(tmp);
}
+ free(copy);
}
- free(copy);
format_free(ft);
return (width);
@@ -394,8 +410,6 @@ popup_display(int flags, struct cmdq_item *item, u_int px, u_int py, u_int sx,
return (-1);
if (c->tty.sx < sx || c->tty.sy < sy)
return (-1);
- if (nlines > sy - 2)
- nlines = sy - 2;
pd = xcalloc(1, sizeof *pd);
pd->item = item;
diff --git a/tmux.1 b/tmux.1
index 4e3c6e58..56ee2ba8 100644
--- a/tmux.1
+++ b/tmux.1
@@ -5025,7 +5025,7 @@ It may be empty to discard any key presses.
If
.Fl K
is given together with
-.Fl R,
+.Fl R ,
key presses are instead passed to the
.Fl R
shell command.
diff --git a/tmux.h b/tmux.h
index 1fc39595..dc680361 100644
--- a/tmux.h
+++ b/tmux.h
@@ -2767,6 +2767,7 @@ int menu_display(struct menu *, int, struct cmdq_item *, u_int,
#define POPUP_CLOSEEXIT 0x2
u_int popup_width(struct cmdq_item *, u_int, const char **,
struct client *, struct cmd_find_state *);
+u_int popup_height(u_int, const char **);
int popup_display(int, struct cmdq_item *, u_int, u_int, u_int,
u_int, u_int, const char **, const char *, const char *,
const char *, struct client *, struct cmd_find_state *);