mirror of
https://github.com/tmux/tmux.git
synced 2025-03-29 18:28:47 +00:00
Add a W position to display-menu -y to use the line above (or below) the
status line containing the window list. Leave S meaning above (or below) all status lines. GitHub issue 2145.
This commit is contained in:
parent
05a15215c5
commit
90f4e149c1
@ -65,12 +65,26 @@ static void
|
|||||||
cmd_display_menu_get_position(struct client *c, struct cmdq_item *item,
|
cmd_display_menu_get_position(struct client *c, struct cmdq_item *item,
|
||||||
struct args *args, u_int *px, u_int *py, u_int w, u_int h)
|
struct args *args, u_int *px, u_int *py, u_int w, u_int h)
|
||||||
{
|
{
|
||||||
|
struct session *s = c->session;
|
||||||
struct winlink *wl = item->target.wl;
|
struct winlink *wl = item->target.wl;
|
||||||
struct window_pane *wp = item->target.wp;
|
struct window_pane *wp = item->target.wp;
|
||||||
|
struct style_ranges *ranges;
|
||||||
struct style_range *sr;
|
struct style_range *sr;
|
||||||
const char *xp, *yp;
|
const char *xp, *yp;
|
||||||
int at = status_at_line(c);
|
u_int line, ox, oy, sx, sy, lines;
|
||||||
u_int ox, oy, sx, sy;
|
|
||||||
|
lines = status_line_size(c);
|
||||||
|
for (line = 0; line < lines; line++) {
|
||||||
|
ranges = &c->status.entries[line].ranges;
|
||||||
|
TAILQ_FOREACH(sr, ranges, entry) {
|
||||||
|
if (sr->type == STYLE_RANGE_WINDOW)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (sr != NULL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (line == lines)
|
||||||
|
ranges = &c->status.entries[0].ranges;
|
||||||
|
|
||||||
xp = args_get(args, 'x');
|
xp = args_get(args, 'x');
|
||||||
if (xp == NULL || strcmp(xp, "C") == 0)
|
if (xp == NULL || strcmp(xp, "C") == 0)
|
||||||
@ -89,10 +103,10 @@ cmd_display_menu_get_position(struct client *c, struct cmdq_item *item,
|
|||||||
else
|
else
|
||||||
*px = 0;
|
*px = 0;
|
||||||
} else if (strcmp(xp, "W") == 0) {
|
} else if (strcmp(xp, "W") == 0) {
|
||||||
if (at == -1)
|
if (status_at_line(c) == -1)
|
||||||
*px = 0;
|
*px = 0;
|
||||||
else {
|
else {
|
||||||
TAILQ_FOREACH(sr, &c->status.entries[0].ranges, entry) {
|
TAILQ_FOREACH(sr, ranges, entry) {
|
||||||
if (sr->type != STYLE_RANGE_WINDOW)
|
if (sr->type != STYLE_RANGE_WINDOW)
|
||||||
continue;
|
continue;
|
||||||
if (sr->argument == (u_int)wl->idx)
|
if (sr->argument == (u_int)wl->idx)
|
||||||
@ -120,12 +134,30 @@ cmd_display_menu_get_position(struct client *c, struct cmdq_item *item,
|
|||||||
} else if (strcmp(yp, "M") == 0 && item->shared->mouse.valid)
|
} else if (strcmp(yp, "M") == 0 && item->shared->mouse.valid)
|
||||||
*py = item->shared->mouse.y + h;
|
*py = item->shared->mouse.y + h;
|
||||||
else if (strcmp(yp, "S") == 0) {
|
else if (strcmp(yp, "S") == 0) {
|
||||||
if (at == -1)
|
if (options_get_number(s->options, "status-position") == 0) {
|
||||||
*py = c->tty.sy;
|
if (lines != 0)
|
||||||
else if (at == 0)
|
*py = lines + h;
|
||||||
*py = status_line_size(c) + h;
|
else
|
||||||
else
|
*py = 0;
|
||||||
*py = at;
|
} else {
|
||||||
|
if (lines != 0)
|
||||||
|
*py = c->tty.sy - lines;
|
||||||
|
else
|
||||||
|
*py = c->tty.sy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(yp, "W") == 0) {
|
||||||
|
if (options_get_number(s->options, "status-position") == 0) {
|
||||||
|
if (lines != 0)
|
||||||
|
*py = line + 1 + h;
|
||||||
|
else
|
||||||
|
*py = 0;
|
||||||
|
} else {
|
||||||
|
if (lines != 0)
|
||||||
|
*py = c->tty.sy - lines + line;
|
||||||
|
else
|
||||||
|
*py = c->tty.sy;
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
*py = strtoul(yp, NULL, 10);
|
*py = strtoul(yp, NULL, 10);
|
||||||
if (*py < h)
|
if (*py < h)
|
||||||
|
@ -317,7 +317,7 @@ key_bindings_init(void)
|
|||||||
"bind -N 'Resize the pane right' -r C-Right resize-pane -R",
|
"bind -N 'Resize the pane right' -r C-Right resize-pane -R",
|
||||||
|
|
||||||
/* Menu keys */
|
/* Menu keys */
|
||||||
"bind < display-menu -xW -yS -T '#[align=centre]#{window_index}:#{window_name}' " DEFAULT_WINDOW_MENU,
|
"bind < display-menu -xW -yW -T '#[align=centre]#{window_index}:#{window_name}' " DEFAULT_WINDOW_MENU,
|
||||||
"bind > display-menu -xP -yP -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU,
|
"bind > display-menu -xP -yP -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU,
|
||||||
|
|
||||||
/* Mouse button 1 down on pane. */
|
/* Mouse button 1 down on pane. */
|
||||||
@ -351,10 +351,10 @@ key_bindings_init(void)
|
|||||||
"bind -n WheelUpStatus previous-window",
|
"bind -n WheelUpStatus previous-window",
|
||||||
|
|
||||||
/* Mouse button 3 down on status left. */
|
/* Mouse button 3 down on status left. */
|
||||||
"bind -n MouseDown3StatusLeft display-menu -t= -xM -yS -T '#[align=centre]#{session_name}' " DEFAULT_SESSION_MENU,
|
"bind -n MouseDown3StatusLeft display-menu -t= -xM -yW -T '#[align=centre]#{session_name}' " DEFAULT_SESSION_MENU,
|
||||||
|
|
||||||
/* Mouse button 3 down on status line. */
|
/* Mouse button 3 down on status line. */
|
||||||
"bind -n MouseDown3Status display-menu -t= -xW -yS -T '#[align=centre]#{window_index}:#{window_name}' " DEFAULT_WINDOW_MENU,
|
"bind -n MouseDown3Status display-menu -t= -xW -yW -T '#[align=centre]#{window_index}:#{window_name}' " DEFAULT_WINDOW_MENU,
|
||||||
|
|
||||||
/* Mouse button 3 down on pane. */
|
/* Mouse button 3 down on pane. */
|
||||||
"bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{&&:#{pane_in_mode},#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}}}' { select-pane -t=; send -M } { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " }",
|
"bind -n MouseDown3Pane if -Ft= '#{||:#{mouse_any_flag},#{&&:#{pane_in_mode},#{?#{m/r:(copy|view)-mode,#{pane_mode}},0,1}}}' { select-pane -t=; send -M } { display-menu -t= -xM -yM -T '#[align=centre]#{pane_index} (#{pane_id})' " DEFAULT_PANE_MENU " }",
|
||||||
|
2
tmux.1
2
tmux.1
@ -4985,7 +4985,7 @@ Both may be a row or column number, or one of the following special values:
|
|||||||
.It Li "R" Ta Fl x Ta "The right side of the terminal"
|
.It Li "R" Ta Fl x Ta "The right side of the terminal"
|
||||||
.It Li "P" Ta "Both" Ta "The bottom left of the pane"
|
.It Li "P" Ta "Both" Ta "The bottom left of the pane"
|
||||||
.It Li "M" Ta "Both" Ta "The mouse position"
|
.It Li "M" Ta "Both" Ta "The mouse position"
|
||||||
.It Li "W" Ta Fl x Ta "The window position on the status line"
|
.It Li "W" Ta "Both" Ta "The window position on the status line"
|
||||||
.It Li "S" Ta Fl y Ta "The line above or below the status line"
|
.It Li "S" Ta Fl y Ta "The line above or below the status line"
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
|
Loading…
Reference in New Issue
Block a user