Home | History | Annotate | Download | only in dist

Lines Matching refs:wp

66 	u_int			 wp;
73 static void window_pane_full_size_offset(struct window_pane *wp,
370 window_pane_destroy_ready(struct window_pane *wp)
374 if (wp->pipe_fd != -1) {
375 if (EVBUFFER_LENGTH(wp->pipe_event->output) != 0)
377 if (ioctl(wp->fd, FIONREAD, &n) != -1 && n > 0)
381 if (~wp->flags & PANE_EXITED)
431 window_pane_send_resize(struct window_pane *wp, u_int sx, u_int sy)
433 struct window *w = wp->window;
436 if (wp->fd == -1)
439 log_debug("%s: %%%u resize to %u,%u", __func__, wp->id, sx, sy);
446 if (ioctl(wp->fd, TIOCSWINSZ, &ws) == -1)
460 window_has_pane(struct window *w, struct window_pane *wp)
465 if (wp1 == wp)
481 window_pane_update_focus(struct window_pane *wp)
486 if (wp != NULL && (~wp->flags & PANE_EXITED)) {
487 if (wp != wp->window->active)
494 c->session->curw->window == wp->window &&
501 if (!focused && (wp->flags & PANE_FOCUSED)) {
502 log_debug("%s: %%%u focus out", __func__, wp->id);
503 if (wp->base.mode & MODE_FOCUSON)
504 bufferevent_write(wp->event, "\033[O", 3);
505 notify_pane("pane-focus-out", wp);
506 wp->flags &= ~PANE_FOCUSED;
507 } else if (focused && (~wp->flags & PANE_FOCUSED)) {
508 log_debug("%s: %%%u focus in", __func__, wp->id);
509 if (wp->base.mode & MODE_FOCUSON)
510 bufferevent_write(wp->event, "\033[I", 3);
511 notify_pane("pane-focus-in", wp);
512 wp->flags |= PANE_FOCUSED;
514 log_debug("%s: %%%u focus unchanged", __func__, wp->id);
519 window_set_active_pane(struct window *w, struct window_pane *wp, int notify)
523 log_debug("%s: pane %%%u", __func__, wp->id);
525 if (wp == w->active)
529 window_pane_stack_remove(&w->last_panes, wp);
532 w->active = wp;
549 window_pane_get_palette(struct window_pane *wp, int c)
551 if (wp == NULL)
553 return (colour_palette_get(&wp->palette, c));
557 window_redraw_active_switch(struct window *w, struct window_pane *wp)
562 if (wp == w->active)
570 gc1 = &wp->cached_gc;
571 gc2 = &wp->cached_active_gc;
573 wp->flags |= PANE_REDRAW;
575 c1 = window_pane_get_palette(wp, gc1->fg);
576 c2 = window_pane_get_palette(wp, gc2->fg);
578 wp->flags |= PANE_REDRAW;
580 c1 = window_pane_get_palette(wp, gc1->bg);
581 c2 = window_pane_get_palette(wp, gc2->bg);
583 wp->flags |= PANE_REDRAW;
586 if (wp == w->active)
588 wp = w->active;
595 struct window_pane *wp;
598 TAILQ_FOREACH(wp, &w->panes, entry) {
599 if (!window_pane_visible(wp))
601 window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
606 return (wp);
653 window_zoom(struct window_pane *wp)
655 struct window *w = wp->window;
664 if (w->active != wp)
665 window_set_active_pane(w, wp, 1);
673 layout_init(w, wp);
683 struct window_pane *wp;
693 TAILQ_FOREACH(wp, &w->panes, entry) {
694 wp->layout_cell = wp->saved_layout_cell;
695 wp->saved_layout_cell = NULL;
731 struct window_pane *wp;
736 wp = window_pane_create(w, w->sx, w->sy, hlimit);
739 TAILQ_INSERT_HEAD(&w->panes, wp, entry);
741 log_debug("%s: @%u before %%%u", __func__, w->id, wp->id);
743 TAILQ_INSERT_HEAD(&w->panes, wp, entry);
745 TAILQ_INSERT_BEFORE(other, wp, entry);
747 log_debug("%s: @%u after %%%u", __func__, w->id, wp->id);
749 TAILQ_INSERT_TAIL(&w->panes, wp, entry);
751 wp, entry);
753 return (wp);
757 window_lost_pane(struct window *w, struct window_pane *wp)
759 log_debug("%s: @%u pane %%%u", __func__, w->id, wp->id);
761 if (wp == marked_pane.wp)
764 window_pane_stack_remove(&w->last_panes, wp);
765 if (wp == w->active) {
768 w->active = TAILQ_PREV(wp, window_panes, entry);
770 w->active = TAILQ_NEXT(wp, entry);
782 window_remove_pane(struct window *w, struct window_pane *wp)
784 window_lost_pane(w, wp);
786 TAILQ_REMOVE(&w->panes, wp, entry);
787 window_pane_destroy(wp);
793 struct window_pane *wp;
797 TAILQ_FOREACH(wp, &w->panes, entry) {
799 return (wp);
806 window_pane_next_by_number(struct window *w, struct window_pane *wp, u_int n)
809 if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
810 wp = TAILQ_FIRST(&w->panes);
813 return (wp);
817 window_pane_previous_by_number(struct window *w, struct window_pane *wp,
821 if ((wp = TAILQ_PREV(wp, window_panes, entry)) == NULL)
822 wp = TAILQ_LAST(&w->panes, window_panes);
825 return (wp);
829 window_pane_index(struct window_pane *wp, u_int *i)
832 struct window *w = wp->window;
836 if (wp == wq) {
848 struct window_pane *wp;
852 TAILQ_FOREACH(wp, &w->panes, entry)
860 struct window_pane *wp;
863 wp = TAILQ_FIRST(&w->last_panes);
864 window_pane_stack_remove(&w->last_panes, wp);
868 wp = TAILQ_FIRST(&w->panes);
869 TAILQ_REMOVE(&w->panes, wp, entry);
870 window_pane_destroy(wp);
921 struct window_pane wp;
923 wp.id = id;
924 return (RB_FIND(window_pane_tree, &all_window_panes, &wp));
930 struct window_pane *wp;
933 wp = xcalloc(1, sizeof *wp);
934 wp->window = w;
935 wp->options = options_create(w->options);
936 wp->flags = (PANE_STYLECHANGED|PANE_THEMECHANGED);
938 wp->id = next_window_pane_id++;
939 RB_INSERT(window_pane_tree, &all_window_panes, wp);
941 wp->fd = -1;
943 TAILQ_INIT(&wp->modes);
945 TAILQ_INIT (&wp->resize_queue);
947 wp->sx = sx;
948 wp->sy = sy;
950 wp->pipe_fd = -1;
952 wp->control_bg = -1;
953 wp->control_fg = -1;
955 style_set_scrollbar_style_from_option(&wp->scrollbar_style,
956 wp->options);
958 colour_palette_init(&wp->palette);
959 colour_palette_from_option(&wp->palette, wp->options);
961 screen_init(&wp->base, sx, sy, hlimit);
962 wp->screen = &wp->base;
963 window_pane_default_cursor(wp);
965 screen_init(&wp->status_screen, 1, 1, 0);
968 screen_set_title(&wp->base, host);
970 return (wp);
974 window_pane_destroy(struct window_pane *wp)
979 window_pane_reset_mode_all(wp);
980 free(wp->searchstr);
982 if (wp->fd != -1) {
984 utempter_remove_record(wp->fd);
987 bufferevent_free(wp->event);
988 close(wp->fd);
990 if (wp->ictx != NULL)
991 input_free(wp->ictx);
993 screen_free(&wp->status_screen);
995 screen_free(&wp->base);
997 if (wp->pipe_fd != -1) {
998 bufferevent_free(wp->pipe_event);
999 close(wp->pipe_fd);
1002 if (event_initialized(&wp->resize_timer))
1003 event_del(&wp->resize_timer);
1004 TAILQ_FOREACH_SAFE(r, &wp->resize_queue, entry, r1) {
1005 TAILQ_REMOVE(&wp->resize_queue, r, entry);
1009 RB_REMOVE(window_pane_tree, &all_window_panes, wp);
1011 options_free(wp->options);
1012 free(__UNCONST(wp->cwd));
1013 free(wp->shell);
1014 cmd_free_argv(wp->argc, wp->argv);
1015 colour_palette_free(&wp->palette);
1016 free(wp);
1022 struct window_pane *wp = data;
1023 struct evbuffer *evb = wp->event->input;
1024 struct window_pane_offset *wpo = &wp->pipe_offset;
1030 if (wp->pipe_fd != -1) {
1031 new_data = window_pane_get_new_data(wp, wpo, &new_size);
1033 bufferevent_write(wp->pipe_event, new_data, new_size);
1034 window_pane_update_used_data(wp, wpo, new_size);
1038 log_debug("%%%u has %zu bytes", wp->id, size);
1041 control_write_output(c, wp);
1043 input_parse_pane(wp);
1044 bufferevent_disable(wp->event, EV_READ);
1051 struct window_pane *wp = data;
1053 log_debug("%%%u error", wp->id);
1054 wp->flags |= PANE_EXITED;
1056 if (window_pane_destroy_ready(wp))
1057 server_destroy_pane(wp, 1);
1061 window_pane_set_event(struct window_pane *wp)
1063 setblocking(wp->fd, 0);
1065 wp->event = bufferevent_new(wp->fd, window_pane_read_callback,
1066 NULL, window_pane_error_callback, wp);
1067 if (wp->event == NULL)
1069 wp->ictx = input_init(wp, wp->event, &wp->palette);
1071 bufferevent_enable(wp->event, EV_READ|EV_WRITE);
1075 window_pane_resize(struct window_pane *wp, u_int sx, u_int sy)
1080 if (sx == wp->sx && sy == wp->sy)
1086 r->osx = wp->sx;
1087 r->osy = wp->sy;
1088 TAILQ_INSERT_TAIL (&wp->resize_queue, r, entry);
1090 wp->sx = sx;
1091 wp->sy = sy;
1093 log_debug("%s: %%%u resize %ux%u", __func__, wp->id, sx, sy);
1094 screen_resize(&wp->base, sx, sy, wp->base.saved_grid == NULL);
1096 wme = TAILQ_FIRST(&wp->modes);
1102 window_pane_set_mode(struct window_pane *wp, struct window_pane *swp,
1107 struct window *w = wp->window;
1109 if (!TAILQ_EMPTY(&wp->modes) && TAILQ_FIRST(&wp->modes)->mode == mode)
1112 TAILQ_FOREACH(wme, &wp->modes, entry) {
1117 TAILQ_REMOVE(&wp->modes, wme, entry);
1118 TAILQ_INSERT_HEAD(&wp->modes, wme, entry);
1121 wme->wp = wp;
1125 TAILQ_INSERT_HEAD(&wp->modes, wme, entry);
1128 wp->screen = wme->screen;
1130 wp->flags |= (PANE_REDRAW|PANE_REDRAWSCROLLBAR|PANE_CHANGED);
1133 server_redraw_window_borders(wp->window);
1134 server_status_window(wp->window);
1135 notify_pane("pane-mode-changed", wp);
1141 window_pane_reset_mode(struct window_pane *wp)
1144 struct window *w = wp->window;
1146 if (TAILQ_EMPTY(&wp->modes))
1149 wme = TAILQ_FIRST(&wp->modes);
1150 TAILQ_REMOVE(&wp->modes, wme, entry);
1154 next = TAILQ_FIRST(&wp->modes);
1156 wp->flags &= ~PANE_UNSEENCHANGES;
1158 wp->screen = &wp->base;
1161 wp->screen = next->screen;
1163 next->mode->resize(next, wp->sx, wp->sy);
1166 wp->flags |= (PANE_REDRAW|PANE_REDRAWSCROLLBAR|PANE_CHANGED);
1169 server_redraw_window_borders(wp->window);
1170 server_status_window(wp->window);
1171 notify_pane("pane-mode-changed", wp);
1175 window_pane_reset_mode_all(struct window_pane *wp)
1177 while (!TAILQ_EMPTY(&wp->modes))
1178 window_pane_reset_mode(wp);
1182 window_pane_copy_paste(struct window_pane *wp, char *buf, size_t len)
1186 TAILQ_FOREACH(loop, &wp->window->panes, entry) {
1187 if (loop != wp &&
1200 window_pane_copy_key(struct window_pane *wp, key_code key)
1204 TAILQ_FOREACH(loop, &wp->window->panes, entry) {
1205 if (loop != wp &&
1216 window_pane_paste(struct window_pane *wp, key_code key, char *buf, size_t len)
1218 if (!TAILQ_EMPTY(&wp->modes))
1221 if (wp->fd == -1 || wp->flags & PANE_INPUTOFF)
1224 if (KEYC_IS_PASTE(key) && (~wp->screen->mode & MODE_BRACKETPASTE))
1228 bufferevent_write(wp->event, buf, len);
1230 if (options_get_number(wp->options, "synchronize-panes"))
1231 window_pane_copy_paste(wp, buf, len);
1235 window_pane_key(struct window_pane *wp, struct client *c, struct session *s,
1243 wme = TAILQ_FIRST(&wp->modes);
1252 if (wp->fd == -1 || wp->flags & PANE_INPUTOFF)
1255 if (input_key_pane(wp, key, m) != 0)
1260 if (options_get_number(wp->options, "synchronize-panes"))
1261 window_pane_copy_key(wp, key);
1266 window_pane_visible(struct window_pane *wp)
1268 if (~wp->window->flags & WINDOW_ZOOMED)
1270 return (wp == wp->window->active);
1274 window_pane_exited(struct window_pane *wp)
1276 return (wp->fd == -1 || (wp->flags & PANE_EXITED));
1280 window_pane_search(struct window_pane *wp, const char *term, int regex,
1283 struct screen *s = &wp->base;
1351 window_pane_full_size_offset(struct window_pane *wp, u_int *xoff, u_int *yoff,
1354 struct window *w = wp->window;
1361 if (window_pane_show_scrollbar(wp, pane_scrollbars))
1362 sb_w = wp->scrollbar_style.width + wp->scrollbar_style.pad;
1366 *xoff = wp->xoff - sb_w;
1367 *sx = wp->sx + sb_w;
1369 *xoff = wp->xoff;
1370 *sx = wp->sx + sb_w;
1372 *yoff = wp->yoff;
1373 *sy = wp->sy;
1381 window_pane_find_up(struct window_pane *wp)
1389 if (wp == NULL)
1391 w = wp->window;
1397 window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
1416 if (next == wp)
1442 window_pane_find_down(struct window_pane *wp)
1450 if (wp == NULL)
1452 w = wp->window;
1458 window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
1472 left = wp->xoff;
1473 right = wp->xoff + wp->sx;
1477 if (next == wp)
1503 window_pane_find_left(struct window_pane *wp)
1511 if (wp == NULL)
1513 w = wp->window;
1518 window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
1529 if (next == wp)
1555 window_pane_find_right(struct window_pane *wp)
1563 if (wp == NULL)
1565 w = wp->window;
1570 window_pane_full_size_offset(wp, &xoff, &yoff, &sx, &sy);
1576 top = wp->yoff;
1577 bottom = wp->yoff + wp->sy;
1581 if (next == wp)
1606 window_pane_stack_push(struct window_panes *stack, struct window_pane *wp)
1608 if (wp != NULL) {
1609 window_pane_stack_remove(stack, wp);
1610 TAILQ_INSERT_HEAD(stack, wp, sentry);
1611 wp->flags |= PANE_VISITED;
1616 window_pane_stack_remove(struct window_panes *stack, struct window_pane *wp)
1618 if (wp != NULL && (wp->flags & PANE_VISITED)) {
1619 TAILQ_REMOVE(stack, wp, sentry);
1620 wp->flags &= ~PANE_VISITED;
1676 struct window_pane *wp;
1680 wp = window_pane_find_by_id(cdata->wp);
1681 if (cdata->file != NULL && (wp == NULL || c->flags & CLIENT_DEAD)) {
1682 if (wp == NULL) {
1692 input_parse_buffer(wp, buf, len);
1697 window_pane_start_input(struct window_pane *wp, struct cmdq_item *item,
1703 if (~wp->flags & PANE_EMPTY) {
1714 cdata->wp = wp->id;
1722 window_pane_get_new_data(struct window_pane *wp,
1725 size_t used = wpo->used - wp->base_offset;
1727 *size = EVBUFFER_LENGTH(wp->event->input) - used;
1728 return (EVBUFFER_DATA(wp->event->input) + used);
1732 window_pane_update_used_data(struct window_pane *wp,
1735 size_t used = wpo->used - wp->base_offset;
1737 if (size > EVBUFFER_LENGTH(wp->event->input) - used)
1738 size = EVBUFFER_LENGTH(wp->event->input) - used;
1762 window_pane_default_cursor(struct window_pane *wp)
1764 screen_set_default_cursor(wp->screen, wp->options);
1768 window_pane_mode(struct window_pane *wp)
1770 if (TAILQ_FIRST(&wp->modes) != NULL) {
1771 if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode)
1773 if (TAILQ_FIRST(&wp->modes)->mode == &window_view_mode)
1781 window_pane_show_scrollbar(struct window_pane *wp, int sb_option)
1783 if (SCREEN_IS_ALTERNATE(wp->screen))
1787 window_pane_mode(wp) != WINDOW_PANE_NO_MODE))
1793 window_pane_get_bg(struct window_pane *wp)
1798 c = window_pane_get_bg_control_client(wp);
1800 tty_default_colours(&defaults, wp);
1802 c = window_get_bg_client(wp);
1811 window_get_bg_client(struct window_pane *wp)
1813 struct window *w = wp->window;
1833 window_pane_get_bg_control_client(struct window_pane *wp)
1837 if (wp->control_bg == -1)
1842 return (wp->control_bg);
1852 window_pane_get_fg(struct window_pane *wp)
1854 struct window *w = wp->window;
1874 window_pane_get_fg_control_client(struct window_pane *wp)
1878 if (wp->control_fg == -1)
1883 return (wp->control_fg);
1889 window_pane_get_theme(struct window_pane *wp)
1896 if (wp == NULL)
1898 w = wp->window;
1904 theme = colour_totheme(window_pane_get_bg(wp));
1934 window_pane_send_theme_update(struct window_pane *wp)
1936 if (wp == NULL || window_pane_exited(wp))
1938 if (~wp->flags & PANE_THEMECHANGED)
1940 if (~wp->screen->mode & MODE_THEME_UPDATES)
1943 switch (window_pane_get_theme(wp)) {
1945 input_key_pane(wp, KEYC_REPORT_LIGHT_THEME, NULL);
1948 input_key_pane(wp, KEYC_REPORT_DARK_THEME, NULL);
1954 wp->flags &= ~PANE_THEMECHANGED;