Lines Matching defs:wp
68 u_int 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)
451 window_has_pane(struct window *w, struct window_pane *wp)
456 if (wp1 == wp)
472 window_pane_update_focus(struct window_pane *wp)
477 if (wp != NULL && (~wp->flags & PANE_EXITED)) {
478 if (wp != wp->window->active)
485 c->session->curw->window == wp->window &&
492 if (!focused && (wp->flags & PANE_FOCUSED)) {
493 log_debug("%s: %%%u focus out", __func__, wp->id);
494 if (wp->base.mode & MODE_FOCUSON)
495 bufferevent_write(wp->event, "\033[O", 3);
496 notify_pane("pane-focus-out", wp);
497 wp->flags &= ~PANE_FOCUSED;
498 } else if (focused && (~wp->flags & PANE_FOCUSED)) {
499 log_debug("%s: %%%u focus in", __func__, wp->id);
500 if (wp->base.mode & MODE_FOCUSON)
501 bufferevent_write(wp->event, "\033[I", 3);
502 notify_pane("pane-focus-in", wp);
503 wp->flags |= PANE_FOCUSED;
505 log_debug("%s: %%%u focus unchanged", __func__, wp->id);
510 window_set_active_pane(struct window *w, struct window_pane *wp, int notify)
514 log_debug("%s: pane %%%u", __func__, wp->id);
516 if (wp == w->active)
520 window_pane_stack_remove(&w->last_panes, wp);
523 w->active = wp;
540 window_pane_get_palette(struct window_pane *wp, int c)
542 if (wp == NULL)
544 return (colour_palette_get(&wp->palette, c));
548 window_redraw_active_switch(struct window *w, struct window_pane *wp)
553 if (wp == w->active)
561 gc1 = &wp->cached_gc;
562 gc2 = &wp->cached_active_gc;
564 wp->flags |= PANE_REDRAW;
566 c1 = window_pane_get_palette(wp, gc1->fg);
567 c2 = window_pane_get_palette(wp, gc2->fg);
569 wp->flags |= PANE_REDRAW;
571 c1 = window_pane_get_palette(wp, gc1->bg);
572 c2 = window_pane_get_palette(wp, gc2->bg);
574 wp->flags |= PANE_REDRAW;
577 if (wp == w->active)
579 wp = w->active;
586 struct window_pane *wp;
593 TAILQ_FOREACH(wp, &w->panes, entry) {
594 if (!window_pane_visible(wp))
599 window_pane_mode(wp) != WINDOW_PANE_NO_MODE)) {
600 sb_w = wp->scrollbar_style.width +
601 wp->scrollbar_style.pad;
606 xoff = wp->xoff - sb_w;
607 sx = wp->sx + sb_w;
609 xoff = wp->xoff;
610 sx = wp->sx + sb_w;
614 if (y < wp->yoff || y > wp->yoff + wp->sy)
616 return (wp);
663 window_zoom(struct window_pane *wp)
665 struct window *w = wp->window;
674 if (w->active != wp)
675 window_set_active_pane(w, wp, 1);
683 layout_init(w, wp);
693 struct window_pane *wp;
703 TAILQ_FOREACH(wp, &w->panes, entry) {
704 wp->layout_cell = wp->saved_layout_cell;
705 wp->saved_layout_cell = NULL;
741 struct window_pane *wp;
746 wp = window_pane_create(w, w->sx, w->sy, hlimit);
749 TAILQ_INSERT_HEAD(&w->panes, wp, entry);
751 log_debug("%s: @%u before %%%u", __func__, w->id, wp->id);
753 TAILQ_INSERT_HEAD(&w->panes, wp, entry);
755 TAILQ_INSERT_BEFORE(other, wp, entry);
757 log_debug("%s: @%u after %%%u", __func__, w->id, wp->id);
759 TAILQ_INSERT_TAIL(&w->panes, wp, entry);
761 TAILQ_INSERT_AFTER(&w->panes, other, wp, entry);
763 return (wp);
767 window_lost_pane(struct window *w, struct window_pane *wp)
769 log_debug("%s: @%u pane %%%u", __func__, w->id, wp->id);
771 if (wp == marked_pane.wp)
774 window_pane_stack_remove(&w->last_panes, wp);
775 if (wp == w->active) {
778 w->active = TAILQ_PREV(wp, window_panes, entry);
780 w->active = TAILQ_NEXT(wp, entry);
792 window_remove_pane(struct window *w, struct window_pane *wp)
794 window_lost_pane(w, wp);
796 TAILQ_REMOVE(&w->panes, wp, entry);
797 window_pane_destroy(wp);
803 struct window_pane *wp;
807 TAILQ_FOREACH(wp, &w->panes, entry) {
809 return (wp);
816 window_pane_next_by_number(struct window *w, struct window_pane *wp, u_int n)
819 if ((wp = TAILQ_NEXT(wp, entry)) == NULL)
820 wp = TAILQ_FIRST(&w->panes);
823 return (wp);
827 window_pane_previous_by_number(struct window *w, struct window_pane *wp,
831 if ((wp = TAILQ_PREV(wp, window_panes, entry)) == NULL)
832 wp = TAILQ_LAST(&w->panes, window_panes);
835 return (wp);
839 window_pane_index(struct window_pane *wp, u_int *i)
842 struct window *w = wp->window;
846 if (wp == wq) {
858 struct window_pane *wp;
862 TAILQ_FOREACH(wp, &w->panes, entry)
870 struct window_pane *wp;
873 wp = TAILQ_FIRST(&w->last_panes);
874 window_pane_stack_remove(&w->last_panes, wp);
878 wp = TAILQ_FIRST(&w->panes);
879 TAILQ_REMOVE(&w->panes, wp, entry);
880 window_pane_destroy(wp);
931 struct window_pane wp;
933 wp.id = id;
934 return (RB_FIND(window_pane_tree, &all_window_panes, &wp));
940 struct window_pane *wp;
943 wp = xcalloc(1, sizeof *wp);
944 wp->window = w;
945 wp->options = options_create(w->options);
946 wp->flags = PANE_STYLECHANGED;
948 wp->id = next_window_pane_id++;
949 RB_INSERT(window_pane_tree, &all_window_panes, wp);
951 wp->fd = -1;
953 TAILQ_INIT(&wp->modes);
955 TAILQ_INIT (&wp->resize_queue);
957 wp->sx = sx;
958 wp->sy = sy;
960 wp->pipe_fd = -1;
962 wp->control_bg = -1;
963 wp->control_fg = -1;
965 style_set_scrollbar_style_from_option(&wp->scrollbar_style,
966 wp->options);
968 colour_palette_init(&wp->palette);
969 colour_palette_from_option(&wp->palette, wp->options);
971 screen_init(&wp->base, sx, sy, hlimit);
972 wp->screen = &wp->base;
973 window_pane_default_cursor(wp);
975 screen_init(&wp->status_screen, 1, 1, 0);
978 screen_set_title(&wp->base, host);
980 return (wp);
984 window_pane_destroy(struct window_pane *wp)
989 window_pane_reset_mode_all(wp);
990 free(wp->searchstr);
992 if (wp->fd != -1) {
993 bufferevent_free(wp->event);
994 close(wp->fd);
996 if (wp->ictx != NULL)
997 input_free(wp->ictx);
999 screen_free(&wp->status_screen);
1001 screen_free(&wp->base);
1003 if (wp->pipe_fd != -1) {
1004 bufferevent_free(wp->pipe_event);
1005 close(wp->pipe_fd);
1008 if (event_initialized(&wp->resize_timer))
1009 event_del(&wp->resize_timer);
1010 TAILQ_FOREACH_SAFE(r, &wp->resize_queue, entry, r1) {
1011 TAILQ_REMOVE(&wp->resize_queue, r, entry);
1015 RB_REMOVE(window_pane_tree, &all_window_panes, wp);
1017 options_free(wp->options);
1018 free((void *)wp->cwd);
1019 free(wp->shell);
1020 cmd_free_argv(wp->argc, wp->argv);
1021 colour_palette_free(&wp->palette);
1022 free(wp);
1028 struct window_pane *wp = data;
1029 struct evbuffer *evb = wp->event->input;
1030 struct window_pane_offset *wpo = &wp->pipe_offset;
1036 if (wp->pipe_fd != -1) {
1037 new_data = window_pane_get_new_data(wp, wpo, &new_size);
1039 bufferevent_write(wp->pipe_event, new_data, new_size);
1040 window_pane_update_used_data(wp, wpo, new_size);
1044 log_debug("%%%u has %zu bytes", wp->id, size);
1047 control_write_output(c, wp);
1049 input_parse_pane(wp);
1050 bufferevent_disable(wp->event, EV_READ);
1057 struct window_pane *wp = data;
1059 log_debug("%%%u error", wp->id);
1060 wp->flags |= PANE_EXITED;
1062 if (window_pane_destroy_ready(wp))
1063 server_destroy_pane(wp, 1);
1067 window_pane_set_event(struct window_pane *wp)
1069 setblocking(wp->fd, 0);
1071 wp->event = bufferevent_new(wp->fd, window_pane_read_callback,
1072 NULL, window_pane_error_callback, wp);
1073 if (wp->event == NULL)
1075 wp->ictx = input_init(wp, wp->event, &wp->palette);
1077 bufferevent_enable(wp->event, EV_READ|EV_WRITE);
1081 window_pane_resize(struct window_pane *wp, u_int sx, u_int sy)
1086 if (sx == wp->sx && sy == wp->sy)
1092 r->osx = wp->sx;
1093 r->osy = wp->sy;
1094 TAILQ_INSERT_TAIL (&wp->resize_queue, r, entry);
1096 wp->sx = sx;
1097 wp->sy = sy;
1099 log_debug("%s: %%%u resize %ux%u", __func__, wp->id, sx, sy);
1100 screen_resize(&wp->base, sx, sy, wp->base.saved_grid == NULL);
1102 wme = TAILQ_FIRST(&wp->modes);
1108 window_pane_set_mode(struct window_pane *wp, struct window_pane *swp,
1113 struct window *w = wp->window;
1115 if (!TAILQ_EMPTY(&wp->modes) && TAILQ_FIRST(&wp->modes)->mode == mode)
1118 TAILQ_FOREACH(wme, &wp->modes, entry) {
1123 TAILQ_REMOVE(&wp->modes, wme, entry);
1124 TAILQ_INSERT_HEAD(&wp->modes, wme, entry);
1127 wme->wp = wp;
1131 TAILQ_INSERT_HEAD(&wp->modes, wme, entry);
1134 wp->screen = wme->screen;
1136 wp->flags |= (PANE_REDRAW|PANE_REDRAWSCROLLBAR|PANE_CHANGED);
1139 server_redraw_window_borders(wp->window);
1140 server_status_window(wp->window);
1141 notify_pane("pane-mode-changed", wp);
1147 window_pane_reset_mode(struct window_pane *wp)
1150 struct window *w = wp->window;
1152 if (TAILQ_EMPTY(&wp->modes))
1155 wme = TAILQ_FIRST(&wp->modes);
1156 TAILQ_REMOVE(&wp->modes, wme, entry);
1160 next = TAILQ_FIRST(&wp->modes);
1162 wp->flags &= ~PANE_UNSEENCHANGES;
1164 wp->screen = &wp->base;
1167 wp->screen = next->screen;
1169 next->mode->resize(next, wp->sx, wp->sy);
1172 wp->flags |= (PANE_REDRAW|PANE_REDRAWSCROLLBAR|PANE_CHANGED);
1175 server_redraw_window_borders(wp->window);
1176 server_status_window(wp->window);
1177 notify_pane("pane-mode-changed", wp);
1181 window_pane_reset_mode_all(struct window_pane *wp)
1183 while (!TAILQ_EMPTY(&wp->modes))
1184 window_pane_reset_mode(wp);
1188 window_pane_copy_paste(struct window_pane *wp, char *buf, size_t len)
1192 TAILQ_FOREACH(loop, &wp->window->panes, entry) {
1193 if (loop != wp &&
1206 window_pane_copy_key(struct window_pane *wp, key_code key)
1210 TAILQ_FOREACH(loop, &wp->window->panes, entry) {
1211 if (loop != wp &&
1222 window_pane_paste(struct window_pane *wp, key_code key, char *buf, size_t len)
1224 if (!TAILQ_EMPTY(&wp->modes))
1227 if (wp->fd == -1 || wp->flags & PANE_INPUTOFF)
1230 if (KEYC_IS_PASTE(key) && (~wp->screen->mode & MODE_BRACKETPASTE))
1234 bufferevent_write(wp->event, buf, len);
1236 if (options_get_number(wp->options, "synchronize-panes"))
1237 window_pane_copy_paste(wp, buf, len);
1241 window_pane_key(struct window_pane *wp, struct client *c, struct session *s,
1249 wme = TAILQ_FIRST(&wp->modes);
1258 if (wp->fd == -1 || wp->flags & PANE_INPUTOFF)
1261 if (input_key_pane(wp, key, m) != 0)
1266 if (options_get_number(wp->options, "synchronize-panes"))
1267 window_pane_copy_key(wp, key);
1272 window_pane_visible(struct window_pane *wp)
1274 if (~wp->window->flags & WINDOW_ZOOMED)
1276 return (wp == wp->window->active);
1280 window_pane_exited(struct window_pane *wp)
1282 return (wp->fd == -1 || (wp->flags & PANE_EXITED));
1286 window_pane_search(struct window_pane *wp, const char *term, int regex,
1289 struct screen *s = &wp->base;
1357 window_pane_find_up(struct window_pane *wp)
1364 if (wp == NULL)
1366 w = wp->window;
1372 edge = wp->yoff;
1384 left = wp->xoff;
1385 right = wp->xoff + wp->sx;
1388 if (next == wp)
1414 window_pane_find_down(struct window_pane *wp)
1421 if (wp == NULL)
1423 w = wp->window;
1429 edge = wp->yoff + wp->sy + 1;
1441 left = wp->xoff;
1442 right = wp->xoff + wp->sx;
1445 if (next == wp)
1471 window_pane_find_left(struct window_pane *wp)
1478 if (wp == NULL)
1480 w = wp->window;
1485 edge = wp->xoff;
1489 top = wp->yoff;
1490 bottom = wp->yoff + wp->sy;
1493 if (next == wp)
1519 window_pane_find_right(struct window_pane *wp)
1526 if (wp == NULL)
1528 w = wp->window;
1533 edge = wp->xoff + wp->sx + 1;
1537 top = wp->yoff;
1538 bottom = wp->yoff + wp->sy;
1541 if (next == wp)
1566 window_pane_stack_push(struct window_panes *stack, struct window_pane *wp)
1568 if (wp != NULL) {
1569 window_pane_stack_remove(stack, wp);
1570 TAILQ_INSERT_HEAD(stack, wp, sentry);
1571 wp->flags |= PANE_VISITED;
1576 window_pane_stack_remove(struct window_panes *stack, struct window_pane *wp)
1578 if (wp != NULL && (wp->flags & PANE_VISITED)) {
1579 TAILQ_REMOVE(stack, wp, sentry);
1580 wp->flags &= ~PANE_VISITED;
1636 struct window_pane *wp;
1640 wp = window_pane_find_by_id(cdata->wp);
1641 if (cdata->file != NULL && (wp == NULL || c->flags & CLIENT_DEAD)) {
1642 if (wp == NULL) {
1652 input_parse_buffer(wp, buf, len);
1657 window_pane_start_input(struct window_pane *wp, struct cmdq_item *item,
1663 if (~wp->flags & PANE_EMPTY) {
1674 cdata->wp = wp->id;
1682 window_pane_get_new_data(struct window_pane *wp,
1685 size_t used = wpo->used - wp->base_offset;
1687 *size = EVBUFFER_LENGTH(wp->event->input) - used;
1688 return (EVBUFFER_DATA(wp->event->input) + used);
1692 window_pane_update_used_data(struct window_pane *wp,
1695 size_t used = wpo->used - wp->base_offset;
1697 if (size > EVBUFFER_LENGTH(wp->event->input) - used)
1698 size = EVBUFFER_LENGTH(wp->event->input) - used;
1720 window_pane_default_cursor(struct window_pane *wp)
1722 screen_set_default_cursor(wp->screen, wp->options);
1726 window_pane_mode(struct window_pane *wp)
1728 if (TAILQ_FIRST(&wp->modes) != NULL) {
1729 if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode)
1731 if (TAILQ_FIRST(&wp->modes)->mode == &window_view_mode)
1739 window_pane_show_scrollbar(struct window_pane *wp, int sb_option)
1741 if (SCREEN_IS_ALTERNATE(wp->screen))
1745 window_pane_mode(wp) != WINDOW_PANE_NO_MODE))