unicode: move kmscon_symbol* to tsm_symbol*
All the unicode helpers are move to TSM so move the symbols, too. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
fa31942c02
commit
61e0d9d098
@ -44,7 +44,7 @@
|
||||
#define LOG_SUBSYSTEM "console"
|
||||
|
||||
struct cell {
|
||||
kmscon_symbol_t ch;
|
||||
tsm_symbol_t ch;
|
||||
struct kmscon_console_attr attr;
|
||||
};
|
||||
|
||||
@ -317,7 +317,7 @@ static void console_scroll_down(struct kmscon_console *con, unsigned int num)
|
||||
}
|
||||
|
||||
static void console_write(struct kmscon_console *con, unsigned int x,
|
||||
unsigned int y, kmscon_symbol_t ch,
|
||||
unsigned int y, tsm_symbol_t ch,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
struct line *line;
|
||||
@ -791,7 +791,7 @@ void kmscon_console_reset_all_tabstops(struct kmscon_console *con)
|
||||
con->tab_ruler[i] = false;
|
||||
}
|
||||
|
||||
void kmscon_console_write(struct kmscon_console *con, kmscon_symbol_t ch,
|
||||
void kmscon_console_write(struct kmscon_console *con, tsm_symbol_t ch,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
unsigned int last;
|
||||
|
@ -68,7 +68,7 @@ struct kmscon_console_attr {
|
||||
typedef int (*kmscon_console_prepare_cb) (struct kmscon_console *con,
|
||||
void *data);
|
||||
typedef int (*kmscon_console_draw_cb) (struct kmscon_console *con,
|
||||
kmscon_symbol_t ch,
|
||||
tsm_symbol_t ch,
|
||||
unsigned int posx,
|
||||
unsigned int posy,
|
||||
const struct kmscon_console_attr *attr,
|
||||
@ -109,7 +109,7 @@ void kmscon_console_set_tabstop(struct kmscon_console *con);
|
||||
void kmscon_console_reset_tabstop(struct kmscon_console *con);
|
||||
void kmscon_console_reset_all_tabstops(struct kmscon_console *con);
|
||||
|
||||
void kmscon_console_write(struct kmscon_console *con, kmscon_symbol_t ch,
|
||||
void kmscon_console_write(struct kmscon_console *con, tsm_symbol_t ch,
|
||||
const struct kmscon_console_attr *attr);
|
||||
void kmscon_console_newline(struct kmscon_console *con);
|
||||
void kmscon_console_scroll_up(struct kmscon_console *con, unsigned int num);
|
||||
|
@ -443,7 +443,7 @@ int kmscon_text_prepare(struct kmscon_text *txt)
|
||||
*
|
||||
* Returns: 0 on success or negative error code if this glyph couldn't be drawn.
|
||||
*/
|
||||
int kmscon_text_draw(struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
int kmscon_text_draw(struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
@ -503,7 +503,7 @@ int kmscon_text_prepare_cb(struct kmscon_console *con, void *data)
|
||||
return kmscon_text_prepare(data);
|
||||
}
|
||||
|
||||
int kmscon_text_draw_cb(struct kmscon_console *con, kmscon_symbol_t ch,
|
||||
int kmscon_text_draw_cb(struct kmscon_console *con, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr, void *data)
|
||||
{
|
||||
|
10
src/text.h
10
src/text.h
@ -87,7 +87,7 @@ struct kmscon_font_ops {
|
||||
int (*init) (struct kmscon_font *out,
|
||||
const struct kmscon_font_attr *attr);
|
||||
void (*destroy) (struct kmscon_font *font);
|
||||
int (*render) (struct kmscon_font *font, kmscon_symbol_t sym,
|
||||
int (*render) (struct kmscon_font *font, tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out);
|
||||
int (*render_empty) (struct kmscon_font *font,
|
||||
const struct kmscon_glyph **out);
|
||||
@ -104,7 +104,7 @@ int kmscon_font_find(struct kmscon_font **out,
|
||||
void kmscon_font_ref(struct kmscon_font *font);
|
||||
void kmscon_font_unref(struct kmscon_font *font);
|
||||
|
||||
int kmscon_font_render(struct kmscon_font *font, kmscon_symbol_t sym,
|
||||
int kmscon_font_render(struct kmscon_font *font, tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out);
|
||||
int kmscon_font_render_empty(struct kmscon_font *font,
|
||||
const struct kmscon_glyph **out);
|
||||
@ -135,7 +135,7 @@ struct kmscon_text_ops {
|
||||
int (*set) (struct kmscon_text *txt);
|
||||
void (*unset) (struct kmscon_text *txt);
|
||||
int (*prepare) (struct kmscon_text *txt);
|
||||
int (*draw) (struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
int (*draw) (struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr);
|
||||
int (*render) (struct kmscon_text *txt);
|
||||
@ -157,14 +157,14 @@ unsigned int kmscon_text_get_cols(struct kmscon_text *txt);
|
||||
unsigned int kmscon_text_get_rows(struct kmscon_text *txt);
|
||||
|
||||
int kmscon_text_prepare(struct kmscon_text *txt);
|
||||
int kmscon_text_draw(struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
int kmscon_text_draw(struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr);
|
||||
int kmscon_text_render(struct kmscon_text *txt);
|
||||
void kmscon_text_abort(struct kmscon_text *txt);
|
||||
|
||||
int kmscon_text_prepare_cb(struct kmscon_console *con, void *data);
|
||||
int kmscon_text_draw_cb(struct kmscon_console *con, kmscon_symbol_t ch,
|
||||
int kmscon_text_draw_cb(struct kmscon_console *con, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr, void *data);
|
||||
int kmscon_text_render_cb(struct kmscon_console *con, void *data);
|
||||
|
@ -59,7 +59,7 @@ static int bblit_set(struct kmscon_text *txt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bblit_draw(struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
static int bblit_draw(struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
|
@ -111,7 +111,7 @@ static void bbulk_unset(struct kmscon_text *txt)
|
||||
bb->reqs = NULL;
|
||||
}
|
||||
|
||||
static int bbulk_draw(struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
static int bbulk_draw(struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
|
@ -460,7 +460,7 @@ void kmscon_font_unref(struct kmscon_font *font)
|
||||
*
|
||||
* Returns: 0 on success, negative error code on failure
|
||||
*/
|
||||
int kmscon_font_render(struct kmscon_font *font, kmscon_symbol_t sym,
|
||||
int kmscon_font_render(struct kmscon_font *font, tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out)
|
||||
{
|
||||
if (!font || !out)
|
||||
|
@ -82,13 +82,13 @@ static void kmscon_font_8x16_destroy(struct kmscon_font *font)
|
||||
}
|
||||
|
||||
static int kmscon_font_8x16_render(struct kmscon_font *font,
|
||||
kmscon_symbol_t sym,
|
||||
tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out)
|
||||
{
|
||||
const uint32_t *val;
|
||||
size_t len;
|
||||
|
||||
val = kmscon_symbol_get(&sym, &len);
|
||||
val = tsm_symbol_get(&sym, &len);
|
||||
if (len > 1 || *val >= 256)
|
||||
return -ERANGE;
|
||||
|
||||
|
@ -138,7 +138,7 @@ static void manager__unref()
|
||||
}
|
||||
|
||||
static int get_glyph(struct face *face, struct kmscon_glyph **out,
|
||||
kmscon_symbol_t ch)
|
||||
tsm_symbol_t ch)
|
||||
{
|
||||
struct kmscon_glyph *glyph;
|
||||
struct glyph *data;
|
||||
@ -180,7 +180,7 @@ static int get_glyph(struct face *face, struct kmscon_glyph **out,
|
||||
* TODO: Fix this by drawing all related characters into a single glyph
|
||||
* and saving it or simply refer to the pango backend which already does
|
||||
* that. */
|
||||
val = kmscon_symbol_get(&ch, &len);
|
||||
val = tsm_symbol_get(&ch, &len);
|
||||
if (len > 1 || !*val) {
|
||||
ret = -ERANGE;
|
||||
goto out_glyph;
|
||||
@ -549,7 +549,7 @@ static int generate_specials(struct face *face)
|
||||
|
||||
memset(face->empty.buf.data, 0, s);
|
||||
|
||||
ret = get_glyph(face, &g, kmscon_symbol_make('?'));
|
||||
ret = get_glyph(face, &g, tsm_symbol_make('?'));
|
||||
if (ret) {
|
||||
memcpy(&face->inval, &face->empty, sizeof(face->inval));
|
||||
} else {
|
||||
@ -564,7 +564,7 @@ static int kmscon_font_freetype2_init(struct kmscon_font *out,
|
||||
{
|
||||
struct face *face = NULL;
|
||||
int ret;
|
||||
kmscon_symbol_t ch;
|
||||
tsm_symbol_t ch;
|
||||
unsigned int i, width;
|
||||
struct kmscon_glyph *glyph;
|
||||
struct glyph *data;
|
||||
@ -592,7 +592,7 @@ static int kmscon_font_freetype2_init(struct kmscon_font *out,
|
||||
if (face->shrink) {
|
||||
width = 0;
|
||||
for (i = 0x20; i < 0x7f; ++i) {
|
||||
ch = kmscon_symbol_make(i);
|
||||
ch = tsm_symbol_make(i);
|
||||
ret = get_glyph(face, &glyph, ch);
|
||||
if (ret)
|
||||
continue;
|
||||
@ -636,7 +636,7 @@ static void kmscon_font_freetype2_destroy(struct kmscon_font *font)
|
||||
}
|
||||
|
||||
static int kmscon_font_freetype2_render(struct kmscon_font *font,
|
||||
kmscon_symbol_t sym,
|
||||
tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out)
|
||||
{
|
||||
struct kmscon_glyph *glyph;
|
||||
|
@ -109,7 +109,7 @@ static void manager__unref()
|
||||
}
|
||||
|
||||
static int get_glyph(struct face *face, struct kmscon_glyph **out,
|
||||
kmscon_symbol_t ch)
|
||||
tsm_symbol_t ch)
|
||||
{
|
||||
struct kmscon_glyph *glyph;
|
||||
PangoLayout *layout;
|
||||
@ -148,9 +148,9 @@ static int get_glyph(struct face *face, struct kmscon_glyph **out,
|
||||
/* no line spacing */
|
||||
pango_layout_set_spacing(layout, 0);
|
||||
|
||||
val = kmscon_symbol_get_u8(ch, &len);
|
||||
val = tsm_symbol_get_u8(ch, &len);
|
||||
pango_layout_set_text(layout, val, len);
|
||||
kmscon_symbol_free_u8(val);
|
||||
tsm_symbol_free_u8(val);
|
||||
|
||||
cnt = pango_layout_get_line_count(layout);
|
||||
if (cnt == 0) {
|
||||
@ -386,7 +386,7 @@ static void kmscon_font_pango_destroy(struct kmscon_font *font)
|
||||
}
|
||||
|
||||
static int kmscon_font_pango_render(struct kmscon_font *font,
|
||||
kmscon_symbol_t sym,
|
||||
tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out)
|
||||
{
|
||||
struct kmscon_glyph *glyph;
|
||||
|
@ -78,13 +78,13 @@ static void kmscon_font_unifont_destroy(struct kmscon_font *font)
|
||||
}
|
||||
|
||||
static int kmscon_font_unifont_render(struct kmscon_font *font,
|
||||
kmscon_symbol_t sym,
|
||||
tsm_symbol_t sym,
|
||||
const struct kmscon_glyph **out)
|
||||
{
|
||||
const uint32_t *val;
|
||||
size_t len;
|
||||
|
||||
val = kmscon_symbol_get(&sym, &len);
|
||||
val = tsm_symbol_get(&sym, &len);
|
||||
if (len > 1 || *val >= kmscon_text_font_unifont_data_hex_len)
|
||||
return -ERANGE;
|
||||
|
||||
|
@ -366,7 +366,7 @@ err_free:
|
||||
}
|
||||
|
||||
static int find_glyph(struct kmscon_text *txt, struct glyph **out,
|
||||
kmscon_symbol_t ch)
|
||||
tsm_symbol_t ch)
|
||||
{
|
||||
struct gltex *gt = txt->data;
|
||||
struct atlas *atlas;
|
||||
@ -520,7 +520,7 @@ static int gltex_prepare(struct kmscon_text *txt)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gltex_draw(struct kmscon_text *txt, kmscon_symbol_t ch,
|
||||
static int gltex_draw(struct kmscon_text *txt, tsm_symbol_t ch,
|
||||
unsigned int posx, unsigned int posy,
|
||||
const struct kmscon_console_attr *attr)
|
||||
{
|
||||
|
@ -67,23 +67,23 @@
|
||||
|
||||
/*
|
||||
* Unicode Symbol Handling
|
||||
* The main goal of the kmscon_symbol_* functions is to provide a datatype which
|
||||
* The main goal of the tsm_symbol_* functions is to provide a datatype which
|
||||
* can contain the representation of any printable character. This includes all
|
||||
* basic Unicode characters but also combined characters.
|
||||
* To avoid all the memory management we still represent a character as a single
|
||||
* integer value (kmscon_symbol_t) but internally we allocate a string which is
|
||||
* integer value (tsm_symbol_t) but internally we allocate a string which is
|
||||
* represented by this value.
|
||||
*
|
||||
* A kmscon_symbol_t is an integer which represents a single character point.
|
||||
* A tsm_symbol_t is an integer which represents a single character point.
|
||||
* For most Unicode characters this is simply the UCS4 representation. In fact,
|
||||
* every UCS4 characters is a valid kmscon_symbol_t object.
|
||||
* every UCS4 characters is a valid tsm_symbol_t object.
|
||||
* However, Unicode standard allows combining marks. Therefore, some characters
|
||||
* consists of more than one Unicode character.
|
||||
* A global symbol-table provides all those combined characters as single
|
||||
* integers. You simply create a valid base character and append your combining
|
||||
* marks and the table will return a new valid kmscon_symbol_t. It is no longer
|
||||
* marks and the table will return a new valid tsm_symbol_t. It is no longer
|
||||
* a valid UCS4 value, though. But no memory management is needed as all
|
||||
* kmscon_symbol_t objects are simple integers.
|
||||
* tsm_symbol_t objects are simple integers.
|
||||
*
|
||||
* The symbol table contains two-way
|
||||
* references. The Hash Table contains all the symbols with the symbol ucs4
|
||||
@ -103,7 +103,7 @@
|
||||
#define KMSCON_UCS4_MAX 0x7fffffffUL
|
||||
#define KMSCON_UCS4_INVALID 0xfffd
|
||||
|
||||
const kmscon_symbol_t kmscon_symbol_default = 0;
|
||||
const tsm_symbol_t tsm_symbol_default = 0;
|
||||
static const char default_u8[] = { 0 };
|
||||
|
||||
static pthread_mutex_t table_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
@ -178,7 +178,7 @@ static int table__init()
|
||||
return 0;
|
||||
}
|
||||
|
||||
kmscon_symbol_t kmscon_symbol_make(uint32_t ucs4)
|
||||
tsm_symbol_t tsm_symbol_make(uint32_t ucs4)
|
||||
{
|
||||
if (ucs4 > KMSCON_UCS4_MAX) {
|
||||
log_warn("invalid ucs4 character");
|
||||
@ -199,7 +199,7 @@ kmscon_symbol_t kmscon_symbol_make(uint32_t ucs4)
|
||||
* This always returns a valid value. If an error happens, the default character
|
||||
* is returned. If \size is NULL, then the size value is omitted.
|
||||
*/
|
||||
static const uint32_t *table__get(kmscon_symbol_t *sym, size_t *size)
|
||||
static const uint32_t *table__get(tsm_symbol_t *sym, size_t *size)
|
||||
{
|
||||
uint32_t *ucs4;
|
||||
|
||||
@ -212,7 +212,7 @@ static const uint32_t *table__get(kmscon_symbol_t *sym, size_t *size)
|
||||
if (table__init()) {
|
||||
if (size)
|
||||
*size = 1;
|
||||
return &kmscon_symbol_default;
|
||||
return &tsm_symbol_default;
|
||||
}
|
||||
|
||||
ucs4 = *KMSCON_ARRAY_AT(table_index, uint32_t*,
|
||||
@ -220,7 +220,7 @@ static const uint32_t *table__get(kmscon_symbol_t *sym, size_t *size)
|
||||
if (!ucs4) {
|
||||
if (size)
|
||||
*size = 1;
|
||||
return &kmscon_symbol_default;
|
||||
return &tsm_symbol_default;
|
||||
}
|
||||
|
||||
if (size) {
|
||||
@ -232,7 +232,7 @@ static const uint32_t *table__get(kmscon_symbol_t *sym, size_t *size)
|
||||
return ucs4;
|
||||
}
|
||||
|
||||
const uint32_t *kmscon_symbol_get(kmscon_symbol_t *sym, size_t *size)
|
||||
const uint32_t *tsm_symbol_get(tsm_symbol_t *sym, size_t *size)
|
||||
{
|
||||
const uint32_t *res;
|
||||
|
||||
@ -243,12 +243,12 @@ const uint32_t *kmscon_symbol_get(kmscon_symbol_t *sym, size_t *size)
|
||||
return res;
|
||||
}
|
||||
|
||||
kmscon_symbol_t kmscon_symbol_append(kmscon_symbol_t sym, uint32_t ucs4)
|
||||
tsm_symbol_t tsm_symbol_append(tsm_symbol_t sym, uint32_t ucs4)
|
||||
{
|
||||
uint32_t buf[KMSCON_UCS4_MAXLEN + 1], nsym, *nval;
|
||||
const uint32_t *ptr;
|
||||
size_t s;
|
||||
kmscon_symbol_t rsym;
|
||||
tsm_symbol_t rsym;
|
||||
void *tmp;
|
||||
bool res;
|
||||
|
||||
@ -334,13 +334,13 @@ static size_t ucs4_to_utf8(uint32_t g, char *txt)
|
||||
}
|
||||
}
|
||||
|
||||
const char *kmscon_symbol_get_u8(kmscon_symbol_t sym, size_t *size)
|
||||
const char *tsm_symbol_get_u8(tsm_symbol_t sym, size_t *size)
|
||||
{
|
||||
const uint32_t *ucs4;
|
||||
char *val;
|
||||
size_t i, pos, len;
|
||||
|
||||
ucs4 = kmscon_symbol_get(&sym, &len);
|
||||
ucs4 = tsm_symbol_get(&sym, &len);
|
||||
val = malloc(4 * len);
|
||||
if (!val)
|
||||
goto err_out;
|
||||
@ -362,7 +362,7 @@ err_out:
|
||||
return default_u8;
|
||||
}
|
||||
|
||||
void kmscon_symbol_free_u8(const char *s)
|
||||
void tsm_symbol_free_u8(const char *s)
|
||||
{
|
||||
if (s != default_u8)
|
||||
free((void*)s);
|
||||
|
@ -44,15 +44,15 @@
|
||||
|
||||
/* symbols */
|
||||
|
||||
typedef uint32_t kmscon_symbol_t;
|
||||
typedef uint32_t tsm_symbol_t;
|
||||
|
||||
extern const kmscon_symbol_t kmscon_symbol_default;
|
||||
extern const tsm_symbol_t tsm_symbol_default;
|
||||
|
||||
kmscon_symbol_t kmscon_symbol_make(uint32_t ucs4);
|
||||
kmscon_symbol_t kmscon_symbol_append(kmscon_symbol_t sym, uint32_t ucs4);
|
||||
const uint32_t *kmscon_symbol_get(kmscon_symbol_t *sym, size_t *size);
|
||||
const char *kmscon_symbol_get_u8(kmscon_symbol_t sym, size_t *size);
|
||||
void kmscon_symbol_free_u8(const char *s);
|
||||
tsm_symbol_t tsm_symbol_make(uint32_t ucs4);
|
||||
tsm_symbol_t tsm_symbol_append(tsm_symbol_t sym, uint32_t ucs4);
|
||||
const uint32_t *tsm_symbol_get(tsm_symbol_t *sym, size_t *size);
|
||||
const char *tsm_symbol_get_u8(tsm_symbol_t sym, size_t *size);
|
||||
void tsm_symbol_free_u8(const char *s);
|
||||
|
||||
/* utf8 state machine */
|
||||
|
||||
|
14
src/vte.c
14
src/vte.c
@ -482,7 +482,7 @@ static void vte_write_debug(struct kmscon_vte *vte, const char *u8, size_t len,
|
||||
vte_write_debug((_vte), (_u8), (_len), true, __FILE__, __LINE__)
|
||||
|
||||
/* write to console */
|
||||
static void write_console(struct kmscon_vte *vte, kmscon_symbol_t sym)
|
||||
static void write_console(struct kmscon_vte *vte, tsm_symbol_t sym)
|
||||
{
|
||||
to_rgb(vte, &vte->cattr);
|
||||
kmscon_console_write(vte->con, sym, &vte->cattr);
|
||||
@ -1658,7 +1658,7 @@ static uint32_t vte_map(struct kmscon_vte *vte, uint32_t val)
|
||||
/* perform parser action */
|
||||
static void do_action(struct kmscon_vte *vte, uint32_t data, int action)
|
||||
{
|
||||
kmscon_symbol_t sym;
|
||||
tsm_symbol_t sym;
|
||||
|
||||
switch (action) {
|
||||
case ACTION_NONE:
|
||||
@ -1668,7 +1668,7 @@ static void do_action(struct kmscon_vte *vte, uint32_t data, int action)
|
||||
/* ignore character */
|
||||
break;
|
||||
case ACTION_PRINT:
|
||||
sym = kmscon_symbol_make(vte_map(vte, data));
|
||||
sym = tsm_symbol_make(vte_map(vte, data));
|
||||
write_console(vte, sym);
|
||||
break;
|
||||
case ACTION_EXECUTE:
|
||||
@ -2119,7 +2119,7 @@ void kmscon_vte_input(struct kmscon_vte *vte, const char *u8, size_t len)
|
||||
bool kmscon_vte_handle_keyboard(struct kmscon_vte *vte, uint32_t keysym,
|
||||
unsigned int mods, uint32_t unicode)
|
||||
{
|
||||
kmscon_symbol_t sym;
|
||||
tsm_symbol_t sym;
|
||||
char val;
|
||||
size_t len;
|
||||
const char *u8;
|
||||
@ -2553,10 +2553,10 @@ bool kmscon_vte_handle_keyboard(struct kmscon_vte *vte, uint32_t keysym,
|
||||
}
|
||||
vte_write_raw(vte, &val, 1);
|
||||
} else {
|
||||
sym = kmscon_symbol_make(unicode);
|
||||
u8 = kmscon_symbol_get_u8(sym, &len);
|
||||
sym = tsm_symbol_make(unicode);
|
||||
u8 = tsm_symbol_get_u8(sym, &len);
|
||||
vte_write_raw(vte, u8, len);
|
||||
kmscon_symbol_free_u8(u8);
|
||||
tsm_symbol_free_u8(u8);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user