Skip to content

Commit

Permalink
use rust for utf8
Browse files Browse the repository at this point in the history
  • Loading branch information
brotzeit committed Jan 2, 2019
1 parent 72bbb6e commit 68416e2
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 14 deletions.
2 changes: 1 addition & 1 deletion rust_src/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ mod marker;
mod math;
mod minibuf;
mod multibyte;
mod vterm;
mod numbers;
mod obarray;
mod objects;
Expand All @@ -120,6 +119,7 @@ mod threads;
mod time;
mod util;
mod vectors;
mod vterm;
mod window_configuration;
mod windows;
mod xml;
Expand Down
26 changes: 17 additions & 9 deletions rust_src/src/vterm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<c_uchar> = 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<c_uchar> = 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 {
Expand All @@ -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,
);
Expand Down
4 changes: 0 additions & 4 deletions src/lisp.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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);


Expand Down

0 comments on commit 68416e2

Please sign in to comment.