diff --git a/cmd-bind-key.c b/cmd-bind-key.c index b87d52458..8c1acba94 100644 --- a/cmd-bind-key.c +++ b/cmd-bind-key.c @@ -40,7 +40,7 @@ const struct cmd_entry cmd_bind_key_entry = { .usage = "[-cnr] [-t mode-table] [-T key-table] key " "command [arguments]", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_bind_key_exec }; diff --git a/cmd-capture-pane.c b/cmd-capture-pane.c index e468674dd..6cf885bc2 100644 --- a/cmd-capture-pane.c +++ b/cmd-capture-pane.c @@ -46,7 +46,7 @@ const struct cmd_entry cmd_capture_pane_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_capture_pane_exec }; diff --git a/cmd-clear-history.c b/cmd-clear-history.c index a1da256dc..46f1d4e66 100644 --- a/cmd-clear-history.c +++ b/cmd-clear-history.c @@ -35,7 +35,7 @@ const struct cmd_entry cmd_clear_history_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_clear_history_exec }; diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index 6b99c3479..4591a37d6 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -35,7 +35,7 @@ const struct cmd_entry cmd_copy_mode_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_copy_mode_exec }; @@ -48,7 +48,7 @@ const struct cmd_entry cmd_clock_mode_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_copy_mode_exec }; diff --git a/cmd-display-panes.c b/cmd-display-panes.c index db85c8132..2edb2eb34 100644 --- a/cmd-display-panes.c +++ b/cmd-display-panes.c @@ -41,7 +41,7 @@ const struct cmd_entry cmd_display_panes_entry = { .tflag = CMD_CLIENT, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_display_panes_exec }; diff --git a/cmd-list-buffers.c b/cmd-list-buffers.c index 41ad865b8..f474b3987 100644 --- a/cmd-list-buffers.c +++ b/cmd-list-buffers.c @@ -39,7 +39,7 @@ const struct cmd_entry cmd_list_buffers_entry = { .args = { "F:", 0, 0 }, .usage = "[-F format]", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_list_buffers_exec }; diff --git a/cmd-list-clients.c b/cmd-list-clients.c index efe196529..d4bf02a95 100644 --- a/cmd-list-clients.c +++ b/cmd-list-clients.c @@ -44,7 +44,7 @@ const struct cmd_entry cmd_list_clients_entry = { .tflag = CMD_SESSION, - .flags = CMD_READONLY, + .flags = CMD_READONLY|CMD_AFTERHOOK, .exec = cmd_list_clients_exec }; diff --git a/cmd-list-keys.c b/cmd-list-keys.c index e58a90f28..7823f475f 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -39,7 +39,7 @@ const struct cmd_entry cmd_list_keys_entry = { .args = { "t:T:", 0, 0 }, .usage = "[-t mode-table] [-T key-table]", - .flags = CMD_STARTSERVER, + .flags = CMD_STARTSERVER|CMD_AFTERHOOK, .exec = cmd_list_keys_exec }; @@ -50,7 +50,7 @@ const struct cmd_entry cmd_list_commands_entry = { .args = { "F:", 0, 0 }, .usage = "[-F format]", - .flags = CMD_STARTSERVER, + .flags = CMD_STARTSERVER|CMD_AFTERHOOK, .exec = cmd_list_keys_exec }; diff --git a/cmd-list-panes.c b/cmd-list-panes.c index 9d78589ab..20663fd10 100644 --- a/cmd-list-panes.c +++ b/cmd-list-panes.c @@ -43,7 +43,7 @@ const struct cmd_entry cmd_list_panes_entry = { .tflag = CMD_WINDOW, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_list_panes_exec }; diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index 30a1f5860..bc352d256 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -45,7 +45,7 @@ const struct cmd_entry cmd_list_sessions_entry = { .args = { "F:", 0, 0 }, .usage = "[-F format]", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_list_sessions_exec }; diff --git a/cmd-list-windows.c b/cmd-list-windows.c index 7ca49b3e2..9d8a615c1 100644 --- a/cmd-list-windows.c +++ b/cmd-list-windows.c @@ -54,7 +54,7 @@ const struct cmd_entry cmd_list_windows_entry = { .tflag = CMD_SESSION, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_list_windows_exec }; diff --git a/cmd-load-buffer.c b/cmd-load-buffer.c index d97d139c3..ca886d69e 100644 --- a/cmd-load-buffer.c +++ b/cmd-load-buffer.c @@ -42,7 +42,7 @@ const struct cmd_entry cmd_load_buffer_entry = { .args = { "b:", 1, 1 }, .usage = CMD_BUFFER_USAGE " path", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_load_buffer_exec }; diff --git a/cmd-lock-server.c b/cmd-lock-server.c index 2eef99520..b501efe83 100644 --- a/cmd-lock-server.c +++ b/cmd-lock-server.c @@ -33,7 +33,7 @@ const struct cmd_entry cmd_lock_server_entry = { .args = { "", 0, 0 }, .usage = "", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_lock_server_exec }; @@ -46,7 +46,7 @@ const struct cmd_entry cmd_lock_session_entry = { .tflag = CMD_SESSION, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_lock_server_exec }; @@ -59,7 +59,7 @@ const struct cmd_entry cmd_lock_client_entry = { .tflag = CMD_CLIENT, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_lock_server_exec }; diff --git a/cmd-paste-buffer.c b/cmd-paste-buffer.c index 9bb2af5fc..611ca541f 100644 --- a/cmd-paste-buffer.c +++ b/cmd-paste-buffer.c @@ -39,7 +39,7 @@ const struct cmd_entry cmd_paste_buffer_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_paste_buffer_exec }; diff --git a/cmd-pipe-pane.c b/cmd-pipe-pane.c index 7a99d3524..ec91dd321 100644 --- a/cmd-pipe-pane.c +++ b/cmd-pipe-pane.c @@ -45,7 +45,7 @@ const struct cmd_entry cmd_pipe_pane_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_pipe_pane_exec }; diff --git a/cmd-refresh-client.c b/cmd-refresh-client.c index 79747f2cb..68a7c22a5 100644 --- a/cmd-refresh-client.c +++ b/cmd-refresh-client.c @@ -35,7 +35,7 @@ const struct cmd_entry cmd_refresh_client_entry = { .tflag = CMD_CLIENT, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_refresh_client_exec }; diff --git a/cmd-rename-session.c b/cmd-rename-session.c index 7e9fd015b..d0f9b0e1f 100644 --- a/cmd-rename-session.c +++ b/cmd-rename-session.c @@ -37,7 +37,7 @@ const struct cmd_entry cmd_rename_session_entry = { .tflag = CMD_SESSION, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_rename_session_exec }; diff --git a/cmd-rename-window.c b/cmd-rename-window.c index ee53fcb3c..68d776784 100644 --- a/cmd-rename-window.c +++ b/cmd-rename-window.c @@ -37,7 +37,7 @@ const struct cmd_entry cmd_rename_window_entry = { .tflag = CMD_WINDOW, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_rename_window_exec }; diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c index 367266885..be652b56f 100644 --- a/cmd-resize-pane.c +++ b/cmd-resize-pane.c @@ -41,7 +41,7 @@ const struct cmd_entry cmd_resize_pane_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_resize_pane_exec }; diff --git a/cmd-save-buffer.c b/cmd-save-buffer.c index 51927f9ed..dbc819e30 100644 --- a/cmd-save-buffer.c +++ b/cmd-save-buffer.c @@ -40,7 +40,7 @@ const struct cmd_entry cmd_save_buffer_entry = { .args = { "ab:", 1, 1 }, .usage = "[-a] " CMD_BUFFER_USAGE " path", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_save_buffer_exec }; @@ -51,7 +51,7 @@ const struct cmd_entry cmd_show_buffer_entry = { .args = { "b:", 0, 0 }, .usage = CMD_BUFFER_USAGE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_save_buffer_exec }; diff --git a/cmd-select-layout.c b/cmd-select-layout.c index 48d2ac30d..4ecafc5c3 100644 --- a/cmd-select-layout.c +++ b/cmd-select-layout.c @@ -37,7 +37,7 @@ const struct cmd_entry cmd_select_layout_entry = { .tflag = CMD_WINDOW, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_select_layout_exec }; @@ -50,7 +50,7 @@ const struct cmd_entry cmd_next_layout_entry = { .tflag = CMD_WINDOW, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_select_layout_exec }; @@ -63,7 +63,7 @@ const struct cmd_entry cmd_previous_layout_entry = { .tflag = CMD_WINDOW, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_select_layout_exec }; diff --git a/cmd-send-keys.c b/cmd-send-keys.c index e3b8d6e4c..062a13d76 100644 --- a/cmd-send-keys.c +++ b/cmd-send-keys.c @@ -38,7 +38,7 @@ const struct cmd_entry cmd_send_keys_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_send_keys_exec }; @@ -51,7 +51,7 @@ const struct cmd_entry cmd_send_prefix_entry = { .tflag = CMD_PANE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_send_keys_exec }; diff --git a/cmd-set-buffer.c b/cmd-set-buffer.c index 41ea73d93..d3f8ba4f0 100644 --- a/cmd-set-buffer.c +++ b/cmd-set-buffer.c @@ -36,7 +36,7 @@ const struct cmd_entry cmd_set_buffer_entry = { .args = { "ab:n:", 0, 1 }, .usage = "[-a] " CMD_BUFFER_USAGE " [-n new-buffer-name] data", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_buffer_exec }; @@ -47,7 +47,7 @@ const struct cmd_entry cmd_delete_buffer_entry = { .args = { "b:", 0, 0 }, .usage = CMD_BUFFER_USAGE, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_buffer_exec }; diff --git a/cmd-set-environment.c b/cmd-set-environment.c index bfb39a4a7..186115b44 100644 --- a/cmd-set-environment.c +++ b/cmd-set-environment.c @@ -38,7 +38,7 @@ const struct cmd_entry cmd_set_environment_entry = { .tflag = CMD_SESSION_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_environment_exec }; diff --git a/cmd-set-hook.c b/cmd-set-hook.c index 2e8bcb0ff..e4d4669ce 100644 --- a/cmd-set-hook.c +++ b/cmd-set-hook.c @@ -38,7 +38,7 @@ const struct cmd_entry cmd_set_hook_entry = { .tflag = CMD_SESSION_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_hook_exec }; @@ -51,7 +51,7 @@ const struct cmd_entry cmd_show_hooks_entry = { .tflag = CMD_SESSION, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_hook_exec }; diff --git a/cmd-set-option.c b/cmd-set-option.c index 8f7e469cf..0c092e504 100644 --- a/cmd-set-option.c +++ b/cmd-set-option.c @@ -73,7 +73,7 @@ const struct cmd_entry cmd_set_option_entry = { .tflag = CMD_WINDOW_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_option_exec }; @@ -86,7 +86,7 @@ const struct cmd_entry cmd_set_window_option_entry = { .tflag = CMD_WINDOW_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_set_option_exec }; diff --git a/cmd-show-environment.c b/cmd-show-environment.c index 5ad0bb8a9..659acfad5 100644 --- a/cmd-show-environment.c +++ b/cmd-show-environment.c @@ -42,7 +42,7 @@ const struct cmd_entry cmd_show_environment_entry = { .tflag = CMD_SESSION_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_show_environment_exec }; diff --git a/cmd-show-messages.c b/cmd-show-messages.c index 416857bf5..8d33cdd01 100644 --- a/cmd-show-messages.c +++ b/cmd-show-messages.c @@ -39,7 +39,7 @@ const struct cmd_entry cmd_show_messages_entry = { .tflag = CMD_CLIENT, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_show_messages_exec }; @@ -50,7 +50,7 @@ const struct cmd_entry cmd_server_info_entry = { .args = { "", 0, 0 }, .usage = "", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_show_messages_exec }; diff --git a/cmd-show-options.c b/cmd-show-options.c index 89d8f2192..4daa69690 100644 --- a/cmd-show-options.c +++ b/cmd-show-options.c @@ -43,7 +43,7 @@ const struct cmd_entry cmd_show_options_entry = { .tflag = CMD_WINDOW_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_show_options_exec }; @@ -56,7 +56,7 @@ const struct cmd_entry cmd_show_window_options_entry = { .tflag = CMD_WINDOW_CANFAIL, - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_show_options_exec }; diff --git a/cmd-string.c b/cmd-string.c index 2cf632944..7c6d9ad6b 100644 --- a/cmd-string.c +++ b/cmd-string.c @@ -133,7 +133,8 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, const char *file, if (argc == 0) goto out; - *cmdlist = cmd_list_parse(argc, argv, file, line, cause); + *cmdlist = cmd_list_parse(argc, argv, file, line, + cause); if (*cmdlist == NULL) goto out; diff --git a/cmd-unbind-key.c b/cmd-unbind-key.c index 644a4c3a5..a38799e4c 100644 --- a/cmd-unbind-key.c +++ b/cmd-unbind-key.c @@ -37,7 +37,7 @@ const struct cmd_entry cmd_unbind_key_entry = { .args = { "ant:T:", 0, 1 }, .usage = "[-an] [-t mode-table] [-T key-table] key", - .flags = 0, + .flags = CMD_AFTERHOOK, .exec = cmd_unbind_key_exec }; diff --git a/tty.c b/tty.c index 198b84511..342706256 100644 --- a/tty.c +++ b/tty.c @@ -424,7 +424,6 @@ void tty_putc(struct tty *tty, u_char ch) { const char *acs; - u_int sx; if (tty->cell.attr & GRID_ATTR_CHARSET) { acs = tty_acs_get(tty, ch); @@ -436,14 +435,18 @@ tty_putc(struct tty *tty, u_char ch) bufferevent_write(tty->event, &ch, 1); if (ch >= 0x20 && ch != 0x7f) { - sx = tty->sx; - if (tty->term->flags & TERM_EARLYWRAP) - sx--; - - if (tty->cx >= sx) { + if (tty->cx >= tty->sx) { tty->cx = 1; if (tty->cy != tty->rlower) tty->cy++; + + /* + * On !xenl terminals, force the cursor position to + * where we think it should be after a line wrap - this + * means it works on sensible terminals as well. + */ + if (tty->term->flags & TERM_EARLYWRAP) + tty_putcode2(tty, TTYC_CUP, tty->cy, tty->cx); } else tty->cx++; } @@ -1169,8 +1172,9 @@ tty_cell(struct tty *tty, const struct grid_cell *gc, u_int i; /* Skip last character if terminal is stupid. */ - if (tty->term->flags & TERM_EARLYWRAP && - tty->cy == tty->sy - 1 && tty->cx == tty->sx - 1) + if ((tty->term->flags & TERM_EARLYWRAP) && + tty->cy == tty->sy - 1 && + tty->cx == tty->sx - 1) return; /* If this is a padding character, do nothing. */