diff options
-rw-r--r-- | cmd-copy-mode.c | 20 | ||||
-rw-r--r-- | cmd-scroll-mode.c | 70 | ||||
-rw-r--r-- | cmd.c | 3 | ||||
-rw-r--r-- | key-bindings.c | 5 | ||||
-rw-r--r-- | tmux.1 | 20 | ||||
-rw-r--r-- | tmux.h | 7 | ||||
-rw-r--r-- | window-scroll.c | 323 |
7 files changed, 24 insertions, 424 deletions
diff --git a/cmd-copy-mode.c b/cmd-copy-mode.c index 539af9a2..92aafbd9 100644 --- a/cmd-copy-mode.c +++ b/cmd-copy-mode.c @@ -1,4 +1,4 @@ -/* $Id: cmd-copy-mode.c,v 1.23 2009-08-20 11:37:46 tcunha Exp $ */ +/* $Id: cmd-copy-mode.c,v 1.24 2009-10-06 14:14:06 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -24,19 +24,35 @@ * Enter copy mode. */ +void cmd_copy_mode_init(struct cmd *, int); int cmd_copy_mode_exec(struct cmd *, struct cmd_ctx *); const struct cmd_entry cmd_copy_mode_entry = { "copy-mode", NULL, "[-u] " CMD_TARGET_PANE_USAGE, 0, CMD_CHFLAG('u'), - cmd_target_init, + cmd_copy_mode_init, cmd_target_parse, cmd_copy_mode_exec, cmd_target_free, NULL }; +void +cmd_copy_mode_init(struct cmd *self, int key) +{ + struct cmd_target_data *data; + + cmd_target_init(self, key); + data = self->data; + + switch (key) { + case KEYC_PPAGE: + data->chflags |= CMD_CHFLAG('u'); + break; + } +} + int cmd_copy_mode_exec(struct cmd *self, struct cmd_ctx *ctx) { diff --git a/cmd-scroll-mode.c b/cmd-scroll-mode.c deleted file mode 100644 index 34e6a5d2..00000000 --- a/cmd-scroll-mode.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id: cmd-scroll-mode.c,v 1.23 2009-08-20 11:37:46 tcunha Exp $ */ - -/* - * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/types.h> - -#include "tmux.h" - -/* - * Enter scroll mode. - */ - -void cmd_scroll_mode_init(struct cmd *, int); -int cmd_scroll_mode_exec(struct cmd *, struct cmd_ctx *); - -const struct cmd_entry cmd_scroll_mode_entry = { - "scroll-mode", NULL, - "[-u] " CMD_TARGET_PANE_USAGE, - 0, CMD_CHFLAG('u'), - cmd_scroll_mode_init, - cmd_target_parse, - cmd_scroll_mode_exec, - cmd_target_free, - cmd_target_print -}; - -void -cmd_scroll_mode_init(struct cmd *self, int key) -{ - struct cmd_target_data *data; - - cmd_target_init(self, key); - data = self->data; - - switch (key) { - case KEYC_PPAGE: - data->chflags |= CMD_CHFLAG('u'); - break; - } -} - -int -cmd_scroll_mode_exec(struct cmd *self, struct cmd_ctx *ctx) -{ - struct cmd_target_data *data = self->data; - struct window_pane *wp; - - if (cmd_find_pane(ctx, data->target, NULL, &wp) == NULL) - return (-1); - - window_pane_set_mode(wp, &window_scroll_mode); - if (wp->mode == &window_scroll_mode && data->chflags & CMD_CHFLAG('u')) - window_scroll_pageup(wp); - - return (0); -} @@ -1,4 +1,4 @@ -/* $Id: cmd.c,v 1.119 2009-10-06 14:00:50 tcunha Exp $ */ +/* $Id: cmd.c,v 1.120 2009-10-06 14:14:06 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -79,7 +79,6 @@ const struct cmd_entry *cmd_table[] = { &cmd_rotate_window_entry, &cmd_run_shell_entry, &cmd_save_buffer_entry, - &cmd_scroll_mode_entry, &cmd_select_layout_entry, &cmd_select_pane_entry, &cmd_select_prompt_entry, diff --git a/key-bindings.c b/key-bindings.c index 5350d7a5..6756335f 100644 --- a/key-bindings.c +++ b/key-bindings.c @@ -1,4 +1,4 @@ -/* $Id: key-bindings.c,v 1.82 2009-08-31 22:30:15 tcunha Exp $ */ +/* $Id: key-bindings.c,v 1.83 2009-10-06 14:14:07 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -122,7 +122,6 @@ key_bindings_init(void) { '8', 0, &cmd_select_window_entry }, { '9', 0, &cmd_select_window_entry }, { ':', 0, &cmd_command_prompt_entry }, - { '=', 0, &cmd_scroll_mode_entry }, { '?', 0, &cmd_list_keys_entry }, { '[', 0, &cmd_copy_mode_entry }, { '\'', 0, &cmd_select_prompt_entry }, @@ -150,7 +149,7 @@ key_bindings_init(void) { '2' | KEYC_ESCAPE, 0, &cmd_select_layout_entry }, { '3' | KEYC_ESCAPE, 0, &cmd_select_layout_entry }, { '4' | KEYC_ESCAPE, 0, &cmd_select_layout_entry }, - { KEYC_PPAGE, 0, &cmd_scroll_mode_entry }, + { KEYC_PPAGE, 0, &cmd_copy_mode_entry }, { 'n' | KEYC_ESCAPE, 0, &cmd_next_window_entry }, { 'p' | KEYC_ESCAPE, 0, &cmd_previous_window_entry }, { KEYC_UP, 0, &cmd_up_pane_entry }, @@ -1,4 +1,4 @@ -.\" $Id: tmux.1,v 1.178 2009-10-06 14:10:10 tcunha Exp $ +.\" $Id: tmux.1,v 1.179 2009-10-06 14:14:07 tcunha Exp $ .\" .\" Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> .\" @@ -474,12 +474,6 @@ The others are: This is entered when a command which produces output, such as .Ic list-keys , is executed from a key binding. -.It Em scroll mode -This is entered with the -.Ic scroll-mode -command (bound to -.Ql = -by default) and permits the window history buffer to be inspected. .It Em copy mode This permits a section of a window or its history to be copied to a .Em paste buffer @@ -539,7 +533,7 @@ command) or in output mode; and .Em vi-copy and .Em emacs-copy -used in copy and scroll modes. +used in copy mode. The tables may be viewed with the .Ic list-keys command and keys modified or removed with @@ -560,16 +554,6 @@ Enter copy mode. The .Fl u option scrolls one page up. -.It Xo Ic scroll-mode -.Op Fl u -.Op Fl t Ar target-pane -.Xc -Enter scroll mode. -The -.Fl u -has the same meaning as in the -.Ic copy-mode -command. .El .Pp Each window displayed by @@ -1,4 +1,4 @@ -/* $Id: tmux.h,v 1.458 2009-10-06 14:10:10 tcunha Exp $ */ +/* $Id: tmux.h,v 1.459 2009-10-06 14:14:07 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -1346,7 +1346,6 @@ extern const struct cmd_entry cmd_respawn_window_entry; extern const struct cmd_entry cmd_rotate_window_entry; extern const struct cmd_entry cmd_run_shell_entry; extern const struct cmd_entry cmd_save_buffer_entry; -extern const struct cmd_entry cmd_scroll_mode_entry; extern const struct cmd_entry cmd_select_layout_entry; extern const struct cmd_entry cmd_select_pane_entry; extern const struct cmd_entry cmd_select_prompt_entry; @@ -1699,10 +1698,6 @@ extern const struct window_mode window_clock_mode; extern const struct window_mode window_copy_mode; void window_copy_pageup(struct window_pane *); -/* window-scroll.c */ -extern const struct window_mode window_scroll_mode; -void window_scroll_pageup(struct window_pane *); - /* window-more.c */ extern const struct window_mode window_more_mode; void window_more_vadd(struct window_pane *, const char *, va_list); diff --git a/window-scroll.c b/window-scroll.c deleted file mode 100644 index 549b684a..00000000 --- a/window-scroll.c +++ /dev/null @@ -1,323 +0,0 @@ -/* $Id: window-scroll.c,v 1.41 2009-09-11 14:13:52 tcunha Exp $ */ - -/* - * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include <sys/types.h> - -#include <string.h> - -#include "tmux.h" - -struct screen *window_scroll_init(struct window_pane *); -void window_scroll_free(struct window_pane *); -void window_scroll_resize(struct window_pane *, u_int, u_int); -void window_scroll_key(struct window_pane *, struct client *, int); - -void window_scroll_redraw_screen(struct window_pane *); -void window_scroll_write_line( - struct window_pane *, struct screen_write_ctx *, u_int); -void window_scroll_write_column( - struct window_pane *, struct screen_write_ctx *, u_int); - -void window_scroll_scroll_up(struct window_pane *); -void window_scroll_scroll_down(struct window_pane *); -void window_scroll_scroll_left(struct window_pane *); -void window_scroll_scroll_right(struct window_pane *); - -const struct window_mode window_scroll_mode = { - window_scroll_init, - window_scroll_free, - window_scroll_resize, - window_scroll_key, - NULL, - NULL, -}; - -struct window_scroll_mode_data { - struct screen screen; - - struct mode_key_data mdata; - - u_int ox; - u_int oy; -}; - -struct screen * -window_scroll_init(struct window_pane *wp) -{ - struct window_scroll_mode_data *data; - struct screen *s; - struct screen_write_ctx ctx; - u_int i; - int keys; - - wp->modedata = data = xmalloc(sizeof *data); - data->ox = 0; - data->oy = 0; - - s = &data->screen; - screen_init(s, screen_size_x(&wp->base), screen_size_y(&wp->base), 0); - s->mode &= ~MODE_CURSOR; - - keys = options_get_number(&wp->window->options, "mode-keys"); - if (keys == MODEKEY_EMACS) - mode_key_init(&data->mdata, &mode_key_tree_emacs_copy); - else - mode_key_init(&data->mdata, &mode_key_tree_vi_copy); - - screen_write_start(&ctx, NULL, s); - for (i = 0; i < screen_size_y(s); i++) - window_scroll_write_line(wp, &ctx, i); - screen_write_stop(&ctx); - - return (s); -} - -void -window_scroll_free(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - - screen_free(&data->screen); - xfree(data); -} - -void -window_scroll_pageup(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - u_int n; - - n = 1; - if (screen_size_y(s) > 2) - n = screen_size_y(s) - 2; - if (data->oy + n > screen_hsize(&wp->base)) - data->oy = screen_hsize(&wp->base); - else - data->oy += n; - - window_scroll_redraw_screen(wp); -} - -void -window_scroll_resize(struct window_pane *wp, u_int sx, u_int sy) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; - u_int i; - - screen_resize(s, sx, sy); - screen_write_start(&ctx, NULL, s); - for (i = 0; i < screen_size_y(s); i++) - window_scroll_write_line(wp, &ctx, i); - screen_write_stop(&ctx); -} - -void -window_scroll_key(struct window_pane *wp, unused struct client *c, int key) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - u_int n; - - switch (mode_key_lookup(&data->mdata, key)) { - case MODEKEYCOPY_CANCEL: - window_pane_reset_mode(wp); - break; - case MODEKEYCOPY_LEFT: - window_scroll_scroll_left(wp); - break; - case MODEKEYCOPY_RIGHT: - window_scroll_scroll_right(wp); - break; - case MODEKEYCOPY_UP: - window_scroll_scroll_up(wp); - break; - case MODEKEYCOPY_DOWN: - window_scroll_scroll_down(wp); - break; - case MODEKEYCOPY_PREVIOUSPAGE: - window_scroll_pageup(wp); - break; - case MODEKEYCOPY_NEXTPAGE: - n = 1; - if (screen_size_y(s) > 2) - n = screen_size_y(s) - 2; - if (data->oy < n) - data->oy = 0; - else - data->oy -= n; - window_scroll_redraw_screen(wp); - break; - case MODEKEYCOPY_HALFPAGEUP: - n = screen_size_y(s) / 2; - if (data->oy + n > screen_hsize(&wp->base)) - data->oy = screen_hsize(&wp->base); - else - data->oy += n; - window_scroll_redraw_screen(wp); - break; - case MODEKEYCOPY_HALFPAGEDOWN: - n = screen_size_y(s) / 2; - if (data->oy < n) - data->oy = 0; - else - data->oy -= n; - window_scroll_redraw_screen(wp); - break; - default: - break; - } -} - -void -window_scroll_write_line( - struct window_pane *wp, struct screen_write_ctx *ctx, u_int py) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct options *oo = &wp->window->options; - struct grid_cell gc; - char hdr[32]; - size_t size; - - if (py == 0) { - memcpy(&gc, &grid_default_cell, sizeof gc); - size = xsnprintf(hdr, sizeof hdr, - "[%u,%u/%u]", data->ox, data->oy, screen_hsize(&wp->base)); - colour_set_fg(&gc, options_get_number(oo, "mode-fg")); - colour_set_bg(&gc, options_get_number(oo, "mode-bg")); - gc.attr |= options_get_number(oo, "mode-attr"); - screen_write_cursormove(ctx, screen_size_x(s) - size, 0); - screen_write_puts(ctx, &gc, "%s", hdr); - memcpy(&gc, &grid_default_cell, sizeof gc); - } else - size = 0; - - screen_write_cursormove(ctx, 0, py); - screen_write_copy(ctx, &wp->base, data->ox, (screen_hsize(&wp->base) - - data->oy) + py, screen_size_x(s) - size, 1); -} - -void -window_scroll_write_column( - struct window_pane *wp, struct screen_write_ctx *ctx, u_int px) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - - screen_write_cursormove(ctx, px, 0); - screen_write_copy(ctx, &wp->base, data->ox + px, - screen_hsize(&wp->base) - data->oy, 1, screen_size_y(s)); -} - -void -window_scroll_redraw_screen(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; - u_int i; - - screen_write_start(&ctx, wp, NULL); - for (i = 0; i < screen_size_y(s); i++) - window_scroll_write_line(wp, &ctx, i); - screen_write_stop(&ctx); -} - -void -window_scroll_scroll_up(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen_write_ctx ctx; - - if (data->oy >= screen_hsize(&wp->base)) - return; - data->oy++; - - screen_write_start(&ctx, wp, NULL); - screen_write_cursormove(&ctx, 0, 0); - screen_write_insertline(&ctx, 1); - window_scroll_write_line(wp, &ctx, 0); - window_scroll_write_line(wp, &ctx, 1); - screen_write_stop(&ctx); -} - -void -window_scroll_scroll_down(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; - - if (data->oy == 0) - return; - data->oy--; - - screen_write_start(&ctx, wp, NULL); - screen_write_cursormove(&ctx, 0, 0); - screen_write_deleteline(&ctx, 1); - window_scroll_write_line(wp, &ctx, screen_size_y(s) - 1); - window_scroll_write_line(wp, &ctx, 0); - screen_write_stop(&ctx); -} - -void -window_scroll_scroll_right(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; - u_int i; - - if (data->ox >= SHRT_MAX) - return; - data->ox++; - - screen_write_start(&ctx, wp, NULL); - for (i = 1; i < screen_size_y(s); i++) { - screen_write_cursormove(&ctx, 0, i); - screen_write_deletecharacter(&ctx, 1); - } - window_scroll_write_column(wp, &ctx, screen_size_x(s) - 1); - window_scroll_write_line(wp, &ctx, 0); - screen_write_stop(&ctx); -} - -void -window_scroll_scroll_left(struct window_pane *wp) -{ - struct window_scroll_mode_data *data = wp->modedata; - struct screen *s = &data->screen; - struct screen_write_ctx ctx; - u_int i; - - if (data->ox == 0) - return; - data->ox--; - - screen_write_start(&ctx, wp, NULL); - for (i = 1; i < screen_size_y(s); i++) { - screen_write_cursormove(&ctx, 0, i); - screen_write_insertcharacter(&ctx, 1); - } - window_scroll_write_column(wp, &ctx, 0); - window_scroll_write_line(wp, &ctx, 0); - screen_write_stop(&ctx); -} |