aboutsummaryrefslogtreecommitdiff
path: root/tmux.h
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2009-10-20 19:18:28 +0000
committerNicholas Marriott <nicm@openbsd.org>2009-10-20 19:18:28 +0000
commit1af09d6330ddba2d3ffc9c15d056fe8c4321f17e (patch)
tree0ad97a43760cbde70e21af1d9e8b74ad3a3b0d03 /tmux.h
parent62f234ce3b3fb10633f8bbb1d4159cd5c179345a (diff)
downloadrtmux-1af09d6330ddba2d3ffc9c15d056fe8c4321f17e.tar.gz
rtmux-1af09d6330ddba2d3ffc9c15d056fe8c4321f17e.tar.bz2
rtmux-1af09d6330ddba2d3ffc9c15d056fe8c4321f17e.zip
Try to reduce the UTF-8 mess.
Get rid of passing around u_char[4]s and define a struct utf8_data which has character data, size (sequence length) and width. Move UTF-8 character collection into two functions utf8_open/utf8_append in utf8.c which fill in this struct and use these functions from input.c and the various functions in screen-write.c. Space for rather more data than is necessary for one UTF-8 sequence is in the utf8_data struct because screen_write_copy is still nasty and needs to reinject the character (after combining) into screen_write_cell.
Diffstat (limited to 'tmux.h')
-rw-r--r--tmux.h29
1 files changed, 22 insertions, 7 deletions
diff --git a/tmux.h b/tmux.h
index a61040b6..850c2f5b 100644
--- a/tmux.h
+++ b/tmux.h
@@ -477,6 +477,23 @@ struct mode_key_table {
#define MODE_KKEYPAD 0x8
#define MODE_MOUSE 0x10
+/*
+ * A single UTF-8 character.
+ *
+ * The data member in this must be UTF8_SIZE to allow screen_write_copy to
+ * reinject stored UTF-8 data back into screen_write_cell after combining (ugh
+ * XXX XXX).
+ */
+#define UTF8_SIZE 9
+struct utf8_data {
+ u_char data[UTF8_SIZE];
+
+ size_t have;
+ size_t size;
+
+ u_int width;
+};
+
/* Grid output. */
#if defined(DEBUG) && \
((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
@@ -516,7 +533,6 @@ struct grid_cell {
} __packed;
/* Grid cell UTF-8 data. Used instead of data in grid_cell for UTF-8 cells. */
-#define UTF8_SIZE 9
struct grid_utf8 {
u_char width;
u_char data[UTF8_SIZE];
@@ -672,9 +688,7 @@ struct input_ctx {
#define STRING_APPLICATION 1
#define STRING_NAME 2
- u_char utf8_buf[4];
- u_int utf8_len;
- u_int utf8_off;
+ struct utf8_data utf8data;
u_char intermediate;
void *(*state)(u_char, struct input_ctx *);
@@ -1682,8 +1696,8 @@ void screen_write_kkeypadmode(struct screen_write_ctx *, int);
void screen_write_clearendofscreen(struct screen_write_ctx *);
void screen_write_clearstartofscreen(struct screen_write_ctx *);
void screen_write_clearscreen(struct screen_write_ctx *);
-void screen_write_cell(
- struct screen_write_ctx *, const struct grid_cell *, u_char *);
+void screen_write_cell(struct screen_write_ctx *,
+ const struct grid_cell *, const struct utf8_data *);
/* screen-redraw.c */
void screen_redraw_screen(struct client *, int);
@@ -1838,7 +1852,8 @@ void session_group_synchronize1(struct session *, struct session *);
/* utf8.c */
void utf8_build(void);
-int utf8_width(const u_char *);
+int utf8_open(struct utf8_data *, u_char);
+int utf8_append(struct utf8_data *, u_char);
/* procname.c */
char *get_proc_name(int, char *);