term: get_terminal_size() for js_node, term.clear() for all js backends (#12189)

pull/12198/head
playX 2021-10-15 10:10:40 +03:00 committed by GitHub
parent d3887c1568
commit 814b4ebb4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 8 deletions

View File

@ -1,8 +1,23 @@
module term module term
#const $tty = require('tty');
// get_terminal_size returns a number of colums and rows of terminal window. // get_terminal_size returns a number of colums and rows of terminal window.
pub fn get_terminal_size() (int, int) { pub fn get_terminal_size() (int, int) {
// TODO Find a way to get proper width & height of the terminal $if js_node {
// on a Javascript environment colums := 0
return default_columns_size, default_rows_size rows := 0
#let sizes = $tty.WriteStream(1).getWindowSize();
#colums.val = sizes[0];
#rows.val = sizes[1];
return colums, rows
} $else {
return default_columns_size, default_rows_size
}
}
// clear clears current terminal screen.
pub fn clear() {
print('\x1b[2J')
print('\x1b[H')
} }

View File

@ -264,24 +264,24 @@ fn (mut g JsGen) gen_str_for_multi_return(info ast.MultiReturn, styp string, str
arg_str_fn_name := g.get_str_fn(typ) arg_str_fn_name := g.get_str_fn(typ)
if should_use_indent_func(sym.kind) && !sym_has_str_method { if should_use_indent_func(sym.kind) && !sym_has_str_method {
fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}(a.arg$i));') fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}(a[$i]));')
} else if sym.kind in [.f32, .f64] { } else if sym.kind in [.f32, .f64] {
if sym.kind == .f32 { if sym.kind == .f32 {
tmp_val := str_intp_g32('a.arg$i') tmp_val := str_intp_g32('a[$i]')
fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_val);') fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_val);')
} else { } else {
tmp_val := str_intp_g64('a.arg$i') tmp_val := str_intp_g64('a[$i]')
fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_val);') fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_val);')
} }
} else if sym.kind == .string { } else if sym.kind == .string {
tmp_str := str_intp_sq('a.arg$i') tmp_str := str_intp_sq('a[$i]')
fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_str);') fn_builder.writeln('\tstrings__Builder_write_string(sb, $tmp_str);')
} else if sym.kind == .function { } else if sym.kind == .function {
fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}());') fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}());')
} else { } else {
deref, deref_label := deref_kind(str_method_expects_ptr, is_arg_ptr, typ) deref, deref_label := deref_kind(str_method_expects_ptr, is_arg_ptr, typ)
fn_builder.writeln('\t\tstrings__Builder_write_string(sb, new string("$deref_label"));') fn_builder.writeln('\t\tstrings__Builder_write_string(sb, new string("$deref_label"));')
fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}( $deref a.arg$i));') fn_builder.writeln('\tstrings__Builder_write_string(sb, ${arg_str_fn_name}( $deref a[$i]));')
} }
if i != info.types.len - 1 { if i != info.types.len - 1 {
fn_builder.writeln('\tstrings__Builder_write_string(sb, new string(", "));') fn_builder.writeln('\tstrings__Builder_write_string(sb, new string(", "));')