From 68416e28b27dbaa74552744c365544ff57857afc Mon Sep 17 00:00:00 2001 From: brotzeit Date: Wed, 2 Jan 2019 17:31:09 +0100 Subject: [PATCH] use rust for utf8 --- rust_src/src/lib.rs | 2 +- rust_src/src/vterm.rs | 26 +++++++++++++++++--------- src/lisp.h | 4 ---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/rust_src/src/lib.rs b/rust_src/src/lib.rs index 56cac3c1aa9..a58117584e2 100644 --- a/rust_src/src/lib.rs +++ b/rust_src/src/lib.rs @@ -102,7 +102,6 @@ mod marker; mod math; mod minibuf; mod multibyte; -mod vterm; mod numbers; mod obarray; mod objects; @@ -120,6 +119,7 @@ mod threads; mod time; mod util; mod vectors; +mod vterm; mod window_configuration; mod windows; mod xml; diff --git a/rust_src/src/vterm.rs b/rust_src/src/vterm.rs index eb491232818..69a749b109c 100644 --- a/rust_src/src/vterm.rs +++ b/rust_src/src/vterm.rs @@ -17,14 +17,15 @@ use crate::{ remacs_sys::{ allocate_vterm, color_to_rgb_string, get_col_offset, mysave_value, refresh_lines, - rgb_string_to_color, row_to_linenr, term_process_key, vterm_module_copy_string_contents, - vterm_output_read, vterm_sb_buffer_size, vterm_screen_callbacks, - vterm_screen_set_callbacks, vterm_string_bytes, + rgb_string_to_color, row_to_linenr, term_process_key, vterm_output_read, + vterm_sb_buffer_size, vterm_screen_callbacks, vterm_screen_set_callbacks, + vterm_string_bytes, }, remacs_sys::{ - del_range, make_string, send_process, vterminal, EmacsInt, Fput_text_property, - Lisp_Misc_Type, Qbold, Qface, Qitalic, Qnil, Qnormal, Qt, Qvtermp, STRING_BYTES, + code_convert_string_norecord, del_range, make_string, send_process, vterminal, EmacsInt, + Fput_text_property, Lisp_Misc_Type, Qbold, Qface, Qitalic, Qnil, Qnormal, Qt, Qutf_8, + Qvtermp, STRING_BYTES, }, // vterm @@ -254,9 +255,16 @@ pub fn vterminal_update( ) -> LispObject { unsafe { if string.is_not_nil() { - let mut len = vterm_string_bytes(string) as isize; - let mut key: Vec = Vec::with_capacity(len as usize); - vterm_module_copy_string_contents(string, key.as_mut_ptr() as *mut c_char, &mut len); + let mut utf8 = code_convert_string_norecord(string, Qutf_8, true).as_string_or_error(); + let mut len = STRING_BYTES(utf8.as_mut()) as isize + 1; + + let mut v: Vec = Vec::with_capacity(len as usize); + + let key = libc::memcpy( + v.as_mut_ptr() as *mut c_void, + utf8.data_ptr() as *mut c_void, + len as libc::size_t, + ) as *mut c_uchar; let mut modifier = VTermModifier::VTERM_MOD_NONE; if shift { @@ -273,7 +281,7 @@ pub fn vterminal_update( term_process_key( vterm.as_mut() as *mut vterminal, - key.as_mut_ptr() as *mut c_uchar, + key, len as usize - 1, modifier, ); diff --git a/src/lisp.h b/src/lisp.h index 889b7c39df5..d8351dab272 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -4972,8 +4972,6 @@ extern size_t get_col_offset(vterminal *term, int row, int end_col); extern void term_process_key(vterminal *term, unsigned char *key, size_t len, VTermModifier modifier); -extern int vterm_string_bytes(Lisp_Object string); - extern Lisp_Object vterminal_render_text (char *buffer, int len, VTermScreenCell *cell); extern int vterminal_movecursor(VTermPos new, VTermPos old, int visible, @@ -4989,8 +4987,6 @@ extern VTermColor rgb_string_to_color(Lisp_Object string); extern Lisp_Object color_to_rgb_string(VTermColor color); -extern bool vterm_module_copy_string_contents (Lisp_Object lisp_str, char *buffer, ptrdiff_t *length); - extern vterminal *mysave_value (Lisp_Object val);