aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-07-22 18:02:23 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-07-22 18:02:23 +0000
commit2ec2837daa428def7116848a17355f3423bf038e (patch)
treeb6f77f3a13dc4130b1853ff0beb89ac51609fdff
parent6a309c53a8ae3142d132fe1c12e55bed9b62e4d5 (diff)
downloadrtmux-2ec2837daa428def7116848a17355f3423bf038e.tar.gz
rtmux-2ec2837daa428def7116848a17355f3423bf038e.tar.bz2
rtmux-2ec2837daa428def7116848a17355f3423bf038e.zip
enum tty_cmd is only used as an index into the array of command function
pointers, so remove it and use the function pointers directly to represent themselves.
-rw-r--r--screen-write.c38
-rw-r--r--tmux.h120
-rw-r--r--tty-write.c19
-rw-r--r--tty.c46
4 files changed, 89 insertions, 134 deletions
diff --git a/screen-write.c b/screen-write.c
index b8ec57ea..2f41ae55 100644
--- a/screen-write.c
+++ b/screen-write.c
@@ -327,7 +327,7 @@ screen_write_alignmenttest(struct screen_write_ctx *ctx)
s->rupper = 0;
s->rlower = screen_size_y(s) - 1;
- tty_write0(ctx->wp, TTY_ALIGNMENTTEST);
+ tty_write0(ctx->wp, tty_cmd_alignmenttest);
}
/* Insert nx characters. */
@@ -349,7 +349,7 @@ screen_write_insertcharacter(struct screen_write_ctx *ctx, u_int nx)
if (s->cx <= screen_size_x(s) - 1)
grid_view_insert_cells(s->grid, s->cx, s->cy, nx);
- tty_writenum(ctx->wp, TTY_INSERTCHARACTER, nx);
+ tty_writenum(ctx->wp, tty_cmd_insertcharacter, nx);
}
/* Delete nx characters. */
@@ -371,7 +371,7 @@ screen_write_deletecharacter(struct screen_write_ctx *ctx, u_int nx)
if (s->cx <= screen_size_x(s) - 1)
grid_view_delete_cells(s->grid, s->cx, s->cy, nx);
- tty_writenum(ctx->wp, TTY_DELETECHARACTER, nx);
+ tty_writenum(ctx->wp, tty_cmd_deletecharacter, nx);
}
/* Insert ny lines. */
@@ -393,7 +393,7 @@ screen_write_insertline(struct screen_write_ctx *ctx, u_int ny)
grid_view_insert_lines(s->grid, s->cy, ny);
- tty_writenum(ctx->wp, TTY_INSERTLINE, ny);
+ tty_writenum(ctx->wp, tty_cmd_insertline, ny);
return;
}
@@ -409,7 +409,7 @@ screen_write_insertline(struct screen_write_ctx *ctx, u_int ny)
else
grid_view_insert_lines_region(s->grid, s->rlower, s->cy, ny);
- tty_writenum(ctx->wp, TTY_INSERTLINE, ny);
+ tty_writenum(ctx->wp, tty_cmd_insertline, ny);
}
/* Delete ny lines. */
@@ -431,7 +431,7 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny)
grid_view_delete_lines(s->grid, s->cy, ny);
- tty_writenum(ctx->wp, TTY_DELETELINE, ny);
+ tty_writenum(ctx->wp, tty_cmd_deleteline, ny);
return;
}
@@ -447,7 +447,7 @@ screen_write_deleteline(struct screen_write_ctx *ctx, u_int ny)
else
grid_view_delete_lines_region(s->grid, s->rlower, s->cy, ny);
- tty_writenum(ctx->wp, TTY_DELETELINE, ny);
+ tty_writenum(ctx->wp, tty_cmd_deleteline, ny);
}
/* Clear line at cursor. */
@@ -460,7 +460,7 @@ screen_write_clearline(struct screen_write_ctx *ctx)
grid_view_clear(s->grid, 0, s->cy, screen_size_x(s), 1);
- tty_writenum(ctx->wp, TTY_CLEARLINE, 0);
+ tty_write0(ctx->wp, tty_cmd_clearline);
}
/* Clear to end of line from cursor. */
@@ -477,7 +477,7 @@ screen_write_clearendofline(struct screen_write_ctx *ctx)
if (s->cx <= sx - 1)
grid_view_clear(s->grid, s->cx, s->cy, sx - s->cx, 1);
- tty_writenum(ctx->wp, TTY_CLEARENDOFLINE, 0);
+ tty_write0(ctx->wp, tty_cmd_clearendofline);
}
/* Clear to start of line from cursor. */
@@ -496,7 +496,7 @@ screen_write_clearstartofline(struct screen_write_ctx *ctx)
else
grid_view_clear(s->grid, 0, s->cy, s->cx + 1, 1);
- tty_writenum(ctx->wp, TTY_CLEARSTARTOFLINE, 0);
+ tty_write0(ctx->wp, tty_cmd_clearstartofline);
}
/* Move cursor to px,py. */
@@ -539,7 +539,7 @@ screen_write_reverseindex(struct screen_write_ctx *ctx)
else if (s->cy > 0)
s->cy--;
- tty_writenum(ctx->wp, TTY_REVERSEINDEX, 0);
+ tty_write0(ctx->wp, tty_cmd_reverseindex);
}
/* Set scroll region. */
@@ -601,7 +601,7 @@ screen_write_linefeed(struct screen_write_ctx *ctx)
else if (s->cy < screen_size_y(s) - 1)
s->cy++;
- tty_writenum(ctx->wp, TTY_LINEFEED, 0);
+ tty_write0(ctx->wp, tty_cmd_linefeed);
}
/* Carriage return (cursor to start of line). */
@@ -653,7 +653,7 @@ screen_write_clearendofscreen(struct screen_write_ctx *ctx)
grid_view_clear(s->grid, s->cx, s->cy, sx - s->cx, 1);
grid_view_clear(s->grid, 0, s->cy + 1, sx, sy - (s->cy + 1));
- tty_writenum(ctx->wp, TTY_CLEARENDOFSCREEN, 0);
+ tty_write0(ctx->wp, tty_cmd_clearendofscreen);
}
/* Clear to start of screen. */
@@ -674,7 +674,7 @@ screen_write_clearstartofscreen(struct screen_write_ctx *ctx)
else
grid_view_clear(s->grid, 0, s->cy, s->cx + 1, 1);
- tty_writenum(ctx->wp, TTY_CLEARSTARTOFSCREEN, 0);
+ tty_write0(ctx->wp, tty_cmd_clearstartofscreen);
}
/* Clear entire screen. */
@@ -687,7 +687,7 @@ screen_write_clearscreen(struct screen_write_ctx *ctx)
grid_view_clear(s->grid, 0, 0, screen_size_x(s), screen_size_y(s));
- tty_writenum(ctx->wp, TTY_CLEARSCREEN, 0);
+ tty_write0(ctx->wp, tty_cmd_clearscreen);
}
/* Write cell data. */
@@ -737,7 +737,7 @@ screen_write_cell(
memcpy(tmp_gu->data + i, udata, UTF8_SIZE - i);
/* Assume the previous character has just been input. */
- tty_writeptr(ctx->wp, TTY_UTF8CHARACTER, udata);
+ tty_writeptr(ctx->wp, tty_cmd_utf8character, udata);
return;
}
@@ -790,16 +790,16 @@ screen_write_cell(
/* Draw to the screen if necessary. */
if (insert)
- tty_writenum(ctx->wp, TTY_INSERTCHARACTER, width);
+ tty_writenum(ctx->wp, tty_cmd_insertcharacter, width);
ttyctx.wp = ctx->wp;
ttyctx.utf8 = &gu;
if (screen_check_selection(s, s->cx - width, s->cy)) {
s->sel.cell.data = gc->data;
ttyctx.cell = &s->sel.cell;
- tty_write_cmd(TTY_CELL, &ttyctx);
+ tty_write(tty_cmd_cell, &ttyctx);
} else {
ttyctx.cell = gc;
- tty_write_cmd(TTY_CELL, &ttyctx);
+ tty_write(tty_cmd_cell, &ttyctx);
}
}
diff --git a/tmux.h b/tmux.h
index 2062dfff..bcf0f8a8 100644
--- a/tmux.h
+++ b/tmux.h
@@ -273,35 +273,6 @@ struct tty_term_code_entry {
const char *name;
};
-/* Output commands. */
-enum tty_cmd {
- TTY_ALIGNMENTTEST,
- TTY_CELL,
- TTY_CLEARENDOFLINE,
- TTY_CLEARENDOFSCREEN,
- TTY_CLEARLINE,
- TTY_CLEARSCREEN,
- TTY_CLEARSTARTOFLINE,
- TTY_CLEARSTARTOFSCREEN,
- TTY_DELETECHARACTER,
- TTY_DELETELINE,
- TTY_INSERTCHARACTER,
- TTY_INSERTLINE,
- TTY_LINEFEED,
- TTY_UTF8CHARACTER,
- TTY_REVERSEINDEX,
-};
-
-struct tty_ctx {
- struct window_pane *wp;
-
- const struct grid_cell *cell;
- const struct grid_utf8 *utf8;
-
- u_int num;
- void *ptr;
-};
-
/* Message codes. */
enum hdrtype {
MSG_COMMAND,
@@ -805,6 +776,18 @@ struct tty {
RB_HEAD(tty_keys, tty_key) ktree;
};
+/* TTY command context and function pointer. */
+struct tty_ctx {
+ struct window_pane *wp;
+
+ const struct grid_cell *cell;
+ const struct grid_utf8 *utf8;
+
+ u_int num;
+ void *ptr;
+};
+typedef void tty_cmd_func(struct tty *, struct tty_ctx *);
+
/* Client connection. */
struct client {
int fd;
@@ -1032,33 +1015,42 @@ void options_set_number(struct options *, const char *, long long);
long long options_get_number(struct options *, const char *);
/* tty.c */
-u_char tty_get_acs(struct tty *, u_char);
-void tty_emulate_repeat(struct tty *,
- enum tty_code_code, enum tty_code_code, u_int);
-void tty_reset(struct tty *);
-void tty_region(struct tty *, u_int, u_int, u_int);
-void tty_cursor(struct tty *, u_int, u_int, u_int, u_int);
-void tty_cell(struct tty *,
- const struct grid_cell *, const struct grid_utf8 *);
-void tty_putcode(struct tty *, enum tty_code_code);
-void tty_putcode1(struct tty *, enum tty_code_code, int);
-void tty_putcode2(struct tty *, enum tty_code_code, int, int);
-void tty_puts(struct tty *, const char *);
-void tty_putc(struct tty *, u_char);
-void tty_pututf8(struct tty *, const struct grid_utf8 *);
-void tty_init(struct tty *, char *, char *);
-void tty_start_tty(struct tty *);
-void tty_stop_tty(struct tty *);
-void tty_detect_utf8(struct tty *);
-void tty_set_title(struct tty *, const char *);
-void tty_update_mode(struct tty *, int);
-void tty_draw_line(
- struct tty *, struct screen *, u_int, u_int, u_int);
-void tty_redraw_region(struct tty *, struct window_pane *);
-int tty_open(struct tty *, char **);
-void tty_close(struct tty *, int);
-void tty_free(struct tty *, int);
-void tty_write(struct tty *, enum tty_cmd, struct tty_ctx *);
+u_char tty_get_acs(struct tty *, u_char);
+void tty_reset(struct tty *);
+void tty_region(struct tty *, u_int, u_int, u_int);
+void tty_cursor(struct tty *, u_int, u_int, u_int, u_int);
+void tty_putcode(struct tty *, enum tty_code_code);
+void tty_putcode1(struct tty *, enum tty_code_code, int);
+void tty_putcode2(struct tty *, enum tty_code_code, int, int);
+void tty_puts(struct tty *, const char *);
+void tty_putc(struct tty *, u_char);
+void tty_pututf8(struct tty *, const struct grid_utf8 *);
+void tty_init(struct tty *, char *, char *);
+void tty_start_tty(struct tty *);
+void tty_stop_tty(struct tty *);
+void tty_detect_utf8(struct tty *);
+void tty_set_title(struct tty *, const char *);
+void tty_update_mode(struct tty *, int);
+void tty_draw_line(struct tty *, struct screen *, u_int, u_int, u_int);
+void tty_redraw_region(struct tty *, struct window_pane *);
+int tty_open(struct tty *, char **);
+void tty_close(struct tty *, int);
+void tty_free(struct tty *, int);
+void tty_cmd_alignmenttest(struct tty *, struct tty_ctx *);
+void tty_cmd_cell(struct tty *, struct tty_ctx *);
+void tty_cmd_clearendofline(struct tty *, struct tty_ctx *);
+void tty_cmd_clearendofscreen(struct tty *, struct tty_ctx *);
+void tty_cmd_clearline(struct tty *, struct tty_ctx *);
+void tty_cmd_clearscreen(struct tty *, struct tty_ctx *);
+void tty_cmd_clearstartofline(struct tty *, struct tty_ctx *);
+void tty_cmd_clearstartofscreen(struct tty *, struct tty_ctx *);
+void tty_cmd_deletecharacter(struct tty *, struct tty_ctx *);
+void tty_cmd_deleteline(struct tty *, struct tty_ctx *);
+void tty_cmd_insertcharacter(struct tty *, struct tty_ctx *);
+void tty_cmd_insertline(struct tty *, struct tty_ctx *);
+void tty_cmd_linefeed(struct tty *, struct tty_ctx *);
+void tty_cmd_utf8character(struct tty *, struct tty_ctx *);
+void tty_cmd_reverseindex(struct tty *, struct tty_ctx *);
/* tty-term.c */
extern struct tty_terms tty_terms;
@@ -1074,17 +1066,17 @@ int tty_term_number(struct tty_term *, enum tty_code_code);
int tty_term_flag(struct tty_term *, enum tty_code_code);
/* tty-keys.c */
-int tty_keys_cmp(struct tty_key *, struct tty_key *);
+int tty_keys_cmp(struct tty_key *, struct tty_key *);
RB_PROTOTYPE(tty_keys, tty_key, entry, tty_keys_cmp);
-void tty_keys_init(struct tty *);
-void tty_keys_free(struct tty *);
-int tty_keys_next(struct tty *, int *, u_char *);
+void tty_keys_init(struct tty *);
+void tty_keys_free(struct tty *);
+int tty_keys_next(struct tty *, int *, u_char *);
/* tty-write.c */
-void tty_write0(struct window_pane *, enum tty_cmd);
-void tty_writenum(struct window_pane *, enum tty_cmd, u_int);
-void tty_writeptr(struct window_pane *, enum tty_cmd, void *);
-void tty_write_cmd(enum tty_cmd, struct tty_ctx *);
+void tty_write0(struct window_pane *, tty_cmd_func *);
+void tty_writenum(struct window_pane *, tty_cmd_func *, u_int);
+void tty_writeptr(struct window_pane *, tty_cmd_func *, void *);
+void tty_write(tty_cmd_func *, struct tty_ctx *);
/* options-cmd.c */
void set_option_string(struct cmd_ctx *,
diff --git a/tty-write.c b/tty-write.c
index b8e39837..c9bc534e 100644
--- a/tty-write.c
+++ b/tty-write.c
@@ -23,39 +23,39 @@
#include "tmux.h"
void
-tty_write0(struct window_pane *wp, enum tty_cmd cmd)
+tty_write0(struct window_pane *wp, tty_cmd_func *cmdfn)
{
struct tty_ctx ctx;
memset(&ctx, 0, sizeof ctx);
ctx.wp = wp;
- tty_write_cmd(cmd, &ctx);
+ tty_write(cmdfn, &ctx);
}
void
-tty_writenum(struct window_pane *wp, enum tty_cmd cmd, u_int num)
+tty_writenum(struct window_pane *wp, tty_cmd_func *cmdfn, u_int num)
{
struct tty_ctx ctx;
memset(&ctx, 0, sizeof ctx);
ctx.wp = wp;
ctx.num = num;
- tty_write_cmd(cmd, &ctx);
+ tty_write(cmdfn, &ctx);
}
void
-tty_writeptr(struct window_pane *wp, enum tty_cmd cmd, void *ptr)
+tty_writeptr(struct window_pane *wp, tty_cmd_func *cmdfn, void *ptr)
{
struct tty_ctx ctx;
memset(&ctx, 0, sizeof ctx);
ctx.wp = wp;
ctx.ptr = ptr;
- tty_write_cmd(cmd, &ctx);
+ tty_write(cmdfn, &ctx);
}
void
-tty_write_cmd(enum tty_cmd cmd, struct tty_ctx *ctx)
+tty_write(tty_cmd_func *cmdfn, struct tty_ctx *ctx)
{
struct window_pane *wp = ctx->wp;
struct client *c;
@@ -77,9 +77,10 @@ tty_write_cmd(enum tty_cmd cmd, struct tty_ctx *ctx)
continue;
if (c->session->curw->window == wp->window) {
+ if (c->tty.flags & TTY_FREEZE || c->tty.term == NULL)
+ continue;
tty_update_mode(&c->tty, c->tty.mode & ~MODE_CURSOR);
-
- tty_write(&c->tty, cmd, ctx);
+ cmdfn(&c->tty, ctx);
}
}
}
diff --git a/tty.c b/tty.c
index dfa36a5e..c09fe6c4 100644
--- a/tty.c
+++ b/tty.c
@@ -38,39 +38,10 @@ void tty_attributes(struct tty *, const struct grid_cell *);
void tty_attributes_fg(struct tty *, const struct grid_cell *);
void tty_attributes_bg(struct tty *, const struct grid_cell *);
-void tty_cmd_alignmenttest(struct tty *, struct tty_ctx *);
-void tty_cmd_cell(struct tty *, struct tty_ctx *);
-void tty_cmd_clearendofline(struct tty *, struct tty_ctx *);
-void tty_cmd_clearendofscreen(struct tty *, struct tty_ctx *);
-void tty_cmd_clearline(struct tty *, struct tty_ctx *);
-void tty_cmd_clearscreen(struct tty *, struct tty_ctx *);
-void tty_cmd_clearstartofline(struct tty *, struct tty_ctx *);
-void tty_cmd_clearstartofscreen(struct tty *, struct tty_ctx *);
-void tty_cmd_deletecharacter(struct tty *, struct tty_ctx *);
-void tty_cmd_deleteline(struct tty *, struct tty_ctx *);
-void tty_cmd_insertcharacter(struct tty *, struct tty_ctx *);
-void tty_cmd_insertline(struct tty *, struct tty_ctx *);
-void tty_cmd_linefeed(struct tty *, struct tty_ctx *);
-void tty_cmd_utf8character(struct tty *, struct tty_ctx *);
-void tty_cmd_reverseindex(struct tty *, struct tty_ctx *);
-
-void (*tty_cmds[])(struct tty *, struct tty_ctx *) = {
- tty_cmd_alignmenttest,
- tty_cmd_cell,
- tty_cmd_clearendofline,
- tty_cmd_clearendofscreen,
- tty_cmd_clearline,
- tty_cmd_clearscreen,
- tty_cmd_clearstartofline,
- tty_cmd_clearstartofscreen,
- tty_cmd_deletecharacter,
- tty_cmd_deleteline,
- tty_cmd_insertcharacter,
- tty_cmd_insertline,
- tty_cmd_linefeed,
- tty_cmd_utf8character,
- tty_cmd_reverseindex,
-};
+void tty_emulate_repeat(
+ struct tty *, enum tty_code_code, enum tty_code_code, u_int);
+void tty_cell(struct tty *,
+ const struct grid_cell *, const struct grid_utf8 *);
void
tty_init(struct tty *tty, char *path, char *term)
@@ -545,15 +516,6 @@ tty_draw_line(struct tty *tty, struct screen *s, u_int py, u_int ox, u_int oy)
}
void
-tty_write(struct tty *tty, enum tty_cmd cmd, struct tty_ctx *ctx)
-{
- if (tty->flags & TTY_FREEZE || tty->term == NULL)
- return;
- if (tty_cmds[cmd] != NULL)
- tty_cmds[cmd](tty, ctx);
-}
-
-void
tty_cmd_insertcharacter(struct tty *tty, struct tty_ctx *ctx)
{
struct window_pane *wp = ctx->wp;