mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
term: get_terminal_size()
This commit is contained in:
parent
08d3401092
commit
78c96fe989
@ -95,7 +95,7 @@ pub fn (ts mut TestSession) test() {
|
|||||||
}
|
}
|
||||||
ts.waitgroup.wait()
|
ts.waitgroup.wait()
|
||||||
ts.benchmark.stop()
|
ts.benchmark.stop()
|
||||||
eprintln(term.h_divider())
|
eprintln(term.h_divider('-'))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ pub fn building_any_v_binaries_failed() bool {
|
|||||||
eprintln(bmark.step_message_ok('command: ${cmd}'))
|
eprintln(bmark.step_message_ok('command: ${cmd}'))
|
||||||
}
|
}
|
||||||
bmark.stop()
|
bmark.stop()
|
||||||
eprintln(term.h_divider())
|
eprintln(term.h_divider('-'))
|
||||||
eprintln(bmark.total_message('building v binaries'))
|
eprintln(bmark.total_message('building v binaries'))
|
||||||
return failed
|
return failed
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ enum Action {
|
|||||||
|
|
||||||
fn C.tcgetattr() int
|
fn C.tcgetattr() int
|
||||||
fn C.tcsetattr() int
|
fn C.tcsetattr() int
|
||||||
fn C.ioctl() int
|
//fn C.ioctl() int
|
||||||
fn C.raise()
|
fn C.raise()
|
||||||
|
|
||||||
// Toggle raw mode of the terminal by changing its attributes
|
// Toggle raw mode of the terminal by changing its attributes
|
||||||
|
@ -26,18 +26,3 @@ pub fn ok_message(s string) string {
|
|||||||
pub fn fail_message(s string) string {
|
pub fn fail_message(s string) string {
|
||||||
return if can_show_color_on_stdout() { red(s) } else { s }
|
return if can_show_color_on_stdout() { red(s) } else { s }
|
||||||
}
|
}
|
||||||
|
|
||||||
// h_divider will return a horizontal divider line with a dynamic width,
|
|
||||||
// that depends on the current terminal settings
|
|
||||||
pub fn h_divider() string {
|
|
||||||
mut cols := 76
|
|
||||||
if term_size := os.exec('stty size') {
|
|
||||||
if term_size.exit_code == 0 {
|
|
||||||
term_cols := term_size.output.split(' ')[1].int()
|
|
||||||
if term_cols > 0 {
|
|
||||||
cols = term_cols
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return '-'.repeat(cols)
|
|
||||||
}
|
|
||||||
|
15
vlib/term/misc.v
Normal file
15
vlib/term/misc.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
module term
|
||||||
|
|
||||||
|
// h_divider will return a horizontal divider line with a dynamic width,
|
||||||
|
// that depends on the current terminal settings
|
||||||
|
pub fn h_divider(divider string) string {
|
||||||
|
mut cols := 76
|
||||||
|
term_cols, _ := get_terminal_size()
|
||||||
|
|
||||||
|
if term_cols > 0 {
|
||||||
|
cols = term_cols
|
||||||
|
}
|
||||||
|
|
||||||
|
result := divider.repeat(1 + (cols / divider.len))
|
||||||
|
return result[0..cols]
|
||||||
|
}
|
6
vlib/term/misc_js.v
Normal file
6
vlib/term/misc_js.v
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
module term
|
||||||
|
|
||||||
|
pub fn get_terminal_size() (int, int) {
|
||||||
|
// TODO: find a way to get proper width&height of the terminal on a Javascript environment
|
||||||
|
return 80, 25
|
||||||
|
}
|
20
vlib/term/misc_nix.v
Normal file
20
vlib/term/misc_nix.v
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
module term
|
||||||
|
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
struct C.winsize{
|
||||||
|
pub:
|
||||||
|
ws_row int
|
||||||
|
ws_col int
|
||||||
|
}
|
||||||
|
|
||||||
|
fn C.ioctl() int
|
||||||
|
|
||||||
|
pub fn get_terminal_size() (int, int) {
|
||||||
|
// TODO: check for resize events
|
||||||
|
|
||||||
|
mut w := C.winsize{}
|
||||||
|
C.ioctl(0, C.TIOCGWINSZ, &w)
|
||||||
|
|
||||||
|
return w.ws_col, w.ws_row
|
||||||
|
}
|
6
vlib/term/misc_windows.v
Normal file
6
vlib/term/misc_windows.v
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
module term
|
||||||
|
|
||||||
|
pub fn get_terminal_size() (int, int) {
|
||||||
|
// TODO: find a way to get proper width&height of the terminal on windows, probably using Winapis
|
||||||
|
return 80, 25
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user